# @crvouga/mockingbird-service-whoop 中文文档

规范地址：https://npmcn.com/package/%40crvouga/mockingbird-service-whoop/

版本：1\.12\.0
npm 元数据更新时间：2026-11-13T00:24:19.832Z
中文译文更新时间：2026-11-13T07:09:13.195Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40crvouga/mockingbird-service-whoop
原文对照：https://npmcn.com/package/%40crvouga/mockingbird-service-whoop/?lang=original
项目主页：https://github.com/crvouga/mockingbird/tree/main/packages/service/whoop#readme
源码仓库：https://github.com/crvouga/mockingbird

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：4.3 MB，22 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-10-05T09:33:05.542Z
- 最新版本发布：2026-11-13T00:24:19.475Z
- 近 30 天下载量：2139（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：19（近 12 个月 19 个）

## 中文简介

状态的 WHOOP v2 仿真器:收藏,相關睡眠恢复窗口,和 OAuth 刷新.

## 安装

```sh
npm install @crvouga/mockingbird-service-whoop
```

也可以使用：`pnpm add @crvouga/mockingbird-service-whoop`、`yarn add @crvouga/mockingbird-service-whoop`、`bun add @crvouga/mockingbird-service-whoop`

## README

# @crvouga/ mockingbird-service-whoop (英语)

> 本地模拟器。 真正的API合同. 部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

WIP WHOOP v2模拟器,用于合成健身,睡眠,恢复和循环同步.

## 安装

`bun add @crvouga/mockingbird-service-whoop`

## 使用量

```ts
import { createServer } from "@crvouga/mockingbird-service-whoop/server"

// Test setup: a local WHOOP. The application's API base is its URL plus /developer.
const server = await createServer()
const baseUrl = `${server.url}/developer`

// Application code: the request it sends to WHOOP.
const response = await fetch(`${baseUrl}/v2/activity/workout`, {
  headers: { authorization: "Bearer mock_whoop_token" },
})
const { records } = await response.json()

await server.close()
```

运行 `mockingbird-whoop serve --port 12129`输入本地来源加 `/developer` 作为消费者API基础,而仅来源于OAuth基础. 消费者端点接线与这个模拟器是分开的.

## 路线和状态

邮政 `/oauth/oauth2/token` 接受有客户资格的窗体编码授权码或刷新式赠款。 种子 `clients`, (中文(简体) ), `codes`,以及 `grants` 通过选项或管理状态。 默认仿真客户端 : `mock_client` 编号 : `mock_client_secret`; 默认持单人 `mock_whoop_token` 刷新时 `mock_whoop_refresh`。默认补助金有全部四个读取范围以及 `offline`. 代码约束客户端,可选重定向和可选 S256 PKCE 挑战. 代码是单用,包括同时交换. 3600秒后,新令牌过期(`tokenTtlSeconds` 是可配置的。 刷新旧访问和刷新信使无效,保持同样的用户/范围,并且只为离线赠款发放刷新信使.

获取 `/oauth/oauth2/auth` 是浏览器访问的授权端点,以连接一个成员。 没有同意页:请求被验证,然后 `consents` 用户的收藏答案和浏览器重定向(302)到 `redirect_uri` 与 `code` 财务报告和审定财务报表 `state`,或 `error`, (中文(简体) ), `error_description` 财务报告和审定财务报表 `state`中存储该代码 `codes` 绑定客户,准确的 `redirect_uri`,授予的范围(所以表示 `scope` 是所请求的,以及 `refresh_token` 仅以 `offline`)和可选S256 `code_challenge`· ; `POST /oauth/oauth2/token` 赎一回. 不明客户(401) `invalid_client`),一个缺失 `client_id` 或者说 `redirect_uri`,或一个 `redirect_uri` 客户没有注册 (400) `invalid_request`,杰森(英语: `{error,error_description}`)在原地回答,而从未重定向。 客户端选择 `redirectUris` (精确匹配; 省略接受任意绝对 http(s) URI , 所以默认 `mock_client` 工作性质)和 `scopes` (允许记录的WHOOP范围)。 重定向错误 : `invalid_request` (无) `response_type`,或一个 `code_challenge_method` 其他 `S256`, (中文(简体) ), `unsupported_response_type`, (中文(简体) ), `invalid_scope`, (中文(简体) ), `invalid_state` (缺少或低于8个字符). 更长的时间 `state` 呼应不变.

