@bsv/payment-express-middleware

中文文档
2.1.11发布于 2026/10/28SEE LICENSE IN LICENSE.txtTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 1.6万

BSV 区块链服务货币化快取中件

中文使用文档
文档目录14 节
  1. 所需资源
  2. 安装
  3. 基本用途
  4. 流动
  5. 选项
  6. 重放存储
  7. 收款
  8. 错误行为
  9. 公共服务和浏览器访问
  10. 安全说明
  11. API 密码
  12. 发展
  13. 许可证
  14. SDK4 热补丁对等要求

@bsv/ paying- sext-middleware (中文(简体) )

补丁候选人 2.1.11 更新打包的第一当事方运行时间或开发依赖范围。 此只使用元数据补丁保存了公共API,对等范围,有线格式和默认. 不需要额外的消费者或数据迁移;早期的迁移指南仍然适用.

为已认证的遗产提供中间软件 x-bsv-payment JSON流传. 这个 运行后 @bsv/auth-express-middleware,发布 HTTP 402 挑战, 验证 Atomic BEEF 交易, 解剖时拒绝再利用交易 ID,内化输出为0,并曝光经核实的付款收据.

该议定书不同于在下列文书中新近实施的BRC-121 @bsv/402-pay。故意选择一个协议;其标题和客户端 合同不可互换.

2.1.8版本删除了中间软件付款头的上限. 已经有一个信头 从客户端收到的付款经过解析,其付款无论大小都经过核实. HTTP 服务器、 CDN、 代理和WAF 配置自有运输预算; 配置 并验证支持付款证明的全部路径。 堕落者 maxPaymentHeaderBytes 选项仍然为源兼容性所接受,但 忽略,包括旧应用程序仍然提供值。 移动任意 用于 HTTP 服务器或边缘的预定运输策略,并删除此选项.

原子BEEF验证、犬类基础64、衍生物核查、付款 定价、钱包接受和原子重放保护仍然适用。 无效 付款内容被拒绝。 SDK 2.8.5 提高客户头容量; 并不限制此中间软件从其他兼容性接受的内容 客户。 不需要BRC100呼叫,电线或钱包数据迁移. 来源 发布是一个单独的保护发布步骤.

所需资源

  • 22号节点或更新
  • 4.18快车或更新车,包括快车5
  • @bsv/auth-express-middleware 在中间的软件链上
  • 执行 BRC- 100 钱包 internalizeAction

一揽子船舶原生无害环境管理和共同JS的切入点,包括申报 两个模块系统.

安装

npm install @bsv/payment-express-middleware @bsv/auth-express-middleware @bsv/sdk express

Express是一种对等依赖,所以中间软件使用应用程序的单相 快跑时间和类型图. 这可防止重复的快递设施 从制作 PaymentRequest 或返回的与 应用程序的路由类型.

基本用途

import express from 'express'
import { createAuthMiddleware } from '@bsv/auth-express-middleware'
import { createPaymentMiddleware, type PaymentRequest } from '@bsv/payment-express-middleware'

const app = express()

app.use(express.json())
app.use(createAuthMiddleware({ wallet }))
app.use(
  createPaymentMiddleware({
    wallet,
    calculateRequestPrice(req) {
      if (req.path === '/free') return 0
      if (req.path === '/premium') return 500
      return 100
    },
    replayStore
  })
)

app.get('/premium', (req: PaymentRequest, res) => {
  res.json({
    accepted: req.payment?.accepted,
    satoshisPaid: req.payment?.satoshisPaid,
    txid: req.payment?.txid
  })
})

价格必须 0 或正安全整数。 零费用请求继续进行 并附有可接受的零值收据。 无效或失败的定价返回稳定 500 答复,绝不授权请求.

