@crvouga/mockingbird-service-whoop

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

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

中文使用文档
文档目录7 节
  1. 安装
  2. 使用量
  3. 路线和状态
  4. 测试控制
  5. 甲骨文和测试
  6. 故意不模拟
  7. API 密码

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

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

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

安装

bun add @crvouga/mockingbird-service-whoop

使用量

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, (中文(简体) ), OA 参考,以及 刷新示例合同保留了正式的收集响应计划。 未对授权的现场数据和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 共发布 19 个版本,首次发布于 2026/10/05;过去 12 个月发布了 19 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.12.0latest2026/11/13今天
1.11.12026/11/121 天前
1.11.02026/11/121 天前
1.10.02026/11/112 天前
1.9.42026/11/0310 天前
1.9.32026/11/0310 天前

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

@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 和提交记录判断。