同意控制:行 `{id, decision: "approve"|"deny"|"error", userId?, codeTtlSeconds?, error?, errorDescription?}` 地点 `id` 是客户端 id 或 `*` (每个客户都没有自己的行). 种子与 `consents` 选项或 `POST /__admin/state/consents {"id":"*","value":{"id":"*","decision":"deny"}}`无行表示批准 `synthetic-user` 600秒代码. `deny` 重定向 `access_denied` 财务报告和审定财务报表 `error` 重定向 `server_error` (与 `error`编号 :`errorDescription`),两者均保持不变 `state` 没有密码 发布代码列于 `GET /__admin/state/codes`。 。 。 .

获取 `/developer/v2/user/profile/basic` 返回符号用户的 `{user_id,email,first_name,last_name}`:种子a `records` 与 `collection: "profile"`, (中文(简体) ), `userId` 符号的用户和 `data` 配置文件(只有假值)。 范围 `read:profile` 所需经费(403美元) `{detail:"Access forbidden."}` 就像收藏品一样,401对未知或过期的代号,404 `{detail:"Not Found"}` 当用户没有配置文件行时。 默认赠款不携带 `read:profile`。 。 。 .

获取 `/developer/v2/activity/workout`, (中文(简体) ), `/developer/v2/activity/sleep`, (中文(简体) ), `/developer/v2/recovery`, (中文(简体) ), `/developer/v2/cycle` 返回时 `{records,next_token}`。 。 。 . `limit` 默认为10, 最多为25; `nextToken` 继续页。 成果排序最新开始; `start` 包括同等时间戳, `end` 排除现在要模拟的相等开始和默认。 收集时间窗口的实施采用起始时间戳,包括跨越末端瞬间的活动。 范围名称为 `read:workout`, (中文(简体) ), `read:sleep`, (中文(简体) ), `read:recovery`, (中文(简体) ), `read:cycles`。 。 。 .

种子 `records: [{key,userId,collection,data}]`· ; `data` 是一个合成的提供者形记录. **恢复已经 `cycle_id` 财务报告和审定财务报表 `sleep_id`没有 `id`, (中文(简体) ), `start`,或 `end`**:种子一个匹配的睡眠记录来提供其时间窗口. 这用"官方计划"来校正本题的通用回收字段列表. 缺失的相关睡眠固定装置不包括在内。 循环代号仍为数字;运动/睡眠代号仍为UUID. 度量衡和分数状态通过,保留无效或缺席的度量衡. 不同的存储密钥可以模拟重复的供应商记录. 光标内部是本地的对接;消费者在接时必须保留相同的查询.

## 测试控制

标准可移动 `/__admin` 健康/状态/重置/小时/日报/时线/故障路线。 国家收藏只包含合成装置。 标题命名空间, `/__admin/ns/<name>` 路径和无记名绘图将状态隔离。 期刊记录元数据,而不是OAuth或保健机构. 预设 `unauthorized`, (中文(简体) ), `rate_limited`, (中文(简体) ), `server_error`, (中文(简体) ), `connection_drop` 支持决定性的失败; 通用断层会增加耐久性。 预设出错机构是被脚本化的本地定着物,而不是声称精确的配额/错误措辞. 不需要网点 .

## 甲骨文和测试

