@rei-standard/amsg-server
v2.0.1
Published
ReiStandard Active Messaging server SDK with pluggable database adapters
Readme
@rei-standard/amsg-server
@rei-standard/amsg-server 是 ReiStandard 主动消息标准的服务端 SDK(v2.0.1),提供 Blob 租户配置、租户 token 鉴权和标准路由处理器。
v2.0.1 变更摘要
- 初始化流程合并为
POST /api/v1/init-tenant - 移除旧端点:
init-database、init-master-key - 业务端点统一使用
Authorization: Bearer <tenantToken> send-notifications支持cronToken(Header 或 query token)
安装
npm install @rei-standard/amsg-server web-push @netlify/blobs
# 数据库驱动二选一
npm install @neondatabase/serverless
# 或
npm install pg快速使用
import { createReiServer } from '@rei-standard/amsg-server';
const rei = await createReiServer({
vapid: {
email: process.env.VAPID_EMAIL,
publicKey: process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY,
privateKey: process.env.VAPID_PRIVATE_KEY
},
tenant: {
blobNamespace: 'rei-tenants',
kek: process.env.TENANT_CONFIG_KEK,
tokenSigningKey: process.env.TENANT_TOKEN_SIGNING_KEY,
initSecret: process.env.INIT_SECRET,
publicBaseUrl: process.env.PUBLIC_BASE_URL
}
});
// 映射路由
// POST /api/v1/init-tenant -> rei.handlers.initTenant.POST
// GET /api/v1/get-user-key -> rei.handlers.getUserKey.GET
// POST /api/v1/schedule-message -> rei.handlers.scheduleMessage.POST
// POST /api/v1/send-notifications -> rei.handlers.sendNotifications.POST
// PUT /api/v1/update-message -> rei.handlers.updateMessage.PUT
// DELETE /api/v1/cancel-message -> rei.handlers.cancelMessage.DELETE
// GET /api/v1/messages -> rei.handlers.messages.GETAI 接口 apiUrl 约束
当 messageType 为 prompted / auto,或 instant 使用 AI 配置时:
apiUrl必须是完整聊天端点(例如:https://api.openai.com/v1/chat/completions)。- SDK 会自动做最小规范化:去首尾空白、去路径尾部多余
/。 - SDK 不会自动补全
/v1、/chat/completions等路径。 maxTokens为可选字段:传了就映射为max_tokens;不传则不指定(由上游模型默认策略决定)。
如果上游返回 405 Method Not Allowed,通常表示 apiUrl 指向了基础域名而非聊天端点,请优先检查配置值。
一体化初始化流程
- 管理员配置环境变量(VAPID + tenant secrets)
- 租户调用
POST /api/v1/init-tenant提交自己的databaseUrl - 服务端自动完成:建表 + 生成 masterKey + 写入 Blob + 返回
tenantToken/cronToken - 前端使用
tenantToken,cron 使用cronToken
端点鉴权
get-user-key、schedule-message、update-message、cancel-message、messagesAuthorization: Bearer <tenantToken>
send-notificationsAuthorization: Bearer <cronToken>或?token=<cronToken>
导出 API(Exports)
createReiServercreateAdaptercreateTenantTokenverifyTenantTokenderiveUserEncryptionKeydecryptPayloadencryptForStoragedecryptFromStoragevalidateScheduleMessagePayloadisValidISO8601isValidUrlisValidUUIDisValidUUIDv4
运行环境与要求
- Node.js
>=20 - 必须安装
web-push - 必须安装
@netlify/blobs - 必须安装至少一个数据库驱动(
@neondatabase/serverless或pg) - 必须配置:
VAPID_EMAILNEXT_PUBLIC_VAPID_PUBLIC_KEYVAPID_PRIVATE_KEYTENANT_CONFIG_KEKTENANT_TOKEN_SIGNING_KEY
- 可选配置:
INIT_SECRET(配置后init-tenant必须带X-Init-Secret)
