Skip to content

TapeAPI 1.0.0 — 第一个正式版 / First stable release

Choose a tag to compare

@BruceLanLan BruceLanLan released this 29 Sep 03:53
· 7 commits to main since this release

中文

TapeAPI 1.0.0 是第一个正式版(2026-09-29)。与 1.0.0-rc.5 相比,线上格式、SDK 与 server 的接口都没有变化;规范只改状态,
不改内容。

1.0 承诺什么

  • 1.0 起遵循语义化版本。 按 1.0 文档写的代码在所有 1.x 版本里都能继续工作;破坏性修改只在 2.0。新增内容(新的可选参数、
    新字段、新错误码)可能出现在任何次版本里。
  • 稳定: @tapeapi/sdk 与 @tapeapi/server 的全部导出、命令行工具 tapeapi-mcp 与 tapeapi-verify,以及公共服务
    (api.tapeapi.fun、relay.tapeapi.fun)的方法和结果格式,另有标注的除外。
  • 实验性(@experimental,可能在 1.x 次版本里改变,每次改变都写进更新日志):所有与付费有关的接口(TAP-22 付费通道、
    托管合约、凭证、api.payer()、maxPrice、api.tx 的通道构造函数、api.chain.escrow.*)、服务目录 ServiceDirectory,
    以及整个 @tapeapi/sdk/bus-privacy。从清单读取价格,以及错误码 PAYMENT_REQUIRED、BAD_VOUCHER、PRICE_CHANGED 是稳定的。
  • 内部: 标注 @internal 或未导出的内容。

完整清单、从 0.x 的改动与错误码表见升级到 1.0。

规范状态(TAP-1 §4.1)

  • TAP-20、TAP-21、TAP-23、TAP-26、TAP-27 自 2026-09-29 起为 Stable (v1)。 它们定义的字段、编码、签名域和错误码含义冻结;
    修订只能追加可选内容和非规范性文字;破坏性修改要作为 v2,并带自己的线上版本标记;v2 进入 Stable 满 12 个月之前不撤回 v1。
  • TAP-20 §3.5(ServiceDirectory)整节为实验性,不在冻结范围内;以标签作解析输入、serviceOf 比对和 verifyDelegation
    同属实验性。按名称、容器或 (circuits, tokenId) 解析不需要目录。
  • TAP-21 的错误码(包括 PAYMENT_REQUIRED、BAD_VOUCHER)随 TAP-21 一起冻结,虽然使用它们的付费流程在实验性的 TAP-22 里。
  • 不变:TAP-22、TAP-25 为实验性,TAP-24 已撤回,TAP-1 为 Draft。TAP 编号仍是向 TapeKit 维护者提议的编号,尚未正式分配。

候选版要点(rc.1 到 rc.5)

  • rc.1 接口冻结:新增 INVALID_ARGUMENT;TapeAPIError 顶层字段固定,细节放进 e.data;一批改名(service、
    relayClients / busClients、rpcTimeoutMs 等);createVerifyingFetch 能核验官方 SDK 读取的流;补齐 TAP-20 §6.1 主网清单与
    TAP-23 §6 测试向量,Python 独立验证器由 159 项增至 249 项。
  • rc.2 resolve() 由 7 轮 21 个请求降到 4 轮 12 个;修复同一张凭证可能被服务两次的问题。
  • rc.3 网站内置的 SDK 放进按内容哈希命名的目录,发布时不会新旧模块混用。
  • rc.4 最后两处错误码统一;写法不规范的计量路径改为拒绝,不再未经核验就放行。
  • rc.5 Cloudflare 中继把房间存进 Durable Object 存储,空闲房间不再丢帧。

安装

先装 SDK,再装 server(server 依赖同一版本的 @tapeapi/sdk):

npm install https://github.com/BruceLanLan/tapeapi/releases/download/v1.0.0/tapeapi-sdk-1.0.0.tgz
npm install https://github.com/BruceLanLan/tapeapi/releases/download/v1.0.0/tapeapi-server-1.0.0.tgz

从 1.0.0-rc.4 或 rc.5 升级不需要改代码。从 rc.1 到 rc.3 升级:没配 rpcUrls 的 server,以及 WebMCP 的 refresh() 和释放后的调用,
错误码改为 INVALID_ARGUMENT。从 0.x 升级见升级到 1.0。

如实说明

