@crvouga/mockingbird-service-prism

中文文档
3.11.0发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 2862

Prism Labs body-scan API的状态仿真器:主题,扫描,预先签名的抓取上传,处理阶段到READY,以及确定身体结构,测量,健康报告和资产结果.

中文使用文档
文档目录7 节
  1. 安装
  2. 使用量
  3. 路线
  4. 管理员(超过标准合同)
  5. 命名空间
  6. 故意不模拟
  7. API 密码

@crvouga/mockingbird-service-prism (英语)

本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .

国家模拟器 棱镜实验室 测试套件的机身扫描 API:主题提升、扫描 创建, 预签名的抓取将抓取页面 PUT 上传到每个阶段的视频 处理状态, 和ReADY-扫描结果 我们的后端持续(身体组成, 测量、新陈代谢年龄的健康报告、资产URL)。 扫描通过真实 寿命周期(CREATED → PROCESSING → READY 编号 : FAILED命令或模拟钟,以及 计算结果要确定对象的身高、体重、性别和年龄.

  • 行动范围: 支助
  • 合同openapi.yaml由消费者的zod schemas手写 (单位:千美元)prism-scan.adapter.ts)和捕获页的上传(body-scan-capture-page) (中文(简体) ).

安装

npm install -D @crvouga/mockingbird-service-prism

仅限无害环境管理。 节点 22或 Bun 1.2. 无土生属地. 给它服务 npx mockingbird-prism serve, (中文(简体) ), createServer 从 ./server (节点),或 createRuntime 与 任何获取服务器.

使用量

点 PRISM_API_URL 在模拟器上(允许http)并设定 PRISM_API_KEY 给任何东西(或 把它贴上 --api-key) (中文(简体) ). 没有两者,我们的适配器报告 unavailable 永远不要叫出来.

npx mockingbird-prism serve --port 8825 --auto-advance 2000
import { createServer } from "@crvouga/mockingbird-service-prism/server"

// Test setup: a local Prism.
const server = await createServer()
const baseUrl = server.url // the app's PRISM_API_URL

// Application code: the requests it sends to Prism.
const prism = async (path: string, body?: unknown) => {
  const response = await fetch(`${baseUrl}${path}`, {
    method: body === undefined ? "GET" : "POST",
    headers: { authorization: "Bearer k", accept: "application/json;v=1", "content-type": "application/json" },
    ...(body === undefined ? {} : { body: JSON.stringify(body) }),
  })
  return (await response.json()) as Record<string, any>
}
await prism("/users", {
  token: "member-1", sex: "female", region: "north_america", birthDate: "1990-04-02",
  weight: { value: 64, unit: "kg" }, height: { value: 1.7, unit: "m" },
  researchConsent: false, termsOfService: { accepted: true, version: "1" },
})
const scan = await prism("/scans", { userToken: "member-1", deviceConfigName: "IPHONE_SCANNER", bodyfatMethod: "coco2" })
const upload = await prism(`/scans/${scan.id}/upload-url`, {})
await fetch(upload.url, { method: "PUT", body: "capture video bytes" }) // the capture page's upload

// Test control: finish processing without waiting.
await fetch(`${baseUrl}/__admin/scans/${scan.id}/advance`, {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ to: "READY" }),
})

// Application code: the READY scan's results.
const bodyfat = await prism(`/scans/${scan.id}/bodyfat`)
// → {bodyfatMethod: "coco2", bodyfatPercentage: 29.6, leanMass: 45.07, fatMass: 18.93, …}

await server.close()

路线

所有与 Authorization: Bearer <key> 财务报告和审定财务报表 Accept: application/json;v=1,但 预签名上传和资产 URL.

路线行为
POST /users上调由 token (单位:千美元)sex, (中文(简体) ), region, (中文(简体) ), birthDate, (中文(简体) ), weight {value, unit kg|lb}, (中文(简体) ), height {value, unit m|in}, (中文(简体) ), researchConsent, (中文(简体) ), termsOfService——201 关于创建,200 关于更新,相同 id。 。 。 .
POST /scans{userToken, deviceConfigName: IPHONE_SCANNER|ANDROID_SCANNER, bodyfatMethod, assetConfigId?} — 201个扫描 {id, status: "CREATED", weight, height, …}; 未知用户 404.
GET /scans/{id}?unit-system=metric|imperial该单元系统的状况和主体的重量/身高.
POST /scans/{id}/upload-url{url, expirationTime}: 模拟器本身预先签名的PUT(模拟器钟上15分钟); /__admin/ns/<name> 保存在 URL 中). 409,一旦捕获上传.
PUT /uploads/{id}?expires&signature捕捉上传. 将扫描移动到 PROCESSING (单位:千美元)captureData 已经成功, body 启动); 空出的身体失败 。 过期或被篡改的URL为S3型403 XML.
GET /scans/{id}/scan-assets{captureData, body, fittedBody, measurement} 每个 started 编号 : succeeded 编号 : failed 编号 : null,与 …UpdatedAt。 。 。 .
GET /scans/{id}/bodyfat只准备: {bodyfatMethod, bodyfatPercentage, leanMass, fatMass, skeletalMuscleMass}。 。 。 .
GET /scans/{id}/measurements?unit-system=只准备: {waistFit, hipsFit, chestFit, waistToHipRatio, bodyRoundnessIndex, bmiPredicted} (cm或英寸).
GET /scans/{id}/health-report只准备: {metabolicAgeReport: {metabolicAgeYears, chronologicalAgeYears, ageDeltaYears, percentile}, bodyShapeReport}。 。 。 .
GET /scans/{id}/asset-urls只准备: 已签名的 URL previewImage, (中文(简体) ), model, (中文(简体) ), canonicalBody, (中文(简体) ), texture, (中文(简体) ), material, (中文(简体) ), stripes,服务于 GET /assets/{id}/{file}。 。 。 .

