@adatechnology/notification-contracts

中文文档
0.3.0发布于 2026/10/29MITTypeScriptESM + CJS近 30 天下载 5577

Shared types, zod schemas, and port interfaces for the notification trio (contracts only — no runtime behavior)

原始使用文档
文档目录6 节
  1. Instalação
  2. O que traz
  3. DeliveryAttemptResult é união discriminada
  4. Invariantes
  5. Modelo padrão de e-mail ( notification.standard-email )
  6. Licença

@adatechnology/notification-contracts

Tipos, schemas zod e portas do trio de notificações. Sem comportamento de runtime — o módulo valida com ele, os drivers implementam as portas dele, o frontend tipa as chamadas com ele, e mudança de contrato quebra todos em compile-time em vez de em produção.

Única dependência: zod.

Instalação

bun add @adatechnology/notification-contracts

O que traz

ÁreaConteúdo
EntidadesNotification, Delivery, Device, Preference, Template, Suppression
CanaisNOTIFICATION_CHANNEL — inbox, push, email, whatsapp
Portas de driverPushDriverPort, EmailDriverPort, WhatsAppDriverPort, InboxDriverPort
Portas do hostRecipientResolverPort, QueuePort, RealtimeNotifierPort, LoggerPort
EntradasendNotificationSchema, registerDeviceSchema, updatePreferencesSchema, …
Eventoshooks de ciclo de vida da entrega
ErrosNotificationError e subclasses, com statusCode e code estáveis

DeliveryAttemptResult é união discriminada

type DeliveryAttemptResult =
  | { outcome: 'sent'; providerMessageId?: string }
  | { outcome: 'retriable'; errorCode: string; message: string }
  | { outcome: 'permanent'; errorCode: string; message: string }
  | { outcome: 'invalid-target'; errorCode: string; message: string }

Quem classifica é o driver, nunca o módulo: só ele conhece o vocabulário de erro do provedor. invalid-target é separado de permanent porque tem consequência própria — o device é desativado ou o e-mail entra na lista de supressão, em vez de a fila insistir para sempre num token morto.

Invariantes

  • companyId nunca entra em schema de corpo. Vem do contexto autenticado do host.
  • Nenhum tipo de HTTP aqui. Rota é assunto do @adatechnology/module-http; este pacote é domínio. Um contracts que conhece a palavra "rota" acaba amarrado ao transporte.
  • Nenhuma porta valida token. O host resolve identidade e entrega pronta (security.md §2).
  • Alvo de entrega (telefone, e-mail) nunca aparece cru em log — ver maskTarget/hashTarget no módulo.

Modelo padrão de e-mail (notification.standard-email)

Moldura única de todo e-mail do sistema (canal email, locale pt-BR). Identidade (logo e nome), assinante e rodapé são marcação do modelo, com variáveis — a empresa edita o HTML, não o código.

  • Variáveis do sistema (HTML montado e escapado pelo sistema, usadas só pelo nome): STANDARD_EMAIL_SYSTEM_HTML_VARIABLES (logoEmpresa, corpoMensagem, listaAnexos, faixaResposta, marcasRodape). O resto é texto, escapado por valor.
  • Obrigatórias: STANDARD_EMAIL_REQUIRED_VARIABLES (corpo, logo, nome da empresa, assinante, rodapé da plataforma, marcas). Modelo sem uma delas é inutilizável.
  • Nenhuma variável em atributo ou style — findUnsafeEmailHtml recusa.
  • assessStandardEmailTemplate(html) → { usable, missing, unsafe }; renderStandardEmail renderiza com texto puro (htmlToPlainText) e tooLarge acima de STANDARD_EMAIL_HTML_MAX_BYTES. STANDARD_EMAIL_BUILTIN_TEMPLATE é o embutido (source: 'builtin', version: 0).
  • Regras genéricas de e-mail HTML (reusáveis fora do padrão): findUnsafeEmailHtml (regras event, placeholder_in_tag, scheme, tag), htmlToPlainText, escapeEmailHtml, interpolateEmailHtml, buildInitials, renderEmailLogoHtml, renderEmailMarksHtml, STANDARD_EMAIL_THEME.

Licença

MIT © Ada Technology

版本与发布记录

@adatechnology/notification-contracts 共发布 10 个版本,首次发布于 2026/08/04;过去 12 个月发布了 10 个版本。

版本发布日期距今
0.3.0latest2026/10/299 天前
0.2.12026/10/1919 天前
0.2.02026/10/1919 天前
0.1.02026/09/022 个月前
0.1.0-rc.6rc2026/08/252 个月前
0.1.0-rc.52026/08/252 个月前

关于 @adatechnology/notification-contracts 的常见问题

@adatechnology/notification-contracts 是什么?

Shared types, zod schemas, and port interfaces for the notification trio (contracts only — no runtime behavior)

如何安装 @adatechnology/notification-contracts?

在项目目录运行 npm install @adatechnology/notification-contracts,或使用 pnpm add / yarn add / bun add。

@adatechnology/notification-contracts 支持 TypeScript 吗?

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

@adatechnology/notification-contracts 支持 ESM 还是 CommonJS?

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

@adatechnology/notification-contracts 可以商用吗?

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

@adatechnology/notification-contracts 的下载量有多少?

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

@adatechnology/notification-contracts 还在维护吗?

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