通知管理 API
Novu 通知服务管理路由,提供 Novu 连接状态查询、管理员凭据加密存储和 auto-login 跳转功能。
基础路径
/admin/novu认证方式
使用 combinedAuth + adminAudit 中间件。仅支持 JWT Bearer Token 认证,且需要 site:admin 权限。
Authorization: Bearer <jwt_token>端点列表
GET /admin/novu/status
获取 Novu 服务状态。检查 Novu API 健康状态、Dashboard URL 配置、凭据保存状态和加密配置状态。
请求参数
无。
响应格式
json
{
"apiHealthy": true,
"apiUrl": "https://novu-api.example.com",
"dashboardUrl": "https://novu-dashboard.example.com",
"credentialsSaved": true,
"encryptionConfigured": true
}响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
apiHealthy | boolean | Novu API 是否健康(通过 /v1/health-check 检测) |
apiUrl | string | Novu API URL(来自环境变量 NOVU_API_URL) |
dashboardUrl | string | Novu Dashboard URL(来自环境变量 NOVU_DASHBOARD_URL) |
credentialsSaved | boolean | 管理员凭据是否已保存到 site_settings |
encryptionConfigured | boolean | EXTERNAL_TOKEN_SECRET 是否已配置(用于加密存储凭据) |
错误码
| HTTP 状态码 | 说明 |
|---|---|
| 403 | 仅支持 JWT 认证 / 缺少 site:admin 权限 |
| 500 | 查询凭据状态失败 |
POST /admin/novu/credentials
保存 Novu 管理员凭据(加密存储)。保存前会先调用 Novu Login API 验证凭据有效性,验证通过后使用 EXTERNAL_TOKEN_SECRET 加密存储到 site_settings 表。
请求参数(Body)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
email | string | 是 | Novu 管理员邮箱 |
password | string | 是 | Novu 管理员密码 |
响应格式
json
{
"success": true
}错误码
| HTTP 状态码 | 说明 |
|---|---|
| 400 | 缺少 email 或 password / 认证失败(邮箱或密码错误) / Novu 返回错误 |
| 403 | 仅支持 JWT 认证 / 缺少 site:admin 权限 |
| 500 | EXTERNAL_TOKEN_SECRET 未配置 / NOVU_API_URL 未配置 / 保存凭据失败 / Novu API 连接超时 |
DELETE /admin/novu/credentials
删除已保存的 Novu 管理员凭据。同时清除进程内存中的 token 缓存。
请求参数
无。
响应格式
json
{
"success": true
}错误码
| HTTP 状态码 | 说明 |
|---|---|
| 403 | 仅支持 JWT 认证 / 缺少 site:admin 权限 |
| 500 | 删除凭据失败 |
POST /admin/novu/auto-login
自动登录 Novu Dashboard。读取加密存储的凭据,调用 Novu Login API 获取 JWT token,返回 Dashboard URL 和 token 供前端跳转使用。
token 会在进程内存中缓存,避免每次请求都调用 Novu Login API。缓存的 token 在过期前或被 Novu API 判定失效前有效。
请求参数
无。
响应格式
成功(获取到 token):
json
{
"dashboardUrl": "https://novu-dashboard.example.com",
"token": "eyJhbGciOiJIUzI1NiIs..."
}降级(登录失败但返回 Dashboard URL):
json
{
"dashboardUrl": "https://novu-dashboard.example.com",
"fallback": true,
"reason": "认证失败:邮箱或密码错误"
}响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
dashboardUrl | string | Novu Dashboard URL |
token | string | Novu JWT token(登录成功时返回) |
fallback | boolean | 是否为降级模式(登录失败但仍返回 Dashboard URL) |
reason | string | 降级原因说明 |
错误码
| HTTP 状态码 | 说明 |
|---|---|
| 403 | 仅支持 JWT 认证 / 缺少 site:admin 权限 |
| 404 | 未保存 Novu 管理员凭据 |
| 500 | NOVU_API_URL 未配置 / NOVU_DASHBOARD_URL 未配置 / EXTERNAL_TOKEN_SECRET 未配置 / 查询凭据失败 / 凭据解密失败 |
环境变量依赖
| 变量 | 说明 |
|---|---|
NOVU_API_URL | Novu API 地址 |
NOVU_DASHBOARD_URL | Novu Dashboard 地址 |
EXTERNAL_TOKEN_SECRET | 凭据加密密钥 |
源码
- 路由文件:
apps/backend/src/routes/admin/novu.ts - 加密工具:
apps/backend/src/utils/encryption.ts