ReADY 之前的结果为 404(我们的适配器: not_found) (中文(简体) ). 错误是 {message, errors?}。 。 。 .

管理员(超过标准合同)

路线效果
POST /__admin/scans/:id/advance开始一个处理阶段({"to": "READY"} 给所有人。 扫描必须上传 .
POST /__admin/scans/:id/fail启动阶段失败; 扫描变为 FAILED。 。 。 .
GET /__admin/scans名字空间的扫描.
GET/PUT /__admin/settings{apiKeys?, uploadUrlTtlMs?, autoAdvance?: {afterMs, failAt?} | null}; 自动推进行走上传, 扫描每个阶段一个 afterMs 模拟时间.
POST /__admin/tick现在应用适当的自动推进步骤(服务仿真器每100毫秒勾出).

错误预设( E)POST /__admin/faults {"preset": "<name>", "count"?: n}: unauthorized, (中文(简体) ), server_error, (中文(简体) ), scan_not_found, (中文(简体) ), schema_drift (未知扫描状态), stage_states_slow (6s,超过5分超时), metabolic_age_missing, (中文(简体) ), metabolic_age_implausible, (中文(简体) ), upload_forbidden, (中文(简体) ), connection_drop。 。 。 .

命名空间

x-mockingbird-namespace页:1 /__admin/ns/<name> 前缀在 PRISM_API_URL,或用 API 键: PUT /__admin/credentials {"credentials": {"<PRISM_API_KEY>": "<namespace>"}}签署 上传和资产 URL 在路径中包含命名空间, 因为抓取页的 PUT 没有 其他载体.

故意不模拟

  • Webhooks:我们的后端民调Prism,它没有接收器.
  • 实体重建:结果为标的输入的公式和3D资产 是占位符字节.
  • 扫描删除、用户列表和适配器不调用的每一个端点 .

API 密码

导出仁爱说明
PrismAPI类进程模拟器 : fetch(request), (中文(简体) ), reset(), (中文(简体) ), advance(scanId, fail?), (中文(简体) ), tick(), (中文(简体) ), scans()选项: sqlite, (中文(简体) ), now, (中文(简体) ), namespace, (中文(简体) ), publicNamespace, (中文(简体) ), settings。 。 。 .
createRuntime函数全面服务合同的仿真器(保健、管理员、命名空间、证书、预设)。 选项 : settings, (中文(简体) ), tickMs, (中文(简体) ), clock, (中文(简体) ), seed, (中文(简体) ), adminKey, (中文(简体) ), onLog, (中文(简体) ), sqlite。 。 。 .
PRISM_PRESETS对象每个命名的断层预设.
PRISM_NAMESPACE字符串服务名称, "prism"。 。 。 .
STAGES数组处理阶段,顺序.
scanResults函数确定性结果 准备扫描答案.
prismError函数构建棱镜错误响应 {message, errors?}。 。 。 .
document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds数值OpenAPI合同及其操作代号.
createServer, (中文(简体) ), serveTarget, (中文(简体) ), DEFAULT_PORT (单位:千美元)./server(中文(简体) )节点服务过来 node:http (自动提醒每100米) serve CLI目标(--api-key, (中文(简体) ), --auto-advance; 开口8825.

部分 嘲笑鸟。 。 。 .

版本与发布记录

@crvouga/mockingbird-service-prism 共发布 42 个版本,首次发布于 2026/09/23;过去 12 个月发布了 42 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.11.0latest2026/11/11今天
3.10.92026/11/038 天前
3.10.82026/11/038 天前
3.10.72026/11/038 天前
3.10.62026/11/038 天前
3.10.52026/11/038 天前

关于 @crvouga/mockingbird-service-prism 的常见问题

@crvouga/mockingbird-service-prism 是什么?

Prism Labs body-scan API的状态仿真器:主题,扫描,预先签名的抓取上传,处理阶段到READY,以及确定身体结构,测量,健康报告和资产结果.

如何安装 @crvouga/mockingbird-service-prism?

在项目目录运行 npm install @crvouga/mockingbird-service-prism,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-prism,可以用 npx mockingbird-prism 直接运行。

@crvouga/mockingbird-service-prism 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@crvouga/mockingbird-service-prism 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@crvouga/mockingbird-service-prism 可以商用吗?

@crvouga/mockingbird-service-prism 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@crvouga/mockingbird-service-prism 的下载量有多少?

根据 npm 官方下载统计,@crvouga/mockingbird-service-prism 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,862 次,日均约 95 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@crvouga/mockingbird-service-prism 还在维护吗?

最新版本 3.11.0 发布于 2026/11/11(今天);至今共发布 42 个版本,其中过去 12 个月发布了 42 个;首次发布于 2026/09/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。