@astram/guard

中文文档
0.34.0发布于 2026/11/06MITTypeScriptCommonJS近 30 天下载 6554

Astram框架——执行后卫+现实世界适配器("手"). 每个请求都经过一个全球性的逐一拒绝闸门(ADR-0002)、分类装饰器、靴子池主张(ADR-0018)、Root()注册接头和DB/R

中文使用文档
文档目录7 节
  1. 这里面是什么
  2. 登记连接(ADR-0023§4)
  3. 请求本金 currentRequestPrincipal (中文(简体) )
  4. 文件共享端口符 (P) SHIELD_FILE_SHARE ,GAPS#57 (中文(简体) )
  5. 同伴依赖关系(ADR-0023§2)
  6. 图标
  7. 页:1

@astram/guard — 执行门+巢JS适配器

这个 执法门+薄巢JS集成 astram 框架—— 可装入可装入可装入胶水的消费应用软件(它运行在/与NestJS集成). 人数 ADR-0023 (英语) 这是 框架代码, 自有 + 锁定,不能消费-编辑:它生活在 消费者 node_modules,并升级流经 npm update它取决于 @astram/core (框架-不可知内核)和PEER-依赖 主机"巢穴JS"运行时间.

这里面是什么

块文件目的
ShieldModulesrc/module/shield.module.ts这个 一个注册接头 —— 说 forRoot() 编号 : forRootAsync()消费者进口一次;框架拥有构成.
全球执法警卫src/enforcement/global-enforcement.guard.ts逐一否认 APP_GUARD (ADR-0002)每条路线都经过.
分类装饰src/enforcement/classification.decorator.ts@Public() 编号 : @Classified() 消费者作者在控制器上写这些.
核心连接src/enforcement/core-seam.ts仅导入类型 @astram/core是因为 DecisionAuthority (ADR-0003) + 故障闭塞活塞.
靴子池论src/boot/boot-sequence.tsATR-0018 连接池预算在启动时检查(未关闭).
应用配置src/config/app-config.ts港口/环境/ADR-0018池预算(env加载器,纯).
请求本金src/request-auth/request-principal-als.ts只读 currentRequestPrincipal(): 当前的请求 { tenantId, userId } (下关.

登记连接(ADR-0023§4)

一个消费者应用 电线Astram与一个 单导入 在其根模块中,它从来没有 编辑框架 :

import { Module } from '@nestjs/common';
import { ShieldModule } from '@astram/guard';

@Module({
  imports: [
    ShieldModule.forRoot(), // fail-closed stub authority; env-loaded config
    // ShieldModule.forRoot({ decisionAuthority, config }) to supply the real Core authority
  ],
  controllers: [/* the consumer's feature controllers */],
})
export class AppModule {}

forRoot() 绑定 :

  • GlobalEnforcementGuard 作为 APP_GUARD · 全球、结构上不可避免, 拒绝逐一执行点(ADR-0002). @Public() 是唯一的选择退出; 未分类的路由是 被拒绝(403)。 。 。 .
  • 决心 AppConfig (单位:千美元) APP_CONFIG+ 该 BootSequence 钩子, 运行 ADR-0018 (英语) (b) 启动时的集合预算主张(违规行为).
  • 这个 核心决定权 (单位:千美元) SHIELD_DECISION_AUTHORITY)——真实的 @astram/core 授权通过 forRoot({ decisionAuthority }),则 关闭失败 树枝 (deny-by-default),所以误拨不能打开一扇门.

forRootAsync({ useFactory, inject, imports }) 由 DI 计算成的变体( stub) 在此层中: 工厂在启动时解决相同的选项; 守护/启动 接线相同.

请求本金currentRequestPrincipal(中文(简体) )

import { currentRequestPrincipal } from '@astram/guard';

const p = currentRequestPrincipal(); // Readonly<{ tenantId: string; userId: string }> | undefined

