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

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

版本：1\.11\.0
npm 元数据更新时间：2026-11-11T02:31:20.213Z
中文译文更新时间：2026-11-11T06:41:16.942Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：4.3 MB，18 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-10-05T09:27:49.790Z
- 最新版本发布：2026-11-11T02:31:19.824Z
- 近 30 天下载量：2779（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：21（近 12 个月 21 个）

## 中文简介

Stateful Oura v2模拟器:可穿戴的集合,OAuth刷新和取名空间同位素合成数据.

## 安装

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

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

## README

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

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

WIP Oura v2 Collection和OAuth模拟器用于合成可穿戴同步测试.

## 安装

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

## 使用量

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

// Test setup: a local Oura. Its URL replaces https://api.ouraring.com in the application.
const server = await createServer({ pageSize: 2 })
const baseUrl = server.url

// Application code: the request it sends to Oura.
const response = await fetch(`${baseUrl}/v2/usercollection/workout`, {
  headers: { authorization: "Bearer mock_oura_token" },
})
const { data, next_token } = await response.json()

await server.close()
```

运行 `mockingbird-oura serve --port 12128`;将该来源注入消费者的API和OAuth配置(该期的提供方策略否则会硬码出厂). 接受测试使用“获取”端口. `bun scripts/python-smoke.ts` (所需经费) `uv`此外,还比照当地HTTP对实际请求2.32.5和httpx 0.28.1图书馆进行操作,包括刷新信号和处理错误;它不行使私人消费者来源.

## 路线和状态

邮政 `/oauth/token` 接受URL编码授权代码或刷新赠款,Basic或body客户端证书. 种子 `clients`, (中文(简体) ), `codes`, (中文(简体) ), `grants` 有构造器选项或标准状态管理路由。 默认本地客户端是 `mock_client` 编号 : `mock_client_secret`; 无记名 `mock_oura_token` 属于 `synthetic-user`代码约束客户端,重定向,过期和可选 S256 PKCE 挑战. 刷新令牌旋转一次,保留用户/镜像;时钟控制访问到期.

获取 `/oauth/authorize` 是连接一个成员的浏览器访问的授权端点( live: `cloud.ouraring.com/oauth/authorize`) (中文(简体) ). 没有同意页:请求被验证,然后 `consents` 用户的收藏答案和浏览器重定向(302)到 `redirect_uri` 与 `code` 财务报告和审定财务报表 `state`,或 `error`, (中文(简体) ), `error_description` 财务报告和审定财务报表 `state`中存储该代码 `codes` 约束客户,授予的范围 `redirect_uri` 当调用者发送一个(符号交换必须重复)和可选的S256时 `code_challenge` (交换需要匹配) `code_verifier`(三); `POST /oauth/token` 赎一回. `scope` 省略了授予每一范围; `state` 是可选的,任何长度不变. `redirect_uri` 当客户端有一个注册时,可以省略。 不明客户(401) `invalid_client`),一个缺失 `client_id`,失踪或未登记 `redirect_uri` (400个) `invalid_request`,杰森(英语: `{status,error,error_description}`)在原地回答,而从未重定向。 客户端选择 `redirectUris` (精确匹配; 省略接受任意绝对 http(s) URI , 所以默认 `mock_client` 工作性质)和 `scopes` (允许文档中的 Oura 范围 : `email personal daily heartrate workout tag session spo2`) (中文(简体) ). 重定向错误 : `invalid_request` (无) `response_type`,或一个 `code_challenge_method` 其他 `S256`, (中文(简体) ), `unsupported_response_type`, (中文(简体) ), `invalid_scope`。 。 。 .

同意控制:行 `{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`。 。 。 .

获取 `/v2/usercollection/personal_info` 返回符号用户的个人信息( e)`id`和种子 `age`, (中文(简体) ), `weight`, (中文(简体) ), `height`, (中文(简体) ), `biological_sex`, (中文(简体) ), `email`: 种子a `records` 与 `collection: "personal_info"`, (中文(简体) ), `userId` 符号的用户和 `data` 响应对象(仅假值)。 范围 `personal` 所需经费(403美元) `{detail:"Access forbidden."}` 和收藏品一样,401件与收藏品的躯体 一种未知或过期的代币,404件 `{detail:"Not Found"}` 当用户没有行时. `data` 以种子返回: `email` 范围不在每个字段执行。 默认赠款不携带 `personal`。 。 。 .

获取 `/v2/usercollection/{workout,sleep,heartrate,daily_activity,daily_spo2,daily_readiness,daily_sleep}` 返回时 `{data,next_token}`使用心率 `start_datetime/end_datetime`; 其他使用 `start_date/end_date` 反对 `day`。 固定窗口包括两个端点,省略的边框是无约束的。 这些边界/默认选择是确定本地固定语义,而不是经核实的活的边缘大小写等同. 不要为心率样本发明身份证明 固定物保留了每个供应的度量,包括空克. 范围检查使用情况 `workout`, (中文(简体) ), `daily`, (中文(简体) ), `heartrate`, (中文(简体) ), `spo2`。 。 。 .

种子 `records` 行数 `{key,userId,collection,data}`。密钥可以识别存储行,而不是供应商的标识;不同的密钥可以故意携带重复的提供者数据. `pageSize` 控制决定性的插入顺序页。 消费者在加速度时必须保留相同的收藏/窗口;模拟器的行键光标不绑定或验证查询. 没有承诺的供应商光标格式/顺序 。 设定 `tokenTtlSeconds` 新发行的代币.

## 测试控制

标准 `/__admin/health`, (中文(简体) ), `/state`, (中文(简体) ), `/reset`, (中文(简体) ), `/requests`, (中文(简体) ), `/clock`,有时间线检查站和断层 `/__admin` (通过 `adminPrefix`) (中文(简体) ). 页眉 `x-mockingbird-namespace`, (中文(简体) ), `/__admin/ns/<name>` 路径和证书映射分离数据。 期刊中包含元数据,从不包含OAuth体或可穿戴的有效载荷. 预设 : `unauthorized`, (中文(简体) ), `rate_limited`, (中文(简体) ), `server_error`, (中文(简体) ), `connection_drop`;通例性断层会增加耐久性. 配额和服务器-错误机构是明确的脚本固定装置,而不是活配额模拟. 这个地表没有网点.

## 甲骨文和测试

合同: [oura OpenAPI 1.41 (英语)](https://cloud.ouraring.com/v2/static/json/openapi-1.41.json) 财务报告和审定财务报表 [OAuth 文档](https://cloud.ouraring.com/docs/authentication)。对合成无效的证书进行现场检查:符号端点返回 HTTP 400 `invalid_client`, 收集端点 HTTP 401 并附有所记录的细节。 未经现场检查授权的收集数据和刷新数据.

**最好的猜测,不是甲骨文验证:** 授权终点和 `personal_info` 未观察到现场,供应商OpenAPI JSON在添加时无法下载(HTTP 404)。 参数、全镜默认值和单注册-URI默认值跟随 [Oura 认证页面](https://cloud.ouraring.com/docs/authentication)重定向状态(302) `error`编号 :`error_description`编号 :`state` 更改未知客户端或未注册客户的形状、状态和身体 `redirect_uri`,则 `invalid_scope` 允许列表, S256 仅限 PKCE, `access_denied`编号 :`server_error` 同意管制和失踪的403 `personal` 范围是模拟者的选择,而不是被观察到的供应商反应。 这个 `personal_info` 字段( r)`id`, (中文(简体) ), `age`, (中文(简体) ), `weight`, (中文(简体) ), `height`, (中文(简体) ), `biological_sex`, (中文(简体) ), `email`)来源于Oura v2 API文档和第三方客户端文档;直播响应是否携带 `id` 未经证实.

`bun test` 运行接受和每一次操作的自我平衡,包括差分检测. `bun run parity` 需求 `OURA_ACCESS_TOKEN`,进行安全、只读的信封检查,从不打印健康数据或证书.

## 故意不模拟

没有真实的健康数据、账户注册、同意页( `consents` 行代表用户的回答),设备对接,传感器模拟,硬件SDK,webhooks,订阅生命周期,场外投影,统计计算或完整的供应商度量衡验证. 记录是合成的通过固定装置;部分度量衡可以被有意地播种. 日期边界/默认行为、光标内部和配额机构细节是当地立方,而不是声称供应商边缘情况完全相等。 没有Python运行时间依赖或声称私人消费者自己行使了权利.

## API 密码

根运行时间导出 : `OuraAPI`, (中文(简体) ), `OURA_NAMESPACE`, (中文(简体) ), `COLLECTION_SCOPES`, (中文(简体) ), `KNOWN_SCOPES`, (中文(简体) ), `createRuntime`, (中文(简体) ), `OURA_PRESETS`, (中文(简体) ), `document`, (中文(简体) ), `operationIds`, (中文(简体) ), `supportedOperationIds`类型包括: `OuraAPIOptions`, (中文(简体) ), `Grant`, (中文(简体) ), `OAuthCode`, (中文(简体) ), `Client`, (中文(简体) ), `Consent`, (中文(简体) ), `DataRecord`, (中文(简体) ), `CollectionName`, (中文(简体) ), `OuraRuntimeOptions`, (中文(简体) ), `OuraRuntime`, (中文(简体) ), `OperationId`, (中文(简体) ), `SupportedOperationId`。 。 。 .

`/server` 出口 `createServer`, (中文(简体) ), `serveTarget`, (中文(简体) ), `DEFAULT_PORT` 类型 `OuraServerOptions`, (中文(简体) ), `OuraServer`。 。 。 .

## 常见问题

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

Stateful Oura v2模拟器:可穿戴的集合,OAuth刷新和取名空间同位素合成数据\.

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

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

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

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

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

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

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

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

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

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

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

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

