@enkaku/server

中文文档
0.23.3发布于 2026/11/11MITTypeScriptES Module近 30 天下载 5748

Enkaku RPC 的服务器逻辑

中文使用文档
文档目录5 节
  1. 安装
  2. 召唤钩
  3. 流出后压
  4. 频道发送
  5. 有效载荷编辑

Enkaku 服务器

安装

npm install @enkaku/server

召唤钩

Server, (中文(简体) ), serve() 财务报告和审定财务报表 server.handle(transport, options) 接受选项 onInvocation: InvocationHook 调用. 每节车厢的车钩会覆盖服务器的车钩. 服务器在验证,认证,访问控制,加密和回放检查后等待钩子,然后启动处理器. 它运行一次 对于每个请求,流,频道或事件引用,永远不会 send 或者说 abort 留言.

InvocationContext 包含:

外地含义
type'request', (中文(简体) ), 'stream', (中文(简体) ), 'channel' 或者说 'event'
procedure程序名称
signal在勾钩等待发送时中止取消的信号
rid请求身份证明, 因事件缺席
callerInvocationCaller 已核实 iss 和可选的呼叫者 sub
verifyDelegation()同步检查此程序和服务器
transport特定运输背景,类型为 unknown
message原始消息

与 requireAuth: false, (中文(简体) ), caller 缺席和 verifyDelegation() 返回时 false。 。 。 . sub 只有在 verifyDelegation() 返回时 true。 。 。 . 缺少或无效代表团返回 false,与发行方匹配的主题也是如此。 意外的核查失败拒绝了这一承诺. 取消运输 signal 钩子还在等待中 Hooks可以使用它来取消同步检查. 取消后,解钩从不启动处理器. 检查会记住它的承诺 并分享它与访问控制上游. 访问检查函数返回 AccessDecision 揭发同样的 verifyDelegation() 方法.

import { InvocationRejectedError, Server } from '@enkaku/server'

const server = new Server({
  protocol,
  handlers,
  identity,
  accessRules,
  async onInvocation(ctx) {
    if (ctx.caller?.sub != null && !(await ctx.verifyDelegation())) {
      throw new InvocationRejectedError({
        code: 'DELEGATION_REQUIRED',
        message: 'A valid delegation is required',
      })
    }
  },
})

掷出 InvocationRejectedError({ code, message, cause? }) 跳过处理器并保存错误回复中提供的代码和消息. 其他例外产生代码 EK01 和消息 Invocation hook failed,不披露例外信息. 事件没有得到答复。 所有钩子故障都发出 handlerError 有类别 'invocation' 并标出引用失败的跨度.

流出后压

Server 财务报告和审定财务报表 serve() 接受 streamHighWaterMark,一个正有限安全整数默认为 1。 。 。 . 它将每个流和频道处理器的可读出队列绑定在以数值而不是字节计量的值上. 频道的接通管保持了现有的行为.

const server = serve({
  requireAuth: false,
  protocol,
  handlers,
  transport,
  streamHighWaterMark: 4,
})

当运输发送站点时,队列会填满,处理器会是下一个 writer.write() 留待处理. 那个作家 desiredSize 减到 0 直到下游恢复消费. 已经存在于运输缓冲器中的值不在此队列限制之内 . 管家必须等待写作或尊重 writer.ready 避免积累待写. 默认现在应用了后压, 以前的版本允许无约束的出行队列 .

频道发送

服务器发送一个 send 仅当其 prc 匹配频道打开程序 rid。 。 。 . 任何其他 send,包括给请求或流的,是一个无效的信息. 服务器发送 invalidMessage 用错误代码回复 EK08 关于这个 rid。 。 。 . 与其他无效发送一样,客户端随后将频道视为失败,而服务器处理器可能继续运行. abort 信件不带程序, 并按 rid 一个人.

有效载荷编辑

Server 财务报告和审定财务报表 serve() 接受 redactProcedures、一系列程序名称或上游 (procedure: string) => boolean。 。 。 . 投出数为匹配的上方. 服务器从不记录任何级别经编辑程序的有效载荷. 这包括参数、事件数据、发送和接收的频道或流值、结果、处理器或引用钩错误. 命名一个已编辑的程序的无效信件会被登录而不发生其验证错误 . 频道 send 消息和无效消息使用其实时请求的程序 rid,而不是客户端提供的 prc。 。 。 . 在设置了选项后,一个命名为未知程序的无效消息也会被登录,而不会出现其验证错误. 无效也是 send 或者说 abort 请求的认证尚未确定. 日志记录保存程序名,请求ID,消息类型和出错代码. 出错记录也保留出错名称,从不保留其消息或原因. 一个被编辑的程序的Spans只记录出错误代码和名称. 他们的错误消息和状态消息已读取 Error details redacted,如同无效信件的验证错误一样. 电线上的信息没有变化. 进行中 handlerError 财务报告和审定财务报表 invalidMessage 事件仍然携带有效载荷 error.cause 联 合 国 writeFailed 事件也可以发生. 消费者不得登录这些有效载荷.

const server = serve({
  requireAuth: false,
  protocol,
  handlers,
  transport,
  redactProcedures: ['secrets/provision', 'mcp/callTool'],
})

版本与发布记录

@enkaku/server 共发布 60 个版本,首次发布于 2024/10/06;过去 12 个月发布了 37 个版本。

版本发布日期距今
0.23.3latest2026/11/112 天前
0.23.22026/11/112 天前
0.23.12026/11/112 天前
0.23.02026/11/058 天前
0.22.52026/11/049 天前
0.22.42026/11/049 天前

关于 @enkaku/server 的常见问题

@enkaku/server 是什么?

Enkaku RPC 的服务器逻辑

如何安装 @enkaku/server?

在项目目录运行 npm install @enkaku/server,或使用 pnpm add / yarn add / bun add。

@enkaku/server 支持 TypeScript 吗?

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

@enkaku/server 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@enkaku/server 可以商用吗?

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

@enkaku/server 的下载量有多少?

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

@enkaku/server 还在维护吗?

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