@krizaka/notifications

中文文档
0.2.3发布于 2026/11/01Apache-2.0TypeScriptES Module构建来源已验证

每个Krizaka产品的铃声、渠道和偏好:一个notify()会写入应用内项目,并为每个启用的渠道(电子邮件、每个设备推送、实时)添加一个发件箱消息,尊重账户按渠道和类别的分类矩阵

中文使用文档

@krizaka /通知

铃声,渠道和每一个Krizaka产品的偏好。一个 notify 写入应用内项目,并在每个启用的通道中附加一个发件箱消息,尊重帐户的矩阵和每个类别的突发上限。没有推送或实时导入(传递通道的工人是产品的),没有数据库客户端,没有挂钟。

  • 频道。 app (铃声和现场事件的打开页,一个开关), push (每台注册设备一条消息)和 email. 发件箱主题是 notifications.live, notifications.push 和 notifications.email;事件是 evt.notification.requested.v1爪哇的名字和形状 krizaka-notifications-api 请求(channel, recipient, template, locale, variables,加上id; channel 是 EMAIL, PUSH / LIVE 对于网络)。产品使用自己的worker()传递电子邮件。@krizaka/email 呈现, @krizaka/mail 进入队列)或让Java服务使用它。
  • 产品声明它的类别 它们的默认值(notificationSettings(declared) 是注册表片段);管理员在不重新部署的情况下调整默认通道和上限。一个 locked 类别(安全,帐户)不能被任何人关闭。
  • 帽。 后 burstMax 一个类别的通知到一个帐户内 burstWindowSeconds,下一个是bell-only:项目被保留,没有通道被使用。计数和插入操作在每个帐户和类别的事务级咨询锁下运行,因此在并发性下,上限在 notify 获取来电者的号码 tx.
  • 幂等。 dedupeKey 使一个事实成为一个通知;发件箱消息id来自项目,因此重试追加是不操作的。
  • 门铃。 list (最新优先,游标), unreadCount, markRead (账户本身的项目;第一 read_at 保持)。一个项目 app 频道被关是为了保存历史和封盖,从未展示过。
  • 偏好。 preferences (每个类别按通道及其来源:默认,帐户,锁定), setPreference, setMatrix (预设应用)。
  • 设备。 registerDevice (一个代币属于一个账户;再次注册它会移动它), revokeDevice 当推送服务拒绝时。
  • 隐私。 模块没有地址(产品通过) email 每个电话); erase(accountId) 删除项目、选择和设备; purge 应用保留。
import { createOutbox } from "@krizaka/outbox";
import { createNotifications, dbNotificationStore } from "@krizaka/notifications";
import { notificationSettings, readNotificationConfig } from "@krizaka/notifications/settings";

const declared = {
  messages: { defaults: { app: true, push: true, email: true }, burst: { max: 5, windowSeconds: 3600 } },
  follows: { defaults: { app: true, push: false, email: false } },
  account: { locked: true, defaults: { app: true, push: true, email: true } },
};
// settingsRegistry = { ...otherSettings, ...notificationSettings(declared) }

const notifications = createNotifications({
  clock,
  outbox: createOutbox({ clock, settings: outboxSettings }),
  config: () => readNotificationConfig(declared, (key) => settings.get(key)),
});

// in the use case's transaction
await notifications.notify(tx, { accountId, category: "messages", template: "new-message", variables: { name }, locale: "fr", email, dedupeKey: `message:${messageId}` });

表(模式 notifications, notificationsSchema): item, preference, device. notificationStoreContract (@krizaka/notifications/testkit)是每家商店都遵守的合同。

apache - 2.0。

版本与发布记录

@krizaka/notifications 共发布 5 个版本,首次发布于 2026/10/27;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.2.3latest2026/11/011 天前
0.2.22026/10/304 天前
0.2.12026/10/295 天前
0.2.02026/10/277 天前
0.0.0-stage2026/10/277 天前

关于 @krizaka/notifications 的常见问题

@krizaka/notifications 是什么?

每个Krizaka产品的铃声、渠道和偏好:一个notify()会写入应用内项目,并为每个启用的渠道(电子邮件、每个设备推送、实时)添加一个发件箱消息,尊重账户按渠道和类别的分类矩阵

如何安装 @krizaka/notifications?

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

@krizaka/notifications 支持 TypeScript 吗?

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

@krizaka/notifications 支持 ESM 还是 CommonJS?

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

@krizaka/notifications 需要什么版本的 Node.js?

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

@krizaka/notifications 可以商用吗?

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

@krizaka/notifications 还在维护吗?

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