@ actionledger/nano-gateway (英语)
轻量级, 允许的SSE + 读取网关 纳米 轻节点客户端.
为什么会这样
活动核心( E)@activeledger/activecore前为 packages/core,在 5.0.0 中被移除)是纳米最初计划的数据源,但它不是运行在devnet上 这是针对, 以及它的SSE控制器(controllers/sse.ts)写作反对节点生平 http.IncomingMessage编号 :ServerResponse API - (英语) res.setHeader(), (中文(简体) ), res.write(), (中文(简体) ), res.flushHeaders(), (中文(简体) ), req.socket.setTimeout()编辑 @activeledger/httpd 今天的轮船实际上是建立在 uWebSockets.js (通过阅读其出版物确认) lib/httpd.js,没有假设) - 路由处理器获得生uWS HttpResponse,它没有这些方法。 Activecore的SSE路径如果被引用来反对,会立即抛出. 这很可能是Activecore不可靠 独立于其他任何事物的真正和长期的原因.
这个包是一个小得多的,目的建造的替换, 仅仅满足纳米的需求: 一个被允许的SSE订阅端点, 而少数读取纳米的迷你-SPI需求. 它的模型直接打开 packages/hybrid - 通过 ActiveDSConnect与真正的节点并列.
这里"允许"是什么意思
任何人都能读(GET /api/stream/*, (中文(简体) ), POST /api/stream, (中文(简体) ), GET /api/tx/*)——分类账数据按设计公开,与Activecore工作方式不变. 只有 订阅/推倒通道 被锁定: 纳米必须在这个网关的许可名单上, 并且必须证明它持有其声称的身份的私人钥匙, 在它得到直播之前。 见 src/auth.ts。 。 。 .
握手:纳米标志 ${identity}:${timestamp} 带有自己的密钥(它在本分类账上已经登入的同一身份,并标出证明交易的 - 没有单独的密钥分配步骤)并发送 {identity, timestamp, signature} 在订阅请求正文中。 网关检查, 顺序为: 许可列表中的这个身份 - > 是时间戳新鲜度( 在 authWindowSeconds,反重放) - > 签名是否对公钥进行实际验证 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}他们自己活下来的 :stream 元文件 (单位:千美元)meta.authorities[].public- 不是把钥匙交给乐队的网关 撤销纳米只是从允许列表文件中去除.
Auth在POST身体中旅行,而不是头- @activeledger/httpd是因为 listen() 只向路由处理器转发一组固定的硬码头( 读取源头确认) , 并自定义 x-nano-* 信头永远不会到.
配置
第一次运行,一个 config.json (从) src/default.config.json和一个空的 nano-allowlist.json (单位:千美元)[])是在运行二进制的任何地方创建的。 在您将身份添加到许可列表之前, 无法连接 :
[
{ "identity": "abc123...", "label": "adam's phone", "addedAt": 1788000000000 }
]
密钥配置字段( E)config.json:
db.url编号 :db.database- 说吧 你必须填这个. 指向同一数据存储所, 您的 Activeledger 节点已经使用( 它的自主机端口, 或它的 CouchDB 兼容商店的住址 ) 。 这个软件包并不知道 如何拖出一个数据存储本身,不像activehybrid是因为selfhost选项 - 它意在与已经运行的节点一起运行.host- 说吧0.0.0.0:5270默认。 如果5270与主机上的其他东西相撞.nanoGateway.allowlist- 允许列表文件的路径 .nanoGateway.authWindowSeconds- 默认60。 。 。 .nanoGateway.heartbeatSeconds- 默认5。故意短:uWS的默认闲置超时为~10s没有套接字流量,远短于Activecore自己的10个分钟 SSE 心跳( 秒数 )packages/core/src/heartbeat.ts——这种不匹配是Activecore的SSE即使运行地点也不可靠的另一个独立可信的原因. 不先检查UWS闲置超时,不要提起这个.
路线
GET / health check
POST /api/activity/subscribe SSE, permissioned - body: {identity, timestamp, signature, streamIds}
POST /api/stream batch read - body: string[] of stream ids -> {streams: [...]}
GET /api/stream/:id single read -> {stream: {...} | null}
GET /api/tx/:umid transaction lookup -> {transaction: {...} | null}
/api/stream 财务报告和审定财务报表 /api/tx/:umid 为: 没有 与 Activecore 的等同物相兼容的电线 - 两者都有真正的bug 发现这个会话,同时在 Activecore 的实际源头上构建了纳米客户端(Activecore )getStream() 滴数 _id 从其通过逗号表达错误的反应中; findUmid() 命名其响应字段 umid 当值是整个交易,而不是一个 umid 字符串时。 新代码也没有继承. 纳米公司自己的客户端( U)@activenano/core是因为 MiniSpiClient编号 :TransactionResolver)写作反对 这个 包的合同.
重新连接/ 恢复
每个被推出的框架由它从下面产生的 DB 变化序列来编号( )id:{seq} 在SSE框架上,与Activecore的自有SSE相同. 一个客户端重新连接到一个 Last-Event-ID 头条恢复从该点开始的更改种子, 而不是在断开时忽略任何更改 - Last-Event-ID 是固定标题之一 @activeledger/httpd 与自定义的认证头不同的是,它必须经由车体。 没有标题( 或带有新流代码集的新订阅) 起始于 "now"和以前一样. @activenano/core是因为 NanoLedgerEvents 客户端会自动这样做 - 查看自己的 doc 注释 .
在一个运行的节点旁边部署这个
npm install -g @activeledger/nano-gateway(一旦出版)或从源(npm run build,则node lib/index.js) (中文(简体) ).- 在与您节点相同的主机上运行,或者在网络接入节点真实数据存储器的任何地方运行. 第一次运行生成
config.json- 编辑db.url编号 :db.database在真正开始之前. - 将核准的纳米身份添加到
nano-allowlist.json因为他们是供养的. - 显示端口( O)
5270默认情况下),与节点自身端口已经被曝光的方式相同——多克端口映射和nginxlocation块代理到它( SSE 需要)proxy_buffering off;和长proxy_read_timeout- 标准nginx SSE配置, 而不是任何纳米门道特定.
一旦承诺并发布,它将用自己的本件作为自己的包出版(nano-gateway),因此它可以作为同节点在同一容器中进行的兄弟会过程来运行.