@ cat- factory/ 守门员- 绑定
这是什么
每个数据要素的政策说明表 公开 API (单位:千美元)/api/v1操作,加上
瞄准梯帮助对象 策略层 排序按键并用它进行调用。 喜欢
sdk/mcp这是 非第五个
客户端: 与四个SDK所暴露的操作相同, 投射为表格, 产生自
相同的 OpenAPI 规格 (pnpm gen:sdk),因此它不能从地表上漂出. un
调用 @cat-factory/sdk 和重新执行
它的行为.
这是猫因子数据的一半 守门员 一家人,三块取出两块不同的 方式:
| 块 | 这是什么 | 你怎么样 |
|---|---|---|
@cat-factory/gatekeeper-bindings (本套装) | 生成的操作表和范围助手 | 安装,以构建自己的政策层 |
@cat-factory/gatekeeper-worker | 完整的守门员机械:Cap'n Web能力表面,关键经纪人,Webhook接收器,批准 | 安装, 只写一个策略 |
deploy/gatekeeper | 部署模板: 策略文件、 硬盘绑定、 三行接线 | 复制和编辑 src/policy.config.ts |
宗旨和目标
用于建筑 证书持有前端: 持有猫因子 API 键的服务 自己和计数 他们自己的呼叫者可以做什么。 刺激消费者是 Cloudflare 操作系统 守门工人(设计记录: 设计记录, (中文(简体) ), 但这里没有Cloudflare的特异性: 任何代理、机器人或治理层 猫因子键可以使用.
目标是这样一个层层对实际部署的行动执行政策
在它实际执行的仪表层里 绝对不会违反手动操作的清单.
地板来自Spec's x-min-scope,服务器从同一合同生成的
字段控制器执行,所以所宣布的范围和所执行的范围是一个值.
每一个束缚带
一个 GatekeeperBinding 百分比 /api/v1 操作 :
name(单位:千美元)tasks_create:政策拼写法,与MCP外形工具名完全相同.minScope: 部署对路线执行的按键镜层(read编号 :write编号 :decide编号 :admin),读取 spec'sx-min-scope。这是STATIC层:一个运行启动 仍然可以拒绝操作pipeline_requires_decide_scope应请求指定时间 管道可以停在人身上.readOnly, (中文(简体) ),consequence:前端需要决定哪个电话被挥动, 被记录, 需要人类.consequence只在有利害关系的地方存在 真实的金钱或一个合并的拉取请求, 和MCP工具表一样, 所以读一遍resolveConsequence(binding)而不是直接:未经说明的突变是谨慎的 破坏性,和binding.consequence?.destructive会回答false对于它.result问:如何invoke答案会回来的value, SSE 数据stream,或binary字节),所以 JSON-中继前端可以将非价值操作进行路由或扣留,说明是哪个.pathParams编号 :queryParams编号 :hasBody财务报告和审定财务报表invoke(client, args): 足以揭露 整个地表 动态地没有手写 包装器每个操作。 论点 常规是 MCP 外观( 最高层的路径参数和查询键, 下方的正体)body; 未知密钥被丢弃, 从未转发).
帮手们
手写在桌子旁src/index.ts),因为每个消费者都需要它们并产生
独立是怎样让他们倒行逆施的:
scopeSatisfies(have, need):是否为范围的关键have清除地板need编辑 阶梯是包容性的:每个跑步都能够做到它下面的一切.bindingsWithinScope(scope):每个操作都能够调用这个范围的关键.bindingByName(name)政策拼写操作;undefined用于命名表面 因此,一个拼错或退休的名字是呼叫者报告的条件,而不是一个 给人惊喜了.resolveConsequence(binding): 用谨慎的默认表示的后果(a) 未附加说明的突变算作有破坏性和无理想性.PUBLIC_API_SCOPE_LADDER: 范围排名本身, 由 spec's 排放x-public-api-scopes。 。 。 .renderSessionTypes(request)页:1.d.ts一个对象能力会话作为其类型脚本 类型,由生成的SESSION_METHOD_SIGNATURES准确的操作a 政策授权。 因为一个命名整个地表的文件 承诺对象没有的方法。 它在它没有签名的名下发声: 滴入的方法读取一个特工 完全像一个操作 部署没有服务 两个需要相反的修复.
梯子帮手 抛出他们不携带的瞄准镜 而不是把它排到下面 read数字 :
在此软件包之前的一次发布必须读作版本 skew, 绝不是没有的密钥
权限.
怎样用
import { CatFactoryClient } from '@cat-factory/sdk'
import {
bindingByName,
bindingsWithinScope,
resolveConsequence,
scopeSatisfies,
} from '@cat-factory/gatekeeper-bindings'
const client = new CatFactoryClient({ baseUrl: process.env.BASE_URL!, apiKey: process.env.KEY! })
// Expose to this caller only what a `write` key can do, minus anything destructive. Read the
// consequence through the helper: most mutations carry no annotation, and the unannotated ones
// are the cautious case, not the safe one.
const exposed = bindingsWithinScope('write').filter((b) => !resolveConsequence(b).destructive)
// Forward a metered call.
const binding = bindingByName('tasks_create')!
if (!scopeSatisfies('write', binding.minScope)) throw new Error('caller tier too low')
const result = await binding.invoke(client, {
serviceId: 'svc_123',
body: { title: 'Fix the flaky login test', description: '...' },
})
由于两条路线没有诚实的操作形状,所以故意没有出现在桌子上:
GET /api/v1/openapi.json (样本发现)和 ALL /api/v1/mcp (主机MCP端点). 两者
大门在 read 在服务器上.
产生的东西
两个文件,都由 pnpm gen:sdk 并严防漂泊 pnpm check:sdk数字 :
| 文件 | 它携带着什么 |
|---|---|
src/bindings.generated.ts | 操作表:镜片平面,突变和传输元数据,后果提示,引用thunks. |
src/session-types.generated.ts | 每个操作都有一个类型脚本方法签名,用于编组一个给定会话 .d.ts。 。 。 . |
签名带有完全打入的ArGUMENTS(路径参数,带有要求的查询密钥,a
(a) 操作需要的机体)和 unknown 结果。 这是蓄意的,而不是一个差距:
a 会话中继部署自己解码的 JSON, 这些形状的权威是
OpenAPI 文档在 GET /api/v1/openapi.json,每个部署服务。 内置模型
树会把第二个拷贝 放在每个消费者的包里 自由地不同意第一个.
配置和定制
此软件包中没有任何内容是配置或定制的:它是生成的数据加纯帮助器,以及
其上的政策属于消费者(参见: @cat-factory/gatekeeper-worker (单位:千美元)
现成一出. src/bindings.generated.ts 改为:pnpm gen:sdk; 更改路线
合同,从来没有文件.
参考资料
backend/docs/public-api.md数字 : 完整的 API 引用( 键、 瞄准镜、 端点语义).sdk/README.md: 客户端 家族和世代的连锁 这桌骑.@cat-factory/gatekeeper-worker数字 : 对照本表汇编部署政策的工人机制.- ADR 0052 (英语)数字 : 设计记录,它被决定的替代品, 和陷阱的构造浮出水面.