# @estiva-app/protocol 中文文档

规范地址：https://npmcn.com/package/%40estiva-app/protocol/

版本：0\.58\.0
npm 元数据更新时间：2026-11-13T16:00:18.881Z
中文译文更新时间：2026-11-13T23:02:32.860Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40estiva-app/protocol
原文对照：https://npmcn.com/package/%40estiva-app/protocol/?lang=original
项目主页：https://github.com/estiva-app/estiva-foundation#readme
源码仓库：https://github.com/estiva-app/estiva-foundation

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

- 包体积（解压后）：1.3 MB，104 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：2 个
- 首次发布：2026-08-27T10:21:09.294Z
- 最新版本发布：2026-11-13T16:00:18.257Z
- 近 30 天下载量：7718（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：67（近 12 个月 67 个）

## 中文简介

Estiva 有线格式:巴斯-形状的诺斯特事件构建器,NIP-01 ids,NIP-19 naddr,NIP-98 HTTP auth,以及中继客户端. 说协议; 解释什么.

## 安装

```sh
npm install @estiva-app/protocol
```

也可以使用：`pnpm add @estiva-app/protocol`、`yarn add @estiva-app/protocol`、`bun add @estiva-app/protocol`

## README

# @ estiva- app/ protocol

Estiva线条格式,一次. 巴斯克形状的鼻孔事件构建器, NIP-01 id 国家实施计划-19 `naddr`, NIP-98 HTTP 认证, Schnor 签名, 以及两个中继器 客户.

```bash
npm install @estiva-app/protocol
```