流动

  1. 认证中间软件验证对等点并提供压缩 req.auth.identityKey。 。 。 .

  2. calculateRequestPrice 返回所需的 stoshis.

  3. 若无 x-bsv-payment 页眉已存在, 中间软件返回 402 改为:

    • x-bsv-payment-version: 1.0
    • x-bsv-payment-satoshis-required
    • x-bsv-payment-derivation-prefix
  4. 客户端用一个JSON头重试:

    {
      "derivationPrefix": "<canonical-base64>",
      "derivationSuffix": "<canonical-base64>",
      "transaction": "<base64-atomic-beef>"
    }
    
  5. 中间软件对收到的信头进行解析,验证衍生 前缀, 剖析 Atomic BEEF 交易, 减少遗留的超包容性 申报对象的信封及其依赖性关闭,并要求 输出为零以覆盖当前价格.

  6. 钱包必须验证并新接受汇款 { accepted: true } 从 internalizeAction。合并/重播类似或错误 结果不授权路径.

  7. 只有在钱包验证后,中间软件才在解析时声称 交易编号。 防止与a配对的无效衍生材料 毒害回放店的公开交易.

  8. next() 运行与 req.payment,以及 x-bsv-payment-satoshis-paid 报告实际产出值.

钱包判决必须曝光 accepted 和可选 isMerge 作为自己的数据 属性; 继承或获取者支持的权力被拒绝, 不 利用进入者。 格式不当、重复、资金不足、被拒绝或含糊不清 付款从不打电话 next。 。 。 .

选项

const payment = createPaymentMiddleware({
  wallet,
  calculateRequestPrice,
  replayStore,
  logger
})
  • wallet 需要并且必须提供 internalizeAction。 。 。 .
  • calculateRequestPrice 可能是同步或同步,默认为 100个佐藤.
  • replayStore 必须执行原子 claim(transactionId): boolean | Promise<boolean>返回时返回 false 若为 交易已被使用 .
  • maxPaymentHeaderBytes ; 标题预算属于 hTTP 服务器或边缘.
  • logger 可提供 error 财务报告和审定财务报表 warn 方法。 。 。 内部故障发送 作为结构化上下文,但从未在HTTP回复中被曝光.

启动时无效的选项类型失败 .

重放存储

InMemoryPaymentReplayStore 是安全的单一进程默认值。 它会:

  • 在一个过程中对每笔交易进行一次解析;
  • 仅记录报告为新接受的钱包的交易;
  • 在达到固定能力而不是驱逐时拒绝新的索赔要求 旧的重放标记;以及
  • 当进程重新启动时,丢失所有索赔.

其默认容量为10万索赔. 适用于试验和 捆绑的单流程服务,而非横向规模或持久性 部署.

生产服务应注入一个数据库支持的共用耐用储存库 或 缓存原始,带有原子插入-if-缺漏语义:

const replayStore = {
  async claim(transactionId: string) {
    return await database.insertPaymentClaimIfAbsent(transactionId)
  }
}

不执行 claim 作为单独的读写操作。 继续重放 至少只要交易可以接受 再来一次 衍生非ce 证明服务器创建了前缀; 它不是 已过期的单用途重放数据库.

收款

经批准后:

interface PaymentReceipt {
  satoshisPaid: number
  accepted: true
  tx: string
  txid: string
}

satoshisPaid 是输出零的实际值,可能大于 要求的价格。 免费申请为零 tx编号 :txid 为空.

错误行为

状态代码含义
400个ERR_MALFORMED_PAYMENT信头重复、 大小过大、 JSON 无效, 或有无效字段
400个ERR_INVALID_DERIVATION_PREFIX服务器没有创建所提供前缀
400个ERR_INVALID_PAYMENT原子 BEEF 无效或输出为0 资金不足
400个ERR_PAYMENT_FAILED钱包无法接受支付
402 (韩语)ERR_PAYMENT_REQUIRED对付款提出质疑
409个ERR_PAYMENT_REPLAYED交易已经提出或未被新接受
500个ERR_SERVER_MISCONFIGUREDAuth 中间软件未提供有效身份
500个ERR_PAYMENT_INTERNAL定价失败或返回无效值
第503条ERR_PAYMENT_UNAVAILABLE无法创建挑战或重放存储

