@blockcast/multicast-contract

中文文档
1.0.0发布于 2026/10/13MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 2152

循环断叶包 持有被冻结的v1窗口. 多播合同,其只读准备表面,以及可执行兼容套件. 零运行时间依赖性通过设计.

中文使用文档
文档目录6 节
  1. 一页看
  2. 有五样东西会咬你
  3. 准备情况
  4. 遵约
  5. 图标
  6. 正在同时安装 @blockcast/mmt-transport

@blockcast/multicast-contract

冰冻的V1 window.multicast 合同,其只读状态表面,以及 可执行兼容套件.

零运行时间依赖,故意. 此软件包是导入的汇 DAG,它阻止了 犬科全球宣言被拉入 一个包循环。 在此增加一个依赖性,特别是: @blockcast/shared 或者说 @blockcast/transport —— 重新创建此软件包存在的循环以打破和 将未发布的软件包拖入公共表面。 CI声称依赖性 设置保持为空.

一页看

import type { MulticastGateway, Subscription } from '@blockcast/multicast-contract';

// Feature-detect the GLOBAL, never its methods. The global is genuinely absent
// when no provider is installed; every member is required once it exists.
if (!window.multicast) throw new Error('no multicast provider installed');

const subscription = await window.multicast.subscribe({
  group: '232.0.0.99',   // IPv4 (IGMPv3) or IPv6 (MLDv2) literal
  port: 9876,
  source: '198.51.100.1', // omit for any-source multicast
  consume: 'bytes',
});

subscription.addEventListener('bytes', (event) => {
  // event.detail is an ArrayBuffer, always.
  decode(event.detail);
});
subscription.addEventListener('transportchange', (event) => {
  // 'native' | 'amt' — fires on every resolution, including failover.
  reportLeg(event.detail);
});

await subscription.unsubscribe();

有五样东西会咬你

  1. 比较错误代码, 永远不要 instanceof。 。 。 . 提供人跳是 JSON系列化,没有结构化克隆,所以 Error 子类丢失 中转中原型链. 使用 multicastErrorCodeOf(err)。 。 。 .
  2. not-ready 继续其事业 err.readiness代码里没有. 那边 是一个 not-ready 成员,不是每个原因一个:十向原因生活在 Readiness 记录err.readiness.code),这是相同的词汇 evaluateReadiness 返回。 因此,"不允许"读作 err.code === 'not-ready' && err.readiness?.code === 'network-permission-denied', (中文(简体) ), 故意与 network-permission-required - 那个 首先需要用户推翻拒绝,第二需要一个提示 尚未显示 . err.readiness 实值 undefined 提供商预定时间 此字段; 这意味着 不详永远 准备说明 origin-not-trusted 是一个单独的拒绝(页面来源,而不是OS本地网络访问),并且是 完全没有准备的密码.
  3. 随函附上 bytes 听者迅速. 最多 EARLY_BYTES_RETENTION_LIMIT (128) 在第一个有效载荷之前保留 随从听受. 溢出时 整个 前缀被删除——故意, 因为重放一个部分前缀,然后恢复现场发送会 编织出一条跨越真正不连续的无间隙流.
  4. origin 要求每个非成员参加. 一个装入的配置 relay编号 :relayPort 但是没有 origin: 'amt' 匹配遗留的 IP 多播 换成成员。 TypeScript 拒绝; plain JavaScript 默地倒回 本土多播并忽略了接力.
  5. 一个可选的能力字段,即 undefined 表示 不详没有 无。 。 。 . 提供者先于地. 将缺席视为"无" 禁用实际有效的运输工具.

准备情况

evaluateReadiness 纯粹是呼叫者提供观测的功能。 这个 报告; 它从不提示、 给予或打开窗口 关于已部署的系统,一个网关呼叫自动打开 a 供应商窗口,所以一个自我测试的准备状态 API会弹出一个窗口仅用于 被问到一个问题.

import { evaluateReadiness } from '@blockcast/multicast-contract';

const readiness = evaluateReadiness(observation);
if (!readiness.ready) console.warn(readiness.code, readiness.detail);

3个区分,结果类型分开,每个区分都向 崩溃时错误修正 :

  • provider-unobservable 对 provider-absent - 供应商检测是一种 火和遗忘探测器,没有内置的超时,所以在最后期限之前 相克相克,沉默不是判决.
  • udp-bind-unverified 对 udp-bind-failed ——提供方只尝试绑定 一旦两个许可,所以 udpBind 是三态和 null 表示 未尝试。 。 。 .
  • network-permission-required 对 network-permission-denied - 一个 unsupported 权限名称不是拒绝。 铬为它取名 不执行,本地网络名称在不同的 拼写.

