feat: v1.1.0 账号化重构 + 三级 Webhook + 设置中心 + Vite 工具链
- 账号化:节点更名账号,/nodes -> /accounts;添加账号直达 Cloudflare OAuth,自动创建账号并同步账号下全部域名(catch-all 邮箱随同步创建) - 域名:移除手工添加;点击域名『设置 Email Workers』= 部署账号级 Email Worker + Email Routing + catch-all;支持按账号筛选 - Webhook 三级模型:邮箱 -> 域名 -> 全局,收信取第一个命中者;支持自定义请求头与 key(默认 Authorization: Bearer <key>,兼做 X-WmailHub-Signature 签名);独立 webhooks 实体与 /webhooks、/keys 页面删除,Key 管理收进设置模态窗口 - 设置中心:全局 Webhook / 默认 Node Ingress 地址 / 修改密码 / API & MCP Keys(生成、撤销、删除) - UI:Header 标题副标题紧凑化(修复溢出),LOGO 加版本号 tag(v1.1.0 取自 package.json),各列表页搜索框 - 工具链:前端构建 Bun.build -> Vite(vite 8 + @vitejs/plugin-react) - 后端:/api/settings、POST /api/domains/:id/setup、0002 迁移(投递行固化三级目标配置);MCP 去 list_webhooks(5 工具);迁移执行器加 _migrations 记录 - 测试:44/44(新增 settings 套件、webhook 三级优先级/SSRF/签名);UI 冒烟 11/11
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
-- v1.1.0:账号化重构 + 三级 Webhook(邮箱 -> 域名 -> 全局)
|
||||
-- 节点在 UI/API 层更名「账号」(表名保持 nodes,兼容既有 Node 内部协议)
|
||||
|
||||
-- 域名级 Webhook 与 Email Workers 配置状态
|
||||
ALTER TABLE domains ADD COLUMN webhook_url TEXT;
|
||||
ALTER TABLE domains ADD COLUMN webhook_headers TEXT; -- JSON: 自定义请求头
|
||||
ALTER TABLE domains ADD COLUMN webhook_key_enc TEXT; -- webhook key AES-GCM 密文
|
||||
ALTER TABLE domains ADD COLUMN setup_error TEXT; -- 「设置 Email Workers」失败原因
|
||||
|
||||
-- 邮箱级 Webhook 配置
|
||||
ALTER TABLE mailboxes ADD COLUMN webhook_url TEXT;
|
||||
ALTER TABLE mailboxes ADD COLUMN webhook_headers TEXT;
|
||||
ALTER TABLE mailboxes ADD COLUMN webhook_key_enc TEXT;
|
||||
|
||||
-- Webhook 独立实体移除:配置落在 邮箱/域名/全局 三级,投递行携带解析后的目标配置
|
||||
DROP TABLE IF EXISTS webhook_deliveries;
|
||||
DROP TABLE IF EXISTS webhooks;
|
||||
CREATE TABLE IF NOT EXISTS webhook_deliveries (
|
||||
id TEXT PRIMARY KEY,
|
||||
email_id TEXT NOT NULL,
|
||||
target_type TEXT NOT NULL, -- mailbox | domain | global
|
||||
url TEXT NOT NULL,
|
||||
headers TEXT, -- JSON: 自定义请求头
|
||||
key_enc TEXT, -- webhook key 密文(用于 HMAC 签名与 Authorization: Bearer)
|
||||
status TEXT NOT NULL DEFAULT 'pending', -- pending | success | failed | exhausted
|
||||
attempt_count INTEGER NOT NULL DEFAULT 0,
|
||||
next_retry_at TEXT,
|
||||
last_error TEXT,
|
||||
delivered_at TEXT,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_deliveries_retry ON webhook_deliveries(status, next_retry_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_deliveries_email ON webhook_deliveries(email_id);
|
||||
Reference in New Issue
Block a user