方式 D:Web 控制台
aixautots TypeScript 客户端 SDK
要做网页 / 桌面控制台(列设备、管脚本、跑 flow、看任务、实时镜像),用 TypeScript SDK aixautots。它是 headless 客户端层:带数据、传输、鉴权,UI 自备。
- 三个子包:
aixautots/core(AixClient+ 会话层)、aixautots/react(hooks)、aixautots/ui(设备部件)。 - 资源面:
devices / scripts / clusters / fleet / tasks / locators / nodes / projects / webhooks / llm / admin,外加会话层MirrorSession(镜像)/DeviceChannel(adb/wda/frida)。 - 运行 flow 两条链路:自家交互式运行走
fleet(/api/fleet/runs,可 pause/resume/cancel);第三方 webhook 走tasks/FlowRun(/api/webhook/tasks)。
接入架构(推荐):前端直连 + 后端两件事
消费方后端(薄) 消费方前端(直连 aixautobot)
───────────────── ──────────────────────────────
POST /mint-token ──────► createCachedUserCredential({ mint })
持 project key/secret, → <AixProvider config={{ baseUrl, auth }}>
铸 user JWT 返回 → useDevices / useScripts / useTasks / useFleetRun / useMirror
POST /provision /destroy
注入代理策略- 鉴权(关键):浏览器不持 project key/secret。消费方后端用 project key/secret 调
/api/auth/project-user铸 user JWT 返给前端;前端用createCachedUserCredential自动缓存/刷新(按expiresIn或 JWTexp,并发去重)。浏览器也无需网关X-API-Key。 - 单用户模型:项目开发者创建 project(拿 key/secret)→ 后端铸 user token → 该 user 用设备。
- provision/destroy 留后端:起/销设备并注入代理策略属密钥/策略面,不进浏览器 SDK;SDK 只暴露无策略的
devices.power('destroy')等生命周期。
最小示例(前端:换 token → 列设备 → 跑 flow)
import { AixClient, createCachedUserCredential } from 'aixautots/core'
import { AixProvider, useDevices, useFleetRun } from 'aixautots/react'
const auth = createCachedUserCredential({
mint: () => fetch('/mint-token').then((r) => r.json()), // 你后端 → { token, expiresIn? }
})
// <AixProvider config={{ baseUrl: 'https://aixautobot.com', auth }}>
function Panel() {
const { data: devices } = useDevices()
const run = useFleetRun()
return (
<button onClick={() => run.start(flow, [devices![0].id])}>
Run({run.status} {run.progress}%)
</button>
)
}也可用
{ kind: 'project', key, secret }直连——但仅限服务端 / Node 等可安全持密钥的环境,切勿放进浏览器。完整文档见aixautots/README.md;桌面端frontend/即是其参考实现。