今天上线的一切都免费。付费托管合约没有部署,要先通过独立审计。所有代码和合约都没有经过第三方审计。TapeAPI 不发币。

点子来自 @Theairresearch;TapeAPI 未来任何收入的永久 10% 归提出者。

English

TapeAPI 1.0.0 is the first stable release (2026-09-29). Nothing on the wire and nothing in the interfaces of the SDK
and the server changed since 1.0.0-rc.5; the specifications change status, not content.

What 1.0 promises

  • Semantic versioning from 1.0.0 on. Code written against the 1.0 documentation keeps working in every 1.x
    release; a breaking change comes only in 2.0. Additions (a new optional option, a new field, a new error code) may
    come in any minor release.
  • Stable: every export of @tapeapi/sdk and @tapeapi/server, the command-line tools tapeapi-mcp and
    tapeapi-verify, and the methods and result shapes of the public services (api.tapeapi.fun, relay.tapeapi.fun),
    except what is marked otherwise.
  • Experimental (@experimental; may change in a 1.x minor release, each change in the changelog): everything that
    pays (TAP-22 payment channels, the escrow, vouchers, api.payer(), maxPrice, the channel builders of api.tx,
    api.chain.escrow.*), the ServiceDirectory, and the whole @tapeapi/sdk/bus-privacy subpath. Reading prices from a
    manifest and the codes PAYMENT_REQUIRED, BAD_VOUCHER and PRICE_CHANGED are Stable.
  • Internal: marked @internal, or not exported.

The full lists, what changed from 0.x and the error-code table: Upgrading to 1.0.

Specification statuses (TAP-1 §4.1)

  • TAP-20, TAP-21, TAP-23, TAP-26 and TAP-27 are Stable (v1) since 2026-09-29. Every field, encoding, signature
    domain and error code they define keeps its meaning; a revision may add only optional content and non-normative
    text; a breaking change is a v2 with its own wire markers, and v1 is not withdrawn earlier than 12 months after v2
    becomes Stable.
  • TAP-20 §3.5 (ServiceDirectory) is Experimental, outside the freeze, and so are a label as input to resolution, the
    serviceOf cross-check and verifyDelegation. Resolution by name, container or (circuits, tokenId) needs no
    directory.
  • TAP-21's error codes, PAYMENT_REQUIRED and BAD_VOUCHER among them, are frozen with TAP-21, although the
    payment flow that uses them is in TAP-22, which is Experimental.
  • Unchanged: TAP-22 and TAP-25 Experimental, TAP-24 Withdrawn, TAP-1 Draft. The TAP numbers are still proposals to the
    TapeKit maintainers, not yet assigned.

Release candidates, rc.1 to rc.5

  • rc.1, the interface freeze: INVALID_ARGUMENT; fixed TapeAPIError top-level fields, details in e.data; a set
    of renames (service, relayClients / busClients, rpcTimeoutMs, ...); createVerifyingFetch verifies the
    streams the official SDKs read; the TAP-20 §6.1 mainnet manifest and TAP-23 §6 vectors (the independent Python
    verifier went from 159 to 249 checks).
  • rc.2: resolve() in 4 round trips and 12 requests instead of 7 and 21; one voucher could be served twice (fixed).
  • rc.3: the website's vendored SDK lives in a content-hashed directory, so a release never mixes old and new modules.
  • rc.4: the last two error-code alignments; loosely written metered paths are refused instead of passed on
    unverified.
  • rc.5: the Cloudflare relay keeps its rooms in Durable Object storage, so idle rooms no longer lose frames.

Install

Install the SDK first, then the server (the server depends on the same version of @tapeapi/sdk):

npm install https://github.com/BruceLanLan/tapeapi/releases/download/v1.0.0/tapeapi-sdk-1.0.0.tgz
npm install https://github.com/BruceLanLan/tapeapi/releases/download/v1.0.0/tapeapi-server-1.0.0.tgz

From 1.0.0-rc.4 or rc.5: nothing to change. From rc.1 to rc.3: a server without rpcUrls, and WebMCP's refresh()
and calls after dispose, now raise INVALID_ARGUMENT. From 0.x: Upgrading to 1.0.

Plainly

Everything live today is free. The paid-call escrow is not deployed and will be only after an independent audit.
Nothing here has had a third-party audit. TapeAPI issues no token.

Idea by @Theairresearch; a permanent 10% of any future
TapeAPI revenue goes to the originator.