公用错误故意省略钱包、回放存储和定价例外 留言.

公共服务和浏览器访问

此中件不强制CORS或CSP. 可保留公共支付服务 在默认情况下交叉来源,而操作员可选择配置一个允许列表 应用程序或边缘层。 浏览器客户端需要 x-bsv-payment-* 通过 CORS 曝光的响应头 。 永不将通配符来源与 (原始内容存档于2018-09-26). Credited CORS.

安全说明

  • 使用 HTTPS; 付款和身份头不是机密层 .
  • 首先运行认证,然后运行授权/支付路径 中间软件功能.
  • 使用持久的原子回放存储,用于多个过程或复制.
  • 钱包错误和拒收汇款从未被插入回放 存储; 及时调查一个无法播放的再播放存储, 因为钱包 可能已经在独立大门前接受了交易.
  • 监视器 409 财务报告和审定财务报表 503 利率和重放容量.
  • 将定价视为安全敏感、决定性的要求政策.
  • 钱包继续负责验证和安全内置 提供BRC-29汇款.
  • 应用正常的请求/标题限制和在服务边缘限制的速率.
  • 锁定失败被控制,不能中断付款授权或 更改 HTTP 结果 .

API 密码

运行时间导出 :

  • createPaymentMiddleware
  • InMemoryPaymentReplayStore

出口类型 :

  • BSVPayment
  • PaymentLogger
  • PaymentMiddlewareOptions
  • PaymentReceipt
  • PaymentReplayStore
  • PaymentRequest

见 API.md (英语) 用于生成的签名.

发展

pnpm typecheck
pnpm lint
pnpm format:check
pnpm test:coverage
pnpm pack:check

测试套房是决定性的,不叫公共API. pack:check 建立和验证无害环境管理和共同JS中准确的npm沥青球 消费者探测器 测试不重建包作为副作用.

许可证

当前 TS Stack 更改根据 Open BSV 许可证版本 6 获得许可; 参见 LICENSE.txt (英语)。该软件包还保留了统一前代码 在开放BSV许可证版本4下. 补给者必须保留 第三次议会 NoTICES.md 和适用的文本在 LICENSES/。 。 。 .

SDK4 热补丁对等要求

SDK4 对等替代开始于 @bsv/sdk ^4.0.1,恢复数字 钱包结果和遗留线条相容性。 现有的SDK2/3替代品和 下限不变。 SDK4 用户应安装 4. 0.1 个热补丁; 不 需要应用程序-wallet线或数据迁移.

版本与发布记录

@bsv/payment-express-middleware 共发布 27 个版本,首次发布于 2025/01/07;过去 12 个月发布了 15 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.1.11latest2026/10/2811 天前
2.1.102026/10/2415 天前
2.1.92026/10/031 个月前
2.1.82026/09/251 个月前
2.1.72026/09/231 个月前
2.1.62026/08/282 个月前

其他发布通道:next → 2.0.0-beta.0。

关于 @bsv/payment-express-middleware 的常见问题

@bsv/payment-express-middleware 是什么?

BSV 区块链服务货币化快取中件

如何安装 @bsv/payment-express-middleware?

在项目目录运行 npm install @bsv/payment-express-middleware,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:express(>=4.18.0 <6)、@bsv/sdk(^2.1.6 || ^3.0.0 || ^4.0.1)、@types/express(>=4.17.0 <6)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bsv/payment-express-middleware 支持 TypeScript 吗?

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

@bsv/payment-express-middleware 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@bsv/payment-express-middleware 需要什么版本的 Node.js?

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

@bsv/payment-express-middleware 可以商用吗?

@bsv/payment-express-middleware 使用 SEE LICENSE IN LICENSE.txt 许可。许可条款写在包内的独立文件中,请阅读该文件确认可否商用。以上为概括,不构成法律意见,请以许可原文为准。

@bsv/payment-express-middleware 的下载量有多少?

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

@bsv/payment-express-middleware 还在维护吗?

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