iwa-not-installed 财务报告和审定财务报表 iwa-extension-disconnected 门 扩展 仅指地形键入 extensionResponded === true。两个现场提供者 不对称:扩展安装 window.multicast 时间 document_start 对IWA一无所知 然后通过IWA接通所有电话 global 的存在证明什么也没有; 桥式多填充安装 global 只有在连接之后, 所以存在已经意味着一个活桥和它 绝对不会说扩展。 测量两个地貌 将报告一个 健康的多填充后页为断开.

权威授权名称是 local-network 财务报告和审定财务报表 loopback-network。 。 。 . 年长者 local-network-access 别名报告 denied 健康系统 仅提供信息;以 describeLegacyPermissionAlias。 。 。 .

位置是可选的和外部订阅语义的. evaluateReadiness 从来没有咨询过它,和 runConformanceSuite 在每次跑道上标出分隔线 通过驱动独立 location-outside-readiness-suite 检查,哪个 扫描每个备战代码一个观察.

遵约

import { runConformanceSuite } from '@blockcast/multicast-contract/conformance';

const report = await runConformanceSuite(driver);
if (!report.conformant) console.error(report.checks.filter((c) => c.status !== 'pass'));

对照一个 ConformanceDriver,不反对浏览器,所以一个 “符合者”的定义涵盖浏览器提供者、参考假名和 iOS/Android适配器. 忽略可选控制钩的驱动程序使 需要它报告的检查 skipped - 和 跳过检查从不通过数字 : report.conformant 虚伪而无所观察.

FakeMulticastProvider 是一个符合参考标准的模拟提供者。 用这个 而不是手卷另一个 window.multicast stub; 它可以调用字节 通过与真正的运输相同的基数64跳, 所以消费者测试通过 反之亦能活过序列边界.

import { runConformanceSuite } from '@blockcast/multicast-contract/conformance';
import { FakeMulticastProvider } from '@blockcast/multicast-contract/fake-gateway';

const report = await runConformanceSuite(new FakeMulticastProvider());

图标

npm run typecheck   # tsc --noEmit
npm test            # node --test, no install of anything beyond typescript
npm run build       # emits dist/ with declarations

正在同时安装 @blockcast/mmt-transport

@blockcast/mmt-transport 自有船只 declare global 块 Window.multicast键入 WindowMulticastGateway此软件包已声明 相同的全球范围 MulticastGateway - 唯一能说明问题的宣言 两者在 一个TypeScript程序是宣告-相接冲突.

对照 @blockcast/mmt-transport 0.2.0、0.2.1和0.2.2(每个稳定 在TypeScript 5.9.3上发布至今):

您的代码skipLibCheck: falseskipLibCheck: true
读取 window.multicast; 此软件包首先导入TS2717干净
读取 window.multicast· ; mmt-transport 首次导入TS2717 + 键 TS2322TS2322,在自己的文件中
从不命名全局——使用 getGateway()TS2717干净

二事随顺.

TS2717 在安装两个软件包时是不可避免的. 据报 在一个依赖的 .d.ts和平常一样 skipLibCheck: true 压制之. 它不影响发射.

TS2322 是可避免的,而且不依赖进口订单来避免. 哪个 声明胜出 合并由整个模块加载顺序决定 程序,不是通过一个文件的导入列表,所以今天干净的构建可以中断 当添加一个无关的文件时。 相反,从不命名全局类型:使用 getGateway() 编号 : hasGateway() 从 @blockcast/multicast-browser,哪个 返回时 MulticastGateway | null。 。 。 .

import { getGateway } from '@blockcast/multicast-browser';

const gateway = getGateway();       // MulticastGateway | null
if (gateway) await gateway.subscribe(config);

没有 @blockcast/* 软件包取决于 mmt-transport因此它到达了你的树 只有你自己安装它——没有过渡路径.

版本与发布记录

@blockcast/multicast-contract 共发布 2 个版本,首次发布于 2026/09/20;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.0.0latest2026/10/1326 天前
0.0.02026/09/201 个月前

关于 @blockcast/multicast-contract 的常见问题

@blockcast/multicast-contract 是什么?

循环断叶包 持有被冻结的v1窗口. 多播合同,其只读准备表面,以及可执行兼容套件. 零运行时间依赖性通过设计.

如何安装 @blockcast/multicast-contract?

在项目目录运行 npm install @blockcast/multicast-contract,或使用 pnpm add / yarn add / bun add。

@blockcast/multicast-contract 支持 TypeScript 吗?

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

@blockcast/multicast-contract 支持 ESM 还是 CommonJS?

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

@blockcast/multicast-contract 可以商用吗?

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

@blockcast/multicast-contract 的下载量有多少?

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

@blockcast/multicast-contract 还在维护吗?

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