@flow-industries/id

中文文档
0.36.0发布于 2026/10/29MITTypeScriptES Module近 30 天下载 3742

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

中文使用文档
文档目录15 节
  1. 开发
  2. 安全头
  3. AT 协议身份
  4. 已连接账户
  5. 安装
  6. 文档
  7. 登录和账户页面
  8. 公众概况
  9. 许可证
  10. 迁移兼容性检查
  11. 版本消费者合同
  12. 服务器跟踪
  13. 每日报到学习活动
  14. Bun SSS 整合
  15. 请求中的用户身份

流程标识

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

开发

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 允许同源 资源并拒绝设定;每个应用程序提供其资源指令 和嵌入需要.

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

安装

bun add @flow-industries/id viem

对于 Wagmi 应用程序 :

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

文档

  • 融合指南 ——服务器设置,cononic sign-in,React,和账户导航.
  • 来宾会议 ——招生期间静默出客创作并保持身份.
  • 行动会议 活动时间和内置动作部件.

单独文档库中的 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 仍然是源兼容性被贬损的别名类型;登录本身通过第一当事方调回返回。 见 融合指南 用于服务器接线和迁移.

公众概况

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 跟踪上下文 :

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处理器:

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 共发布 66 个版本,首次发布于 2026/04/26;过去 12 个月发布了 66 个版本。

版本发布日期距今
0.36.0latest2026/10/2918 天前
0.35.02026/10/2918 天前
0.34.02026/10/2819 天前
0.33.12026/10/2620 天前
0.33.02026/10/2522 天前
0.32.12026/10/2323 天前

关于 @flow-industries/id 的常见问题

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