# @krizaka/notifications 中文文档

规范地址：https://npmcn.com/package/%40krizaka/notifications/

版本：0\.2\.3
npm 元数据更新时间：2026-11-01T14:49:42.711Z
中文译文更新时间：2026-11-01T16:42:08.221Z
软件包许可：Apache-2\.0

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40krizaka/notifications
原文对照：https://npmcn.com/package/%40krizaka/notifications/?lang=original
项目主页：https://github.com/krizaka/krizaka-ts/tree/main/packages/notifications
源码仓库：https://github.com/krizaka/krizaka-ts

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：133 kB，17 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：3 个
- peer 依赖：zod \>=3\.23，vitest \>=4
- 首次发布：2026-10-27T01:10:51.466Z
- 最新版本发布：2026-11-01T14:49:42.409Z
- 已发布版本数：5（近 12 个月 5 个）

## 中文简介

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

## 安装

```sh
npm install @krizaka/notifications
```

也可以使用：`pnpm add @krizaka/notifications`、`yarn add @krizaka/notifications`、`bun add @krizaka/notifications`

## README

# @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` 应用保留。

```ts
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 是什么？

每个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 和提交记录判断。