从官员那里得到的 [打开API](https://api.prod.whoop.com/developer/doc/openapi.json), (中文(简体) ), [OA 参考](https://developer.whoop.com/docs/developing/oauth/),以及 [刷新示例](https://developer.whoop.com/docs/tutorials/refresh-token-javascript/)合同保留了正式的收集响应计划。 未对授权的现场数据和OAuth的成功进行探测;未使用现场证书.

**最好的猜测,不是甲骨文验证:** 授权端点和配置路径没有被观察到. `/oauth/oauth2/auth` 财务报告和审定财务报表 `/oauth/oauth2/token` ory Hydra路径,所以重定向状态(302) `error`编号 :`error_description`编号 :`state` 定向形状, 8 字符 `state` 最小值,且错误代码遵循了Hydra及其fosite库外加WHOOP OAuth页面. 身份不明或未登记的客户的身份和JSON尸体 `redirect_uri` (Hydra在直播服务上使错误页) `invalid_scope` 允许列表, 处理缺失 `scope` 作为空赠款,S256 - 唯一的PKCE, `access_denied`编号 :`server_error` 以及失踪的403人 `read:profile` 范围是模拟者的选择,而不是被观察到的供应商反应。 轮廓形状是官方的 `UserBasicProfile` 计划.

`bun test` 运行接受、全操作自平和分辨检测. `bun scripts/python-smoke.ts` 用途 `uv` 对本地HTTP进行实际请求2.32.5和httpx 0.28.1。 这不是私人消费者本身. `bun run parity` 需求 `WHOOP_ACCESS_TOKEN` 在不打印健康数据的情况下进行安全收集封装探测.

## 故意不模拟

没有真正的用户、设备配对、传感器、同意页( `consents` 行代表用户的回答),硬件SDK,webhook送出,身体测量,伙伴API或分数计算. 没有光标格式对等、实际配额执行、同时刷新宽限期或私人客户合并索赔。 部分合成记录可被故意播种;对照所提供的官方计划验证生产装置。 恢复依赖于匹配的合成睡眠固定.

## API 密码

根运行时间导出 : `WhoopAPI`, (中文(简体) ), `WHOOP_NAMESPACE`, (中文(简体) ), `COLLECTION_SCOPES`, (中文(简体) ), `KNOWN_SCOPES`, (中文(简体) ), `MIN_STATE_LENGTH`, (中文(简体) ), `createRuntime`, (中文(简体) ), `WHOOP_PRESETS`, (中文(简体) ), `document`, (中文(简体) ), `operationIds`, (中文(简体) ), `supportedOperationIds`。类型 : `WhoopAPIOptions`, (中文(简体) ), `Grant`, (中文(简体) ), `OAuthCode`, (中文(简体) ), `Client`, (中文(简体) ), `Consent`, (中文(简体) ), `DataRecord`, (中文(简体) ), `CollectionName`, (中文(简体) ), `WhoopRuntimeOptions`, (中文(简体) ), `WhoopRuntime`, (中文(简体) ), `OperationId`, (中文(简体) ), `SupportedOperationId`。 。 。 .

`/server`数字 : `createServer`, (中文(简体) ), `serveTarget`, (中文(简体) ), `DEFAULT_PORT`; 类型 `WhoopServerOptions`, (中文(简体) ), `WhoopServer`。 。 。 .

## 常见问题

### @crvouga/mockingbird-service-whoop 是什么？

状态的 WHOOP v2 仿真器:收藏,相關睡眠恢复窗口,和 OAuth 刷新\.

### 如何安装 @crvouga/mockingbird-service-whoop？

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

### @crvouga/mockingbird-service-whoop 支持 TypeScript 吗？

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

### @crvouga/mockingbird-service-whoop 支持 ESM 还是 CommonJS？

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

### @crvouga/mockingbird-service-whoop 可以商用吗？

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

### @crvouga/mockingbird-service-whoop 的下载量有多少？

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

### @crvouga/mockingbird-service-whoop 还在维护吗？

最新版本 1\.12\.0 发布于 2026/11/13（今天）；至今共发布 19 个版本，其中过去 12 个月发布了 19 个；首次发布于 2026/10/05。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

