@bimetal/channel

中文文档
0.42.0发布于 2026/10/30Apache-2.0TypeScriptES Module零依赖近 30 天下载 8428

Generic pluggable notification-channel abstraction. Domain-agnostic send-to-recipient with a capability model and a zero-dependency template renderer. In-process default, external adapters (Webhook, Slack, Email, SMS, …) implement the same Channel interfa

原始使用文档
文档目录8 节
  1. Installation
  2. What's Inside
  3. Types
  4. Default-Template (zero-dep)
  5. In-Process-Default
  6. Geteilter HTTP-Helfer (für die HTTP-Adapter)
  7. Designprinzipien
  8. License

@bimetal/channel

Generic pluggable notification-channel abstraction. Domain-agnostic „send-to-recipient" mit Capability-Modell + abhängigkeitsfreiem Template-Renderer. In-Process-Default; externe Adapter (Webhook, Slack, Email, SMS, …) implementieren das gleiche Interface.

Zero external dependencies. Zero @bimetal/* dependencies. Standort im Stack neben @bimetal/broker: beide sind Transport-Primitive, keine domain-spezifischen Packages.

Installation

npm install @bimetal/channel

What's Inside

Types

  • Channel<TMessage = ChannelMessage> — send(recipient, message), capabilities, optional close(). Adapter hängen NUR hieran, nicht am Alerting-Kern.
  • ChannelMessage — { subject?, body, meta? }. Pre-rendert; der Channel schickt sie unverändert.
  • ChannelCapabilities — { batch, retries }. Einzige Quelle der Wahrheit für Adapter-Fähigkeiten.
  • Recipient, Template

Default-Template (zero-dep)

  • interpolate(template, data) — minimaler {{pfad}}-Renderer, prototype-sicher (Object.hasOwn). Bewusst kein Handlebars/Mustache — das verletzt „zero external deps". Eine App klinkt einen eigenen Renderer über das Template-Interface ein.
  • defaultTemplate — Template-Implementierung über interpolate.

In-Process-Default

  • createInProcessChannel(options?) — Test-Collector mit sent() / clear(); optionaler fail-Hook simuliert Zustellfehler. Beweist die Verdrahtung ohne Netzwerk/Credentials.

Geteilter HTTP-Helfer (für die HTTP-Adapter)

  • httpSend(req, options?) — POST über das fetch-Global; fetch ist injizierbar (HttpSendOptions.fetch), also unit-testbar ohne Netzwerk. Per-Request-Timeout via AbortController (timeoutMs, Default 10s) — ein hängender Provider blockiert nie den Orchestrator-Tick.
  • ChannelHttpError — Zustellfehler mit HTTP-Status. .message ist body-frei (HTTP <status>) — sicher zum Persistieren in einem Event-Log; der gekappte Provider-Body liegt nur auf .detail (transiente Diagnose). Hält Credential-/PII-Echos aus unveränderlichen Logs heraus.

Designprinzipien

  • Generic over TMessage: kein DomainEvent-/Alert-Lock-in. Der Channel kennt weder Event-Sourcing noch Kalender.
  • Capabilities zuerst: Adapter-Unterschiede (batch, retries) werden explizit kommuniziert, nicht durch An-/Abwesenheit von Methoden.
  • Body-freie Fehler: ein non-2xx wirft ChannelHttpError mit body-freier message — die Security-Eigenschaft, auf der der Alerting-Fehlervertrag aufsetzt.
  • Zero-dep Template: der Default-Renderer ist absichtlich minimal; mächtigere Engines sind App-Sache über das Interface.

License

Apache License 2.0

版本与发布记录

@bimetal/channel 共发布 15 个版本,首次发布于 2026/07/16;过去 12 个月发布了 15 个版本。

版本发布日期距今
0.42.0latest2026/10/309 天前
0.41.02026/10/2415 天前
0.40.02026/10/1128 天前
0.39.02026/10/061 个月前
0.38.02026/10/041 个月前
0.37.02026/09/131 个月前

其他发布通道:next → 1.0.0-rc.3。

关于 @bimetal/channel 的常见问题

@bimetal/channel 是什么?

Generic pluggable notification-channel abstraction. Domain-agnostic send-to-recipient with a capability model and a zero-dependency template renderer. In-process default, external adapters (Webhook, Slack, Email, SMS, …) implement the same Channel interfa

如何安装 @bimetal/channel?

在项目目录运行 npm install @bimetal/channel,或使用 pnpm add / yarn add / bun add。

@bimetal/channel 支持 TypeScript 吗?

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

@bimetal/channel 支持 ESM 还是 CommonJS?

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

@bimetal/channel 可以商用吗?

@bimetal/channel 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bimetal/channel 的下载量有多少?

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

@bimetal/channel 还在维护吗?

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