凯恩(凯恩)@fungi.computer/cairn(中文(简体) )
Cairn 给 Fungi 包打入、不透明标识符、临时命令和 关联键和候选单词名。 使用它,这样你就不用 手动滚动您自己的ID格式和解析器。 软件包提供了这些值和 他们的解析规则。 调用域拥有持久性,独特性, 授权和生命周期政策.
安装或设置
npm install @fungi.computer/cairn
一揽子船舶无害环境管理"type": "module")和安装 nanoid佐德,还有..
uuid 作为运行时间的依赖。 导入 ID 和 ephemeral 的根切入点
一起键,或导入 @fungi.computer/cairn/id 财务报告和审定财务报表
@fungi.computer/cairn/words 分别.
快开始
这个例子创造了一个打电话者拥有的身份证家庭,产生身份证, 并检查解码字符串而不更改其拼写:
import { defineIdFamily } from "@fungi.computer/cairn/id";
const jobIds = defineIdFamily({
family: "jobs",
version: 1,
kinds: { job: { prefix: "job" } },
});
const jobId = jobIds.job.generate();
const result = jobIds.job.parse(jobId);
if (!result.ok) throw new Error(`Invalid job ID: ${result.error.reason}`);
结果是犬科动物 job_ 标识符。 可运行的ID测试练习
家庭范围生成和剖析 src/id.test.ts。 。 。 .
核心概念
defineIdFamily 验证信任的家族声明并返回一个代码c
每一种申报。 每个编码器都有一个品牌的TypeScript ID类型,一个Zod
用于不可信字符串边界的策略,以及 parse 财务报告和审定财务报表 is 方法
已经解码的字符串 。 1版本的ID有表格
<prefix>_<21 lowercase base36 characters>解码 解码,
复数,或使输入正常化。 已拒绝的解析返回已绑定的元数据和
一个原因。 它不返回被拒绝的值.
ID 不声明数据库独有性、关系、权限或实体 生命周期。 宣布一个家庭拥有这些规则和任何范围 碰撞重试.
根也出口 replayKey, (中文(简体) ), deterministicReplayKey, (中文(简体) ), correlationKey, (中文(简体) ),
财务报告和审定财务报表 createCorrelationSequence。 。 。 . replayKey() a. 用于一个命令的薄荷UUIDv7;
把它保留在模糊的重复中.
await deterministicReplayKey(domain, parts) 获得同样的再播放键品牌
使用Web Crypto SHA-256和节点中长度前缀的tuple编码,浏览器
还有工人 提供稳定的主机拥有域和完整的授权范围
和存储的命令身份,所以重启会得到相同的密钥。 关联键
是用于运输或供应商关联的UUIDv4。 关联序列开始
在一次连接时为1,当它达到安全整数耗尽时会投出。 无
这些密钥中有一个持久的域名.
words() 从 Cairn 的导出形容词和名词中选择一个候选名称
列表。 它不保存登记册或承诺独一无二。 呼叫者选择一个单词
计数符合他们的碰撞要求.
API 参考
见生成 API 参考。公众入境点是
@fungi.computer/cairn, (中文(简体) ), @fungi.computer/cairn/id,以及
@fungi.computer/cairn/words。 。 。 .
实例和检查
测试套件包括标识语法,平时键和候选词.
建成后,进行单元测试和公众 ./id 捆绑隔离证明 :
pnpm --filter @fungi.computer/cairn test
test/runtime/id-only-proof.mjs 核实
公众 ./id 输入点不包括词体。 重点测试
包含 src/id.test.ts, (中文(简体) ),
src/ephemeral-key.test.ts,以及
src/index.test.ts。 。 。 .
限制和错误
ID生成需要安全的随机性. 如果无法找到来源, Cairn
掷出 CairnGenerationError 和善良的家族在一起 无效
值得信赖的家庭声明 CairnDefinitionError。呼叫者必须使用
解码器在不可信线边界上的图案,然后将数据传递到 parse。 。 。 .
词根 nanoid(length) 导出被保留给需要原始随机的呼叫者
绳子。 它的有限长度强制遵循选定的上游运行时间
执行。 对可预测的结果使用有限度的非负整数.
LONG 是一个常规大小,而不是最大。 同样, words({ count }) 保留
传统是强迫,而不是施加最大。 CPU 和输出增长
大小, 因此在调用前验证和绑定未信任的大小
或帮助者。 使用 defineIdFamily 用于持久域名.
贡献和许可证
凯恩的执照是麻省理工学院的 见 LICENSE它的直接运行时间
依赖关系是 nanoid佐德,还有.. uuid。咨询它们的软件包分发
他们的执照条件.