# @enkaku/server 中文文档

规范地址：https://npmcn.com/package/%40enkaku/server/

版本：0\.23\.3
npm 元数据更新时间：2026-11-11T14:08:15.761Z
中文译文更新时间：2026-11-13T17:41:42.668Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40enkaku/server
原文对照：https://npmcn.com/package/%40enkaku/server/?lang=original
项目主页：https://enkaku.dev/
源码仓库：https://github.com/TairuFramework/enkaku

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：120 kB，29 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：12 个
- 首次发布：2024-10-06T13:54:19.593Z
- 最新版本发布：2026-11-11T14:08:15.573Z
- 近 30 天下载量：5748（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：60（近 12 个月 37 个）

## 中文简介

Enkaku RPC 的服务器逻辑

## 安装

```sh
npm install @enkaku/server
```

也可以使用：`pnpm add @enkaku/server`、`yarn add @enkaku/server`、`bun add @enkaku/server`

## README

# Enkaku 服务器

## 安装

```sh
npm install @enkaku/server
```

## 召唤钩

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

`InvocationContext` 包含:

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

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

```ts
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`。 。 。 . 它将每个流和频道处理器的可读出队列绑定在以数值而不是字节计量的值上. 频道的接通管保持了现有的行为.

```ts
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` 事件也可以发生. 消费者不得登录这些有效载荷.

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

## 常见问题

### @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 和提交记录判断。

