@btravstack/keys

中文文档
0.58.0发布于 2026/11/08MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 4308

@btravstack/ core 的 EnvelopeKeys 端口: 由主人的 AWS KMS 密钥包裹的每个所有者的根密钥, 解开内存并缓存为 TTL, 并删除一个密钥, 以及 HKDF 助手给出每个目的的密钥

中文使用文档
文档目录4 节
  1. 实例
  2. 选项
  3. 它决定什么,它没有
  4. 许可证

@btravstack/ 键

一个 EnvelopeKeys 用于 @btravstack/core: 每根密钥 拥有者,世代相传,由该拥有者的 AWS KMS 密钥包裹——未被包入 内存和缓存为 TTL, 用一个密钥删除被删除—— 和一个 HKDF 助手给每个目的 自己的钥匙.

📖 文档 • 妇女 API 参考

pnpm add @btravstack/keys @btravstack/core @btravstack/config @btravstack/di unthrown
pnpm add @aws-sdk/client-kms # for @btravstack/keys/kms

任何依赖都是同龄人 @aws-sdk/client-kms 可选的: @btravstack/keys/kms 进口.

实例

将租户的有效载荷密封在租户自己的钥匙下的一个港口,以及 提供密钥的构成:

import type { webcrypto } from "node:crypto";

import {
  EnvelopeKeys,
  deriveKey,
  type InvalidKeyPurpose,
  type KeyErased,
  type KeyGeneration,
  type KeysUnavailable,
} from "@btravstack/keys";
import { kmsKeys } from "@btravstack/keys/kms";

class PayloadKeys extends Port("ReadmePayloadKeys")<{
  readonly key: (
    generation: KeyGeneration,
  ) => AsyncResult<webcrypto.CryptoKey, KeyErased | KeysUnavailable | InvalidKeyPurpose>;
}> {}

export const payloadKeys = Provider(PayloadKeys)({
  inject: { keys: EnvelopeKeys },
  sync: ({ keys }) => ({
    key: (generation) =>
      keys.rootKey(generation).flatMap((root) =>
        deriveKey(root, { namespace: "payloads", purpose: "seal", version: 1 }, {
          algorithm: { name: "AES-GCM", length: 256 },
          usages: ["encrypt", "decrypt"],
        }),
      ),
  }),
});

export const Sealing = Module("ReadmeSealing")({
  imports: [kmsKeys()],
  provides: [payloadKeys],
  exports: [PayloadKeys],
});

提供一代人,轮流, 消除租户在一个电话和规模化 缓存是 每个拥有者保留信封密钥。 。 。 .

选项

选项何处这是什么
KEYS_KMS_REGION环境拥有者的 KMS 密钥区域—— 需要
KEYS_KMS_ALIAS_PREFIX环境车主的 KMS 密钥是 <prefix><owner> 所需数额
KEYS_KMS_ENDPOINT环境 endpoint模拟器或 VPC 端点( 默认: AWS 本身)
KEYS_CACHE_TTL_MS环境 cacheTtlMs未包装根保存时间( 默认为 5 分钟)
KEYS_KMS_PENDING_WINDOW_DAYS环境 pendingWindowDays取消的天数(默认) 30(中文(简体) )
clockkmsKeys({ … })缓存的 TTL 是用什么来衡量的

完整表——默认,语义和推理——活在 参考页, (中文(简体) ), 这张名单是详细的.

它决定什么,它没有

决定 一代是一个 KMS 数据密钥, 受加密的约束 上下文 { owner, keyId }因此,为另一个所有者或密钥 id 呈现的blob 是 拒绝而不是被解开; 禁用、删除、丢失或拒绝 键为已键 KeyErased 和任何其他 KMS 说一个打字 KeysUnavailable;删除所有者是预定删除的密钥 向每个 KMS 请求报告 Observers; 并且一个衍生的密钥是 HKDF-SHA-256号机车 info = <namespace>/<purpose>/v<version>。 。 。 .

它没有决定 在那座乐园里,有俘虏的世代 下一个加密, 或如何创建所有者的 KMS 密钥: 这些是 应用程序和平台。 理由是 AGENTS.md。 。 。 .

许可证

麻省理工学院

版本与发布记录

@btravstack/keys 共发布 19 个版本,首次发布于 2026/10/21;过去 12 个月发布了 19 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.58.0latest2026/11/08今天
0.57.02026/11/071 天前
0.56.12026/11/062 天前
0.56.02026/11/062 天前
0.55.12026/11/035 天前
0.55.02026/11/035 天前

关于 @btravstack/keys 的常见问题

@btravstack/keys 是什么?

@btravstack/ core 的 EnvelopeKeys 端口: 由主人的 AWS KMS 密钥包裹的每个所有者的根密钥, 解开内存并缓存为 TTL, 并删除一个密钥, 以及 HKDF 助手给出每个目的的密钥

如何安装 @btravstack/keys?

在项目目录运行 npm install @btravstack/keys,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:unthrown(^5.0.0)、@btravstack/di(^0.58.0)、@btravstack/core(^0.58.0)、@btravstack/config(^0.58.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@btravstack/keys 支持 TypeScript 吗?

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

@btravstack/keys 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@btravstack/keys 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@btravstack/keys 可以商用吗?

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

@btravstack/keys 的下载量有多少?

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

@btravstack/keys 还在维护吗?

最新版本 0.58.0 发布于 2026/11/08(今天);至今共发布 19 个版本,其中过去 12 个月发布了 19 个;首次发布于 2026/10/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。