{"_id":"@63mmo/api","_rev":"2-64bc08ea81efe0f9e532f94cde606496","name":"@63mmo/api","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@63mmo/api","version":"0.1.0","license":"MIT","_id":"@63mmo/api@0.1.0","maintainers":[{"name":"keqing77","email":"zcx668265@outlook.com"}],"dist":{"shasum":"8ad7c172e2fbced780048c73587be23a6f1b579f","tarball":"https://registry.npmjs.org/@63mmo/api/-/api-0.1.0.tgz","fileCount":29,"integrity":"sha512-RMw10pqLVzqeSEN6F214K7xJB+rCXnvOSmeFw59xUDuV8VEB+r2VqWkqmT/Ju3sMzw7DkeSEsQpAafmTCqk34w==","signatures":[{"sig":"MEYCIQCx73x0G+j/STTbVJKLZZFGfr999+yuZgV09pZTrhwk/AIhAL/5EZo3/smtvrhgozElnQ0xLvpzdF0wGCJPnFLyr2cZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34797},"type":"module","_from":"file:63mmo-api-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"keqing77","email":"zcx668265@outlook.com"},"_resolved":"/private/var/folders/f8/953xb5vj2j39wzvk2jkkp9280000gn/T/2315d58bdcecf0868a325552c827bdbe/63mmo-api-0.1.0.tgz","_integrity":"sha512-RMw10pqLVzqeSEN6F214K7xJB+rCXnvOSmeFw59xUDuV8VEB+r2VqWkqmT/Ju3sMzw7DkeSEsQpAafmTCqk34w==","_npmVersion":"11.6.1","description":"63MMO 网关编程客户端：@63mmo/protocol 帧类型上的 isomorphic HTTP + WS 封装（账号/部署/永久令牌 + 世界帧流），供玩家脚本与第三方工具调用","directories":{},"_nodeVersion":"24.11.0","dependencies":{"@63mmo/protocol":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","esbuild":"^0.28.2","typescript":"~5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/api_0.1.0_1788277612501_0.024286993636365883","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@63mmo/api","version":"0.1.1","description":"63MMO 网关编程客户端：@63mmo/protocol 帧类型上的 isomorphic HTTP + WS 封装（账号/部署/永久令牌 + 世界帧流），供玩家脚本与第三方工具调用","license":"MIT","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"dependencies":{"@63mmo/protocol":"0.1.1"},"devDependencies":{"esbuild":"^0.28.2","typescript":"~5.9.3","vitest":"^4.1.11"},"scripts":{"typecheck":"tsc --noEmit -p tsconfig.json","test":"vitest run"},"_id":"@63mmo/api@0.1.1","_integrity":"sha512-i0AqfeupZ7Fm8v7kaE45JP01YDT14MLmSOWC2gUyTZgQoFOmwb9F1MO1M82QLfdGBvJ2kjNfEghFbvynL7SsyA==","_resolved":"/private/var/folders/f8/953xb5vj2j39wzvk2jkkp9280000gn/T/ff1919eafa58afdcd992bcd6fa0db8f0/63mmo-api-0.1.1.tgz","_from":"file:63mmo-api-0.1.1.tgz","_nodeVersion":"24.11.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-i0AqfeupZ7Fm8v7kaE45JP01YDT14MLmSOWC2gUyTZgQoFOmwb9F1MO1M82QLfdGBvJ2kjNfEghFbvynL7SsyA==","shasum":"4edb72c6d63b28d42b341e9c1e3bf2de160a8dc7","tarball":"https://registry.npmjs.org/@63mmo/api/-/api-0.1.1.tgz","fileCount":30,"unpackedSize":35896,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDAIBJUCniMp9+wH3G0vnX1rnko4Ld5DAfo7VwdPeB40AiAj10izL4ROuRy9xUS12MPLTl3r/eeNj/T2xsvMG4ZSYg=="}]},"_npmUser":{"name":"keqing77","email":"zcx668265@outlook.com"},"directories":{},"maintainers":[{"name":"keqing77","email":"zcx668265@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/api_0.1.1_1788314610462_0.03333020806824094"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-01T15:46:52.338Z","modified":"2026-09-02T02:03:30.782Z","0.1.0":"2026-09-01T15:46:52.650Z","0.1.1":"2026-09-02T02:03:30.627Z"},"license":"MIT","description":"63MMO 网关编程客户端：@63mmo/protocol 帧类型上的 isomorphic HTTP + WS 封装（账号/部署/永久令牌 + 世界帧流），供玩家脚本与第三方工具调用","maintainers":[{"name":"keqing77","email":"zcx668265@outlook.com"}],"readme":"# @63mmo/api\n\n63MMO 网关编程客户端：HTTP + WebSocket 的 isomorphic 封装，供玩家脚本、\nCI 与第三方工具调用。**发布产物零运行时依赖**（Node ≥22 原生\n`fetch`/`WebSocket`，浏览器原生）；`prepack` 时经 tsc + esbuild 产出\n`dist/`——npm 安装即可在纯 Node 直跑，无需 tsx/打包器。\n\n- `GatewayApi`：REST（账号/部署/永久令牌/模板），isomorphic fetch\n- `connectWorld`：WS 世界帧流（play/live 双模式、自动 pong、指数退避重连）\n- 帧类型来自 `@63mmo/protocol`（`ServerFrame`/`ClientFrame` 等，随本包再导出）\n\n> 源码形态（本仓库内 / git 直引）入口是 `.ts`，消费方需 bundler 或 tsx；\n> TS 消费方建议 `moduleResolution: \"bundler\"`（`@63mmo/protocol` 的类型\n> 入口是源码形态）。\n\n## 快速开始\n\n```bash\nnpm install @63mmo/api\n```\n\n```ts\nimport { GatewayApi, connectWorld } from \"@63mmo/api\";\n\n// 1. 登录（或用你在游戏页面创建的永久令牌——不随登出吊销）\nconst api = new GatewayApi({ baseUrl: \"http://127.0.0.1:9165\" });\nconst auth = await api.login(\"alice\", \"secret\");\napi.setToken(auth.token);\n\n// 2. 部署代码（lint + 影子运行 + 版本化；两次部署至少间隔 3s）\nconst out = await api.deploy(\"function loop() { /* ... */ }\");\nawait api.activate(out.versionId); // 下一 tick 生效\n\n// 3. 永久令牌（页面管理面的编程入口；上限 10 条命名令牌）\nconst tok = await api.createToken(\"ci\");\n// 之后：new GatewayApi({ baseUrl }).setToken(tok.token) 即可长期使用\n// await api.revokeToken(tok.token)  // 吊销\n\n// 4. 世界帧流（play 模式 = 玩家视角视野过滤帧；无 token = live 全量观战）\nconst conn = connectWorld({\n  url: \"ws://127.0.0.1:9165/ws\",\n  token: auth.token,\n  onFrame: (frame) => {\n    if (frame.t === \"delta\") console.log(\"tick\", frame.delta.tick);\n  },\n});\n// conn.close();\n```\n\n浏览器里 `baseUrl`/`url` 可缺省（同源推导，配 Vite 代理 `/api`、`/ws`）。\n\n## 错误约定\n\n- REST 非 2xx 一律抛 `ApiStatusError`：`message` 优先取服务端 `{error}`\n  字段（反代回 HTML 等非 JSON 错误体时回退状态行），`status` 保留 HTTP\n  状态码——401 = 令牌无效/被吊销，429 = 部署冷却\n- WS 的 `error` 帧经 `onFrame` 透传；协议版本失配时连接自动停止单元\n  （`onNotice(\"alert\", …)`）\n- 用**命名令牌**调 `logout()` 会被服务端拒绝（400）——logout 是会话语义，\n  吊销命名令牌请用 `revokeToken()`\n\n## 端点一览\n\n| 方法 | 网关端点 | 说明 |\n|---|---|---|\n| `register` | `POST /api/register` | 玩家名 + 邮箱 + 密码 |\n| `login` / `logout` | `POST /api/login` / `POST /api/logout` | 会话令牌（登出即吊销） |\n| `me` | `GET /api/me` | 账号档案 + 当前 tick 节拍 |\n| `spawn` / `rebirth` | `POST /api/spawn` / `POST /api/rebirth` | 地图选点出生/重生 |\n| `deploy` | `POST /api/deploy` | 上传代码（3s 冷却） |\n| `activate` | `POST /api/deploy/{id}/activate` | 激活/回滚版本 |\n| `versions` | `GET /api/versions` | 版本列表（可选携带源码） |\n| `templates` | `GET /api/templates` | 官方 bot 模板 |\n| `listTokens` | `GET /api/tokens` | 全部令牌（明文 + lastUsedAt） |\n| `createToken` | `POST /api/tokens` | 创建永久命名令牌 |\n| `revokeToken` | `DELETE /api/tokens/{token}` | 吊销 |\n| `connectWorld` | `GET /ws`（升级） | hello(token) + subscribe(play\\|live) |\n\n线上协议格式（JSON 文本帧、tag `\"t\"`、camelCase）见\n`@63mmo/protocol` 与 docs/tech/02「客户端架构」。\n","readmeFilename":"README.md"}