无注册认证, 不 `.npmrc`没有标志。 这是 [ADR 0002 §3](https://npmcn.com/estiva-docs/decisions/0002-foundation-packages.md)。 。 。 .

## 此软件包没有交叉的行

**在:字节.** 所有正确之处 _中继_ 法官-活动 构造 标记顺序 id 散列 签名输入, `naddr`,国家实施计划98 标题和 `accepted` hTTP桥的语义学.

**不在:折叠,或解释事件的一切.** 应用如何变成一个 将事件流入当前真理是应用程序所在之处 _应该_ 差异 (ADR0001§8) (中文(简体) ). `foldFolder` 和预测 留在应用程序,和每个 应用的相容性固定不变。 对话折叠——线条, 编辑,反应,一个线程的分辨率——是规范的和共享的,所以它生活着 内 `@estiva-app/conversation`从来没有在这里(SPEC§10, ONE-2).

当在这里添加一些东西时,测试不是"两个应用程序都需要它". 没错 **"会 如果两个应用程序不同意,则发出转发通知。”**

## 为什么一个执行, 当套房的整个要求是独立

SPEC 第10节用来论证重复 _曾经_ 架构:每个应用程序三个 执行 NIP-01 序列化 使得“ 应用程序共享不能在 同样的数据"是真实的陈述 而不是关于兄弟姐妹的说法.

说对了 说错机制了 第三份 解决了 第二次手写事件 id hash 不是证明 独立,它是一个分歧 转发通知,我们没有,而且它有 已经发生了。 皮克餐厅 `buildMessage` 长大了 `about` 参数排放 `a` 标记; 船从来没有这样做。 相同的逻辑消息产生了不同的字节 要看是哪个应用程序寄的, **没有失败,每个副本都是 自相相会.** 在另外两个副本之间,a `diff -r` 必须有人 记得逃跑是整个安全机制.

使互通说法真实的是应用程序没有解释,没有 数据库——情况依然如此。 现在他们已经就电线格式达成一致了 而不是巧合 而不是因为巧合 SPEC 第10节经SHA-3修改为如此表述.

## 这里的 MaJOR 是协议事件, 不是类型脚本事件

应用程序的字节的更改 —— id 计算、 序列化顺序、 标记 语义学, 签名输入—— 是 maJOR **即使类型脚本签名是 不变** (ADR0002§4b). 每张发行单都会回答电线问题 明确,包括当答案是:

> **电线行为 :** 不变.

一个缺失的行是让一个字节变化的放出通过作为重构符的.

## 是什么使这个要求

四张CI和五张手的支票 重要的是 没有一个是绿色的勾当 旁边的人选择的价值.

| 检查 | 这是什么 |
| --- | --- |
| `test/wire.test.mjs` | 21个向量 **记录自 `peek-app/convex/nostr/` 财务报告和审定财务报表 `estiva-ship/lib/nostr/` 在此软件包存在之前** ——两个应用的字节已经发布. 所有12个形状的应用软件都具有相同的标识. |
| 同样的文件, `production kind:*` | 7个事件取消 `https://estiva.estiva.app`他们 `id` 财务报告和审定财务报表 `sig` 这是 **中继器**复制对当局而不是对我们的ID检查 从96起抽样调查 _记录_ 船上的折叠固定事件,而不是旁边的7起对抗事件——这些是手工建造的,从未出版过,其中一人坐在这组中,直到现场检查询问后无法找到. |
| `test/oracle.test.mjs` | `nostr-tools` 作为独立的执行,带有负控,当字节错误时失败. 加上警犬NIP-19 `npub` 从规格的矢量, 这是唯一能捕获 bech32m 代替 bech32. |
| `test/runtime.test.mjs` | 枪管进口和与之合作 `WebSocket`, (中文(简体) ), `fetch`, (中文(简体) ), `btoa`, (中文(简体) ), `document`, (中文(简体) ), `process`, (中文(简体) ), `Buffer` 和朋友删除了——有自己的负面控制. |

**不重生( E) `wire-vectors.json` 来通过考试.** 那会抹去 发现 只有在建造者被故意给予 新的形状,然后发布注释 说在 _电线行为_。 。 。 .

绿色套房仍然是不是最后一个字。 中继器是唯一在 线条格式是否正确,通过测试运行是否兼容 被拒绝的事件。 所以有第五张支票,这是手工操作,因为它需要一张 真正的工作空间证书——CI中的证书是常设保密的ADR 0002 §4c 使用失败的释放决定:

```bash
npm run build -w packages/protocol && set -a && . ~/.estiva-agent.env && set +a && npm run verify:live -w packages/protocol
```

它出版 **真签名 `kind:9007`** 命名已经存在的频道, 所以中继答案 `200 {"accepted":false,"duplicate: channel already exists"}` ——证明事件经过解析,其id重算并签名 已核实 。 然后两个负控,没有它" 作品"与"规则被去除"不可分:

-   与 **交换了两个标签** 财务报告和审定财务报表 `id`编号 :`sig` 独自一人 这个 接力自有之词,2026-08-27: `400 invalid: invalid event id: computed 70f206d4…, got b9d1e606…`。它独立地重算 ID,所以同意 好事是同意字节 而不是对他们漠不关心.
-   (单位:千美元) `kind:0`,哪个 `/sign` 无条件拒绝每个应用 `422 policy_violation`大门是直播的,不是打开的.

在标记任何释放前运行 _电线行为_ 线条不是 "没有改变",然后再次反对 **已公布的柏油球** 而不是说 工作空间,因为已建没有发布 .

## `nostr-tools` 被评估,属于依赖性而非依赖性

SHA-3要求在包装手卷起的散列花序之前,先用一个小时处理. 测量, 2026-08-27,反对: `nostr-tools@2.25.0`数字 :

| 问题 | 回复 |
| --- | --- |
| 已经 `getEventHash` 赞同 `computeEventId`? 吗? | **是的,所有103项活动** 从生产记录, 和在这里的每一个矢量. `verifyEvent` 验证所有103个中继签名. |
| 已经 `nip19` 绕来绕去我们的指针? | **对,没错** 包括: `d` 包含结肠的标签. |
| 这是它的 `naddr` 和我们的一样弦? | **没有.** 它以不同的顺序将TLVs分出,因此同个指针编码成不同的字符串. 每个参与的解码器都按类型读取了TLV,并且是可容于命令的,因此它们相互操作——但Nadders绝不能被比作字符串. |
| 它的NIP-98适合吗? | **没有.** `getToken` 发射 `u`, (中文(简体) ), `method`, (中文(简体) ), `payload` 财务报告和审定财务报表 **无非ce**巴斯将每个认证事件 ID 记录在 Redis 重播集中 `created_at` 因此,在一秒钟内有两个相同的请求会碰撞,而第二个请求则因 `NIP-98: replay detected`我们的加一个非正因. |
| 它的NIP -42吗? | `makeAuthEvent` 发出中继挑战, 这恰好符合我们的。 巴斯从名字上看两个标签, 所以它不是负载方式. |
| 依赖成本 | 这需要 `@noble/hashes@2` 财务报告和审定财务报表 `@noble/curves@2`皮克上场了 `^1.8.0`编号 :`^1.9.2` 和船舶指针 `1.8.0`编号 :`1.9.2`. 收养 **二大类 `@noble/*` 在每棵消费者树上**,贵族v2将其子路径重新命名(`/sha256` → `/sha2`),所以它不是一个滴入. |
| 根本不包括的 | 巴斯那种常数, `canonicalChannelName`,标记布局将巴斯验证(`h`,NIP-10标记的复制形式 `a` 3080/30851/1851形状,以及 `accepted`\- 桥的字典 不管怎么说,他们都是我们的. |

**决定:保持我们自己的薄弱执行和使用 `nostr-tools` 作为 测试套房中的独立甲骨文.** 这绝对比两种选择都好 ——无依无靠的第三方交叉核对,无第二秒 高贵,没有字节给消费者。 这也是代替 `diff -r`: 一张支票 自己失败了 而不是一个人必须记得逃跑.

## 运行时间要求,以及为何不在类型中

软件包编译方式 `types: []` 没有 `lib: dom` 所以一个出版 `.d.ts` 工作在 Peek 的 Convex 树, Peek 的浏览器捆绑和代理 `tsx` 运行 (ADR0002§4a). 无 `URL`, (中文(简体) ), `btoa`, (中文(简体) ), `fetch`, (中文(简体) ), `WebSocket`, (中文(简体) ), `TextDecoder` 或 计时器函数在 `lib.es2022`因此,每个是 **在模块中声明: 需要它吗** 财务报告和审定财务报表 **在函数体内读取**数字 :

-   (a) 在单元内申报并不意味着消费者在全球范围内的任何土地;
-   在函数内读取它意味着导入软件包不会触动全局,所以 一个只想要事件构建者的后端不会崩溃于一个 `WebSocket` 它的运行时间从来没有听说过.

运输形状的参数以及全球参数: `Relay` 需要一个 选项 `fetch`, (中文(简体) ), `createLiveRelay` 选择 `socketFactory`,则 默认读取运行时间本身 .

一个诚实的例外,通过写测试发现: **`@noble/curves` 读取 `TextEncoder` 而它的模块体运行.** 因此,"根本没有全球"不是一个 属性 : `@noble/*`。 。 。 . `TextEncoder`, (中文(简体) ), `TextDecoder` 财务报告和审定财务报表 `URL` 在每套套间运行时,都有WhatWG 通用 目标,这就是线.

## 消费者

皮克、 船舶和 `estiva-agent` 看到了吗 [顾问](https://npmcn.com/package/CONSUMERS.md)A级 打破更改不会发布 直到他们每个人都有公开的升级 PR, 作者:谁打破(ADR 0002§5).

## 释放

```bash
git tag protocol@0.1.1 && git push origin protocol@0.1.1
```

`release.yml` 检查标签对应 `package.json`、建造和出版 通过信任的出版(OIDC). GitHub 中没有 npm 证书 。 见 [重新读取](https://npmcn.com/package/README.md) 第一次出版的每册手册.

## 常见问题

### @estiva-app/protocol 是什么？

Estiva 有线格式:巴斯-形状的诺斯特事件构建器,NIP-01 ids,NIP-19 naddr,NIP-98 HTTP auth,以及中继客户端\. 说协议; 解释什么\.

### 如何安装 @estiva-app/protocol？

在项目目录运行 npm install @estiva-app/protocol，或使用 pnpm add / yarn add / bun add。

### @estiva-app/protocol 支持 TypeScript 吗？

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

### @estiva-app/protocol 支持 ESM 还是 CommonJS？

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

### @estiva-app/protocol 需要什么版本的 Node\.js？

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

### @estiva-app/protocol 可以商用吗？

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

### @estiva-app/protocol 的下载量有多少？

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

### @estiva-app/protocol 还在维护吗？

最新版本 0\.58\.0 发布于 2026/11/14（今天）；至今共发布 67 个版本，其中过去 12 个月发布了 67 个；首次发布于 2026/08/27。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

