# @flow-industries/id 中文文档

规范地址：https://npmcn.com/package/%40flow-industries/id/

版本：0\.36\.0
npm 元数据更新时间：2026-10-28T19:03:02.673Z
中文译文更新时间：2026-11-15T00:20:37.167Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40flow-industries/id
原文对照：https://npmcn.com/package/%40flow-industries/id/?lang=original
项目主页：https://github.com/flow-industries/auth#readme
源码仓库：https://github.com/flow-industries/auth

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

- 包体积（解压后）：859 kB，234 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：5 个
- peer 依赖：ox \>=0\.14\.0，viem \>=2\.47\.10，react \>=18，react-dom \>=18，@wagmi/core \>=3\.0\.0，@tanstack/react-start \>=1\.168\.0
- 首次发布：2026-04-26T14:14:13.760Z
- 最新版本发布：2026-10-28T19:03:02.406Z
- 近 30 天下载量：3742（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：66（近 12 个月 66 个）

## 中文简介

Flow应用程序的Passkey-first身份. 一个密码绑在 `id.flow.industries`可在Flow应用软件上使用,并带有面向观众的JWT和可选的Tempo签名.

## 安装

```sh
npm install @flow-industries/id
```

也可以使用：`pnpm add @flow-industries/id`、`yarn add @flow-industries/id`、`bun add @flow-industries/id`

## README

# 流程标识

Flow应用程序的Passkey-first身份. 一个密码绑在 `id.flow.industries`可在Flow应用软件上使用,并带有面向观众的JWT和可选的Tempo签名.

## 开发

```bash
cp .env.example .env
bun install
bun run dev
```

`bun run dev` 是唯一支持的本地应用程序启动器。 它开始 API,对话框,游乐场,和登陆页面 在第一个免费块 连续四个港口。 配置 `DATABASE_URL` 财务报告和审定财务报表 `BETTER_AUTH_SECRET` 内 `.env` 先说.

发射装置在启动 Auth 之前验证本地存储的 JWT 签名密钥. 若为 `BETTER_AUTH_SECRET` ,只有无法再被解密的密钥 旋转这样本地会话创建在环境变化后继续工作. 移民失败时,政府也拒绝开始反对移民 部分迁移计划.

### 安全头

`@flow-industries/id/start` 出口 `securityHeaders()` 财务报告和审定财务报表 `withSecurityHeaders(response, options)`两者生成CSP,HSTS,鼻音, 参考政策和授权政策。 默认 CSP 允许同源 资源并拒绝设定;每个应用程序提供其资源指令 和嵌入需要.

```ts
import { withSecurityHeaders } from "@flow-industries/id/start";

const secured = withSecurityHeaders(response, {
  csp: {
    "connect-src": ["'self'", "https://id.flow.industries"],
    "frame-src": ["https://id.flow.industries"],
  },
});
```

指令取代一项指令; `null` 省却. `headers` 覆盖 生成默认,以及 `reportOnly: true` 释放生成的 CSP 下 `Content-Security-Policy-Report-Only`复选包 保留现有路由政策、 cookie、 状态和正文时的页眉 流线。 制作全程CSP `csp` 包接前: 已有的 CSP 现予保留。 明确的许可政策可以保留功能 例如麦克风传出的声音.

### AT 协议身份

消费者通过 : `await flow.atproto.resolve({ freshness: "cached" })`启用 `"refresh"` 之后 终止点或授权失败,并呼叫 `flow.atproto.invalidate()` 之后 身份或移徙事件。 流程账户开关、登录和第一当事方 链接帮助自动无效 。 校正强制下一项请求 来刷新。 发现使用已配置的 Auth 主机、 cookie 或 Flow 記者 语句, 以及犬科用户ID; 它从不提供账户 .

结果包括 DDE, 经验证的显示手柄( 或无效), 当前 PDS 来源、托管所有权、生命周期和授权状况。 文档 是对终点的权威。 没有 OAuth 令牌或私人密钥 已经返回. `connected` 表示未到期的存储赠款,其受众和 发行者匹配公共资源元数据;不能证明远程赠款 至今尚未撤销。 写作必须获得新的 AT OAuth 授权, 并且不得将旧的证书转发给迁移的宿主或重放突变 结果不详. `AtprotoRequestError.code` 区别登录, 缺少身份、待提供或未提供、账户更改、无支持 方法、无效身份和无法解析 .