在请求中运行但没有的框架代码 req 手持(例如 @astram/agent是因为 createAuditedFetch)在这里读到打电话者的房客和校长的ID. 谱: docs/features/capability-outbound-audit/SPEC.md v6 第5节 G.

  • 唯相读取. 框架中间软件( NameEnforcementModule,每条路线)打开一个模块-私人 AsyncLocalStorage 每个请求都有空的持有人。 全球执法卫队是唯一 写入器:一次,在允许路径上,在认证后,从主端解出 会话或 API 密钥( 绝不来自正文、 标题或查询) 。 值被冻结。 存储,存储 中间软件和写入器不导出,因此应用程序代码不能输入范围或覆盖范围.
  • undefined 在请求(预定工作)之外 @Public() 路径,用于请求 警卫拒绝了 请求没有通过中间软件.
  • userId 是主要编号: 用户或服务账户. 值没有说明是哪一种 (GAPS #46); 需要时查查ID.
  • 在请求的同步上下文之外恢复工作(例如一些溪流消费者)读取 undefined,从没有另一个请求的值(一个交互的4个请求测试持有这个). 读吧 在请求自己的调用链中; 由共享代码运行的调用( 一个全应用程序发送器上的收听器) 所以不要在那里读它.
  • 在启动时启动背景工作( E)onApplicationBootstrap永远不要懒散 从内心 请求. 请求内创建的 Async 资源( 计时器、 承诺链、 队列排出) a 处理器从第一次使用开始)保留该请求的背景,包括其主要内容或缺乏 一个.
  • 排除路线 app.setGlobalPrefix(prefix, { exclude }) 也通过中间软件( e2e) 测试这个.
  • @astram/guard/internal (仅使用框架)还输出只读 insideRequest()数字 : true 在通过中间器件的请求中, 无论有没有本金. @astram/agent是因为 已审计的获取器使用它拒绝来自 @Public() 并拒绝了请求.
  • 唯快报. currentRequestPrincipal 证明在 @nestjs/platform-express; 快捷为 在它拥有自己的e2e测试之前不支持.
  • 只有巢穴路线. 持枪者由一个巢穴中间器件打开,所以直接挂载在 hTTP 适配器( 在 Nest 路由之外) 运行“ 在请求之外 ” : insideRequest() 实值 false 财务报告和审定财务报表 @astram/agent是因为 createAuditedFetch 将预定的工作分支放在那里(应用程序必须到此为止) 提供服务器持有的租户)。 在 Nest 处理器或启动的任务中保留连接器代码 .
  • 仅在内存中:请求路径(Shield #12)中没有添加数据库或已读的 Redis .

文件共享端口符 (P)SHIELD_FILE_SHARE,GAPS#57 (中文(简体) )

src/module/shield-tokens.ts 宣布该港口为警卫,绝不进口身份(ADR-0003); @astram/identity 按要求绑定 光谱 docs/features/file-share-port/SPEC.md v1, ADR- 0040 (英语) 增编(2026-11-03).

  • 输出 : SHIELD_FILE_SHARE 联合国 Symbol,没有身份限制, FileSharePort (单位:千美元)shareWithRole, (中文(简体) ), unshare, (中文(简体) ), revokeForParent, (中文(简体) ), listForParent, (中文(简体) ), reconcileFile没有演员, 租户、业主或公司的论点), FileShareParent (单位:千美元){ typeKey, id }, (中文(简体) ), FileShareResult (单位:千美元){ created, effective, missing }, (中文(简体) ), FileShareError, (中文(简体) ), FILE_SHARE_ERROR_CODES, (中文(简体) ), FileShareErrorCode。 。 。 .
  • FileShareError(code) 仅取代码,所以其信息从不带id、文件名或 表格显示: file_share_invalid 400个 Invalid file share request., (中文(简体) ), file_share_not_found 404 (韩语) Not found., (中文(简体) ), file_share_denied 403 (韩语) Not permitted., (中文(简体) ), file_share_unavailable 第503条 File sharing is unavailable.; 未知代码变为 file_share_unavailable。 。 。 .
  • 移徙 1710000000126-AddRecordShareSource.cjs 添加源列 (单位:千美元)rs_source_type_key, (中文(简体) ), rs_source_record_uuid, (中文(简体) ), rs_source_operation, (中文(简体) ), '' - 股权, ck_rs_source_complete, (中文(简体) ), uq_rs_grant_source (替换) uq_rs_grant和 idx_rs_source· ; down 当端口行存在时拒绝.
  • RecordShareWriter: 拥有者 unshare 只删除所有者制作的行并拒绝翻转 仅匹配端口行 ShareNotPermittedError(SHARE_MANAGED_BY_LINKED_RECORD) (单位:千美元)This share is managed by a linked record.); 列表行(RecordShareRow携带源字段; listSharesForAuthorizedRecord 列出一个记录的股票 不受所有者约束, 对于一个呼叫者 已经证明权威 decide() (身份是存储文件管理员列表).

同伴依赖关系(ADR-0023§2)

@astram/guard 对等依赖 在主机运行时间,所以消费者 完全拥有 一份(单份) reflect-metadata 单通/DI注射器:

@nestjs/common ^11 · @nestjs/core ^11 · reflect-metadata ^0.2 · rxjs ^7

这些也是 devDependencies 在这里,软件包会本地化 + 测试 . @astram/core 是真实的(工作空间) 依赖性。 。 。 .

图标

pnpm --filter @astram/guard build   # tsc -p tsconfig.build.json (emits dist + .d.ts)
pnpm --filter @astram/guard lint    # eslint
pnpm --filter @astram/guard test    # vitest run (guard unit + boot-pool + forRoot e2e)

页:1

  • 常见JS 当地("type": "commonjs"),用于雀巢JS装饰机+ reflect-metadata DI型号. 复发根和 @astram/core 保持无害环境管理/节点; 覆盖范围为此软件包(参见 tsconfig.json) (中文(简体) ).
  • 核心接合导入真实 @astram/core 枪管 (类型只) — Core's exports 仅显示地图 ".",因此子路径导入失败了节点解析. 这个 软件包的 tsconfig 清除了底部 paths 这样 @astram/core 解决 节点 模块工作空间同 Core 已建 dist。 。 。 .

版本与发布记录

@astram/guard 共发布 47 个版本,首次发布于 2026/07/10;过去 12 个月发布了 47 个版本。

版本发布日期距今
0.34.0latest2026/11/061 天前
0.33.02026/11/043 天前
0.32.02026/11/034 天前
0.31.02026/11/034 天前
0.30.12026/11/016 天前
0.30.02026/10/317 天前

关于 @astram/guard 的常见问题

@astram/guard 是什么?

Astram框架——执行后卫+现实世界适配器("手"). 每个请求都经过一个全球性的逐一拒绝闸门(ADR-0002)、分类装饰器、靴子池主张(ADR-0018)、Root()注册接头和DB/R

如何安装 @astram/guard?

在项目目录运行 npm install @astram/guard,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:rxjs(^7)、@nestjs/core(^11)、@nestjs/common(^11)、reflect-metadata(^0.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@astram/guard 支持 TypeScript 吗?

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

@astram/guard 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@astram/guard 可以商用吗?

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

@astram/guard 的下载量有多少?

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

@astram/guard 还在维护吗?

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