`ATPROTO_MANAGED_PDS_ORIGINS` 是可选的逗号分隔的公众列表 HTTPS PDS起源由Flow拥有,仅用于对当前主机进行分类. `ATPROTO_RESOLUTION_TTL_MS` 启用由 DID 键入的服务器元数据缓存 映射版本, 限定为5分钟; 未设置或无效值禁用 缓冲 对每项请求分别检查授权状况。 缓存 授权失败迫使一个新的DID解析。 公共发现工程 没有 OAuth 证书配置和报告 `reconnect_required`。 。 。 .

Bluesky和其他 AT 协议账户可以签名到流程ID或连接到一个 现有账户。 流程用户ID保持稳定;提供方指定 连接。 新账户注册不需要电子邮件、密码或钱包 .

设定 `ATPROTO_PUBLIC_URL`, (中文(简体) ), `ATPROTO_PRIVATE_KEY` (一架ES256型私人JWK,马厩) `kid`),以及 `ATPROTO_STORAGE_KEY` (一个基数64编码为32字节的加密密钥)到 实现一体化。 保留所有三个未设置来禁用它 。 生产用途 HTTPS 客户端元数据 `/api/auth/atproto/client-metadata.json` 和公用钥匙 时间 `/api/auth/atproto/jwks.json`中加密 Postgres并留在服务器上. 用数据库备份存储密钥; 更改它需要重新加密存储的证书 .

本地 OAuth 设置 `ATPROTO_PUBLIC_URL=http://127.0.0.1:8183` 和发射 `./dev.sh 8180`。主机登录页面使用 `http://localhost:8183` 编辑 启动器设置依赖 WebAuthn 方 `localhost`。使用已打印的URL; 现有的钥匙仍与其原始依赖方有联系.

没有配置电子邮件提供者, 本地启动器也会打印登录 浏览器控制台中的代码。 这需要开发模式,发射器的 `FLOW_DEV_OTP_CONSOLE=1` 选择进入,并有一个回回回发布器;然后API只绑定到 `127.0.0.1`生产反应中从未包括这些代码.

AT协议需要IP回回调URI. 开发登陆服务器 处理前将请求返回到固定本地主机源 ,保留回调查询,所以 OAuth 恢复使用相同的浏览器 cookie 和会话存储为登录。 SDK仍然使用 已注册的 IP 回调 URI 。 如果该端口块被占用, 请更新 `ATPROTO_PUBLIC_URL` 转到选定的起落端口并重新启动。 生产客户 使用 HTTPS 元数据并使用配置的签名密钥认证 .

提供方登录恢复约束 `/authorize` 交易。 流程安装 a ,然后将已有的一用 PKCE 代码返回应用程序. 账户链接返回到 `/account`; 没有提供者或流程符号在其中旅行 重定向 URL 或窗口消息 .

账户连接视图在当地读取已保存的身份和证书 。 这个 不刷新提供者的令牌或解析页面负荷上的控件; 重新连接 在需要恢复访问时执行新的供应商授权.

### 已连接账户

更好的 Auth 拥有共享 `account` 型号。 外部身份由 `providerId` 财务报告和审定财务报表 `accountId`,并链接到峡谷流 `userId`。用于AT 协议这些值是 `atproto` 和已经核实的。 正在显示处理 元数据,从来不是身份密钥。 一个流程账户可以连接不同的提供者 不添加特定提供者的身份表. 提供者 ID 识别一个可信任的提供者配置: 单独的 OIDC 发行器 必须使用单独的ID,即使两者运行相同的身份-服务器软件.

提供商的证明和临时授权状态 以加密, 提供方范围 `oauth_session` 财务报告和审定财务报表 `oauth_state` 商店。 AT SDK使用一个 这些商店的适配器;其DPOP和发现行为留在AT内 一体化。 提供信使不会成为流程会话信使 .

更好的 Auth 支持内置的社会提供者及其通用 OAuth 插件 . Flow目前使用1.4.17版本,默认的 OAuth 入学要求 电子邮件并创建自己的会话。 新供应商必须提供经核实的稳定性 然后使用Flow的受众范围 届会的印发。 明确登记可用的登录供应商;任意 账户行不计为回收方法。 不需要新的身份表 .

禁用基于电子邮件的账户链接 。 通过流程断开 账户控件如此认证性清理和最后签入方法检查 一次交易; 股票 Better Auth 解链接端点被屏蔽 。 其账户 清单仍然有效,不包括全权证书.

移徙 `0040` 保存已有的 AT 链接并加密会话,然后去除 之前的只限AT表格。 它使飞行授权状态失效,所以 未完成的尝试必须重新开始。 之前部署完整修改过的 Auth 堆栈 允许 AT 生产配置。 经过这次迁移,中间 仅使用 AT 从 PR #170QQ172 创建不是回滚目标; 使用 AT 前主 构建或兼容的前沿固定。 现有的 AT 流程用户/会话前写作 继续支持.

**无 :** [`@flow-industries/id`](https://www.npmjs.com/package/@flow-industries/id)

## 安装

```bash
bun add @flow-industries/id viem
```

对于 Wagmi 应用程序 :

```bash
bun add @flow-industries/id wagmi viem @tanstack/react-query
```

## 文档

-   [融合指南](https://npmcn.com/package/%40flow-industries/id/docs/integration-guide.md) ——服务器设置,cononic sign-in,React,和账户导航.
-   [来宾会议](https://npmcn.com/package/%40flow-industries/id/docs/guest-sessions.md) ——招生期间静默出客创作并保持身份.
-   [行动会议](https://npmcn.com/package/%40flow-industries/id/docs/action-sessions.md) 活动时间和内置动作部件.

单独文档库中的 Auth 页面存档。 使用 在此为当前 SDK 集成提供指南 .

## 登录和账户页面

SDK通过你的应用软件的第一派对开始登录 `/flow/session` 处理器 导航到流出身份 `/authorize` 页 次 保存完成返回 app路径; 在导航后读取新会话, 而不是在导航后继续 `await flow.login()`。 。 。 .

对于一个需要密码的注册账户,打电话 `flow.connectPasskey({ returnTo: "/", requirePrf: true })`它使用同样的 并创建其 第一个密码是Flow ID 现有已注册的密码重新使用。 设定 `requirePrf` 用于加密存储, 因此拒绝提供不支持的新证书 在附件之前。 返回后,SDK刷新连接的证书; 应用程序在打开一个程序前,仍必须使用新的用户手势评价实际的PRF 加密金库. 这种方法从未在启动它的文件中得到解决.

`ProfileButton` 打开共享账户下放, 并存账户, 账户 切换、加账、管理和签出行动. `flow.openAccount()` 打开 `/account` 在普通新标签中. 两种菜单都允许签约用户选择Online,Idle,Busy,或隐形. 这个 选中的选项是保存的首选项; 外观指示符显示有效 可用性,包括自动闲置和离线。 忙不改变 通知,而隐形显示为离线到其他用户。 保存失败 最后确认的首选,并显示内置重试。 配置按钮使用 其现有的流程存在控制器; 账户页面使用相同的控制器 和它的发行商饼干会话. 实践可以包括目前占用的游戏室及其选入主体. 会议室的能见度是独立预测的;合并活动将在 更早的申报/房间截止日期和下一次刷新可以保留做法,而不用陈腐的房间. 源应用程序保留了加载并刷新其重心的会话 。 签名和 自有账户管理不再使用嵌入式对话框. 其余对话框支持签名、 公开配置和部件 。 SDK 软件 `ConnectResponse` 仍然是源兼容性被贬损的别名类型;登录本身通过第一当事方调回返回。 见 [融合指南](https://npmcn.com/package/%40flow-industries/id/docs/integration-guide.md) 用于服务器接线和迁移.

## 公众概况

```ts
import { closeProfile, openProfile } from "@flow-industries/id";
import { isValidUsername } from "@flow-industries/id/usernames";

if (isValidUsername(username)) {
  openProfile(username, { onClose: () => resumeInput() });
}

closeProfile();
```

`@flow-industries/id/usernames` 还出口 `USERNAME_REGEX` 财务报告和审定财务报表 `MAX_USERNAME_LENGTH`。它没有浏览器或服务器依赖性.

`OpenProfileOptions.onClose?: () => void` 覆被停止后一次起火 接受输入,在其退出动画完成前。 它覆盖了关闭按钮, 背景,逃离, `closeProfile()`,以及签入/签出交割。 最近一个 已经成功 `openProfile` 调用所有回调, 即使切换配置文件 ; 省略的回调可以清除前一个。 无效的用户名和 安全部门改革返回 `false` 没有替换它。 关闭一个已经关闭的重叠是一个 没有。 调用可能打开另一个配置 .

反应呼叫器通过相同的选项 `useOpenProfile({ onClose: () => resumeInput() })` 从 `@flow-industries/id/react`; 返回打开器时, 回调被捕获 名为. 覆盖属于页面,并保存组件未挂载.

从拥有完整取景口的文档中打开. Canvas 主机必须释放 打开前的指针锁定,然后使用 `onClose` 以恢复输入状态.

## 许可证

麻省理工学院

### 迁移兼容性检查

`bun run db:check` 重新生成到临时目录并拒绝计划漂移或编辑 之前承诺的SQL。 CI比较公关基础或之前的主要承诺. `bun run test:migrations` 锻炼承诺的链条, 被支持的前计划, 目前预测,升级后的旧写,以及有意的缺失-移民失败. `MIGRATION_TEST_DATABASE_URL=postgres://... bun scripts/postgres-acceptance.ts` 额外 在 PostgreSQL 服务器上创建一个独特的可支配数据库,运行真实的迁移 输入点 拒绝更改的应用散列 并证明最终迁移失败 无论是计划改变还是分类账 测试只删除它自己生成的数据库 .

初始兼容基线为源 `1bda372b69e2f66a3dc0cbb244bcbe7cb858f493` (跳过) `0035`) (中文(简体) ). 测试冻结了具有代表性的更古老的SQL读取/写出;它们并非每个历史都启动 应用程序版本。 在停止支助时有意推进这一基线,并延长 改变合同时的固定装置。 迁移失败阻碍图像构建; president's PreSync job 也拒绝一个并非精确承诺的前缀的应用分类账.

应用程序回滚可以保持扩展的策略. 将最近核实的迁移图像通过 网络 `migrate.image` 同时恢复先前兼容的应用程序图像。 不运行 向下迁移或将更古老的迁移图像指向更新的分类账:这是被拒绝的. A 类 破坏性契约迁移需要经过老作家之后的明确支助边界变化 浏览器客户端已经耗尽.

## 版本消费者合同

`bun run contracts:generate` 制作已出版的 `@flow-industries/id/contracts/v1/reports.json` 财务报告和审定财务报表 `openapi.json` 文物来自 xP、动作、存在和位置处理器使用的相同计划. `bun run contracts:check` 拒绝过时输出和不兼容的更改 现有 v1 请求计划 `CONTRACT_BASE_REF` (默认) `origin/main`) (中文(简体) ). 保持已存在的 v1 字段相容; 断开边界需要一个新版本和 为已部署的消费者制定重叠计划.

信任的服务消费者可以打电话 `createReportsApi(host, serviceToken)` 从 `@flow-industries/id`。返回的函数接受操作名称及其 输入请求,验证发出的请求和成功的答复,以及 掷出 `ReportRequestError` 对于未成功的答复。 使用 XP 报告 行动/XP操作的证书和在场/位置的房间证书; 绝不向浏览器发送任何服务证书.

`bun run test:sdk-package` 在 检查公共进口和申报,并证明 删除的合同导出失败 。 生产者测试执行输入客户端 真实的报务处理器,并验证已计票的来宾/全会话和JWT形状. CI为这些检查的容器和包件的出版提供大门.

目前的OpenAPI文物描述了服务报告边界. 其余部分 账户、房间管理、研究、设置、会话和密码 仍需要完整的请求/答复说明并生成客户覆盖面 在完成HTTP的全部合同工作之前.

服务器部署可能设置 `FLOW_ID_API_URL` 用于 API 和 JWKS 请求的可信任内部 HTTP( S) 来源, 或通过 `apiUrl` 到服务器会话/验证帮助器. `issuerUrl` 仍然是公开的JWT发行商和浏览器导航源. 传输 URL 不得包含证书、 路径、 查询或碎片 .

### 服务器跟踪

登记a `NodeTracerProvider` 与 `W3CTraceContextPropagator` 服务前 请求,并设定 `OTEL_EXPORTER_OTLP_ENDPOINT`。帮助者来自 `@flow-industries/id/start` 然后继续通过 HTTP 调用 W3C 跟踪上下文 :

```ts
import { traceRequest, tracedFetch } from "@flow-industries/id/start";

const fetch = (request: Request) => traceRequest(request, () =>
  tracedFetch("https://service.example/api/status"),
);
```

`traceRequest` 从入境信头开始一个SERVER跨度,不包括 获得/获得 `/health` 探测器. `tracedFetch` 启动 CLIENT 跨度并注入 `traceparent` 财务报告和审定财务报表 `tracestate`,保留 请求机构、证书、信号和信头覆盖。 通过自定义 将运输作为其保留特定运输限制的第三个论据. 两个助手只记录HTTP的方法和状态;他们从不捕捉URL, 头条、身体或例外信息。 没有终点环境 变量,它们不添加跨度或标题.

服务器会话/ JWKS 助手和输入的 JSON 客户端使用此传输 自动. `withTraceContext(headers, callback)` 继续上下文 当一个嵌入的会话助手没有固定的间隔时; `extractTraceContext(headers)` 为应用程序的现有请求跨度提供一个孤立的父程序。 浏览器 客户端保留其本土取取行为,不建立 RUM 跟踪根.

PDS的发现需要明确的非负整数预算 `ATPROTO_RESOLUTION_USER_HOURLY_CAP` 财务报告和审定财务报表 `ATPROTO_RESOLUTION_GLOBAL_HOURLY_CAP`未设置、无效或零预算拒绝 用HTTP 429进行外出发现和可重试 `RESOLUTION_UNAVAILABLE`. 每个发现 请求,包括缓存读取和强制刷新,消耗耐用 在任何供应商提出要求之前,每个用户和整个车队的小时入境。 失败 外出尝试保留入境消费;柜台使用现有 限定核查保留和划入账户去除机制. 这些盖子绑定了复制品的入境请求;操作员必须选择 与重复计算、外延和能力相适应的预算.

### 每日报到学习活动

学习科目默认为 `trackingMode: "duration"`;已存在的行和客户端保留了该默认值. 创建和更新接受 `"duration" | "check-in"`. 支持的主题响应广告 `trackingModes`,包括空账户。 切换保存主题ID,完成持续时间和日常历史. 运行中的定时器拒绝更改模式 `409 active_timer`;报到主体不能启动持续时间器或成为游戏持续时间倒计时.

`GET /api/study/check-ins?subject=<id>&from=YYYY-MM-DD&to=YYYY-MM-DD` 读取一个包含最多366天的UTC窗口,包括存档主题. `days` 仅包含记录 `{ date, completed, revision }` 行; 修改后零时不限制缺一日. `PUT /api/study/subjects/:id/check-ins/:date` 带 `{ completed, expectedRevision }` 返回时 `{ subjectId, date, completed, revision }`。写入允许在主题创建前进行回填,但拒绝无效或未来的UTC日期、存档主题和持续时间模式。 系统修订答复 `409 revision_conflict`;紧接前作的修改可以在不推进修改的情况下重放相同的完成状态. 每一个被记录的行,包括不加限制的行,计为被删除的归档的历史,并包含在账户导出中. 所有权总是来自经认证的打电话者。 报到时间不授予持续时间或XP;完成时间摘要继续包含跨模式开关的历史时间.

按依附顺序放出:先应用添加剂迁移并部署Auth API,再发布SDK第二,再部署Time能力定型UI. 在当地生成和验证迁移;生产迁移遵循现有的释放批准程序。 回滚可能隐藏用户界面或禁用进一步登录写入,同时保留 `tracking_mode`,检查行和所有动作历史。 在回滚时不要放下或转换这些记录.

新的每日一行,包括最初没有限制的天数,持续使用各种活动和Auth复制品共用的每小时录取上限: `STUDY_CHECK_IN_USER_HOURLY_CAP` 每个账户的违约额为600 `STUDY_CHECK_IN_GLOBAL_HOURLY_CAP` 整个舰队2万 0 禁用新行; 已耗尽的录用返回 `429 rate_limited`. 现有日版编辑和单机重试仍在上限提供。 Buckets使用服务器请求时间,因此选择更老的日期不能绕过配额;历史回填仍然允许. 这些限制约束的增长率,而不是终生存储.

PostgreSQL 种族接受检查只针对一次性本地数据库: `DATABASE_URL=<local-test-url> MIGRATION_TEST_DATABASE_URL=<local-test-url> bun scripts/time-checkins-postgres-acceptance.ts`它应用了承诺的迁移,验证了旧客户的写作和比赛计时器,开关,切换和删除. SDK版本0.28.0通过现有的合并工作流程准备出版;在产品推出前,含有迁移内容的发布仍然被锁定.

### Bun SSS 整合

`@flow-industries/id/start/bun` 仅提供服务器静态响应和一个小 请求调用。 它没有React或TanStack运行时的导入. 选择应用程序 路径是文件、其缓存/安全信头以及其SSR处理器:

```ts
import {
  createSsrServer,
  installGracefulShutdown,
  safeRelativePath,
} from "@flow-industries/id/start/bun";

const app = createSsrServer({
  health: { readiness: async () => true },
  staticAsset: (_request, url) => {
    if (!url.pathname.startsWith("/assets/")) return null;
    return {
      directory: "./dist/client",
      path: safeRelativePath(url.pathname) ?? "",
      headers: { "Cache-Control": "public, max-age=31536000, immutable" },
    };
  },
  ssrHandler: (request) => handler.fetch(request),
});
const server = Bun.serve({
  port: 3000,
  async fetch(request, server) {
    const response = await app.fetch(request, server);
    if (!response) throw new Error("Expected an HTTP response");
    return response;
  },
});
installGracefulShutdown(server, { onShutdown: () => app.drain() });
```

例行检查排出,可选择的健康, `before`,然后是SSR. `before` 返回时 `null` 继续,停止的反应,或 `undefined` 之后 WebSocket升级. 具有不同探测器/原产地命令的应用程序可以省略 `health` 并把它处理在 `before`。 。 。 . `transformResponse` 将应用策略应用于每个 HTTP 反应; `observe` 包装处理应用程序的追踪和访问记录. 钩子都得不到隐匿的缓存或安全政策.

`serveStaticFile(request, { directory, path, headers, contentType, conditional })` 单独提供。 它只服务于限制在 所选目录,保存调用器头并支持 Last-Modified/304 . 设定 `conditional: false` 对无条件的答复。 缺少选中文件 从绳子返回404; `fallthrough: true` 转而继续实行安全部门改革. `safeRelativePath` 将 URL 路径解码一次; 将其解码结果传递到 `serveStaticFile`,它也拒绝相对的反转和同义链接出逃.

`drain()` 并等待被接纳的处理者 `onDrain`. Bun's (英语) `server.stop(false)` 仍然负责积极应对 溪流,以及 `installGracefulShutdown` 提供关闭期限。 应用程序 继续拥有WebSocket和工人清理.

多源会话路线,通过 `audience: (request) => selectedOrigin` 改为 `flowSessionHandlers` 财务报告和审定财务报表 `resolveFlowSessionRequest` 从 `start/server`。 。 。 . 将请求主机授权列表保留在应用程序中, 并将解析器包入应用程序源 服务器在通过选项时运行. `readSessionCookies(header, audience)` 从 `/server` 在不验证其值的情况下提取精确的饼干名.

`createFocusApi` 返回时 `CompleteFocusApi`,其 `checkIns` 财务报告和审定财务报表 `setCheckIn` 需要采用各种方法. `FocusApi` 为自定义适配器保留可选方法. `createMeditationApi(host, getToken)` 从根或 `/focus` 读取完成 冥想 `summary(range?)` 财务报告和审定财务报表 `sessions({ before?, limit? }?)` 通过相同的 JSON 运输和 `StudyRequestError` 作为学习。 它的光标不透明,它 不更改仅研究摘要或创建研究课题.

`rooms.mine()` 返回时 `MyRoomSummary` 与呼叫者有效的条目 `viewerRole`,包括目前全球工作人员的作用。 字段是可选的 代表年长的发行者;缺勤不给予管理许可。 变异 继续检查当前服务器侧授权 。 公共会议室和活动 从包根导出线条类型 .

### 请求中的用户身份

成功调用解析、 JWT 校验、刷新和更好的 Auth 会话钩记录 `auth.user.verified` 儿童间距 `user.id`。单独的身份跨度保存账户开关 和一个请求中的多个已核实的用户。 ID 来源于已校验的会话/按键状态, 从未 `X-Flow-User-Id`,一个剖面目标,请求正文,或解码未签名的JWT. 配置文件显示元数据为 在读取时分别解决; 证书和配置字段不复制到这些跨度中. 没有主动记录请求的间隔, 任何身份间隔都不会被释放 。 旧的痕迹和要求 不解析未记录的用户。 不需要 SDK 发布或数据库迁移 .

## 常见问题

### @flow-industries/id 是什么？

Flow应用程序的Passkey-first身份\. 一个密码绑在 id\.flow\.industries可在Flow应用软件上使用,并带有面向观众的JWT和可选的Tempo签名\.

### 如何安装 @flow-industries/id？

在项目目录运行 npm install @flow-industries/id，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：ox（\>=0\.14\.0）、viem（\>=2\.47\.10）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @flow-industries/id 支持 TypeScript 吗？

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

### @flow-industries/id 支持 ESM 还是 CommonJS？

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

### @flow-industries/id 可以商用吗？

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

### @flow-industries/id 的下载量有多少？

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

### @flow-industries/id 还在维护吗？

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

