feat: WmailHub v1.0.0 —— Cloudflare Email Workers 邮件接收与转发平台(本地可用版本)
- Console:React 19 + antd 6.6.5 前端(登录 admin/admin)+ Hono 管理 API (Nodes/Domains/Mailboxes/Emails/Webhooks/Keys/OAuth/Admin) - Node:Bun 转发节点(HMAC 签名、有限重试、心跳、结构化日志、优雅退出) - Email Worker:Cloudflare email handler + 本地联调入口 - shared:HMAC 协议(docs/04)、wmh_ Key(32 位)、AES-GCM 加密、SSRF 防护 - 邮件管线:postal-mime 解析、附件、catch-all、限额、malformed 降级、TTL 1 天 - Webhook:签名投递、指数退避重试、SSRF 校验、投递日志 - API v1 + MCP(JSON-RPC,六工具,凭据 kind 隔离) - Cloudflare OAuth:真实 + 本地 sim 模式,自动安装管线(幂等,无需手工命令) - 测试:bun test 41 例(协议安全/管线/TTL/Webhook/SSRF/MCP/OAuth/鉴权)+ Playwright UI 冒烟 - LOGO/favicon 由 codex CLI 生成
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
/** WmailHub 全局常量:邮件大小限制、TTL、Webhook 策略、签名头名称 */
|
||||
|
||||
/** # 成员变量: 默认邮件保留时长(秒),1 天 **/
|
||||
export const DEFAULT_RETENTION_SECONDS = 86_400;
|
||||
|
||||
/** # 成员变量: 单封邮件最大字节数(raw MIME),Cloudflare Email Worker 上限为 25MB,取保守值 20MB **/
|
||||
export const MAX_EMAIL_BYTES = 20 * 1024 * 1024;
|
||||
|
||||
/** # 成员变量: 单封邮件最大附件数 **/
|
||||
export const MAX_ATTACHMENTS = 20;
|
||||
|
||||
/** # 成员变量: 单个附件最大字节数 **/
|
||||
export const MAX_ATTACHMENT_BYTES = 10 * 1024 * 1024;
|
||||
|
||||
/** # 成员变量: MIME 头最大字节数 **/
|
||||
export const MAX_MIME_HEADER_BYTES = 256 * 1024;
|
||||
|
||||
/** # 成员变量: Webhook 单次投递超时(毫秒) **/
|
||||
export const WEBHOOK_TIMEOUT_MS = 10_000;
|
||||
|
||||
/** # 成员变量: Webhook 最大尝试次数 **/
|
||||
export const WEBHOOK_MAX_ATTEMPTS = 5;
|
||||
|
||||
/** # 成员变量: Webhook 首次重试退避(毫秒),之后指数递增 **/
|
||||
export const WEBHOOK_RETRY_BASE_MS = 60_000;
|
||||
|
||||
/** # 成员变量: Webhook 签名头 **/
|
||||
export const WEBHOOK_HEADERS = {
|
||||
event: "X-WmailHub-Event",
|
||||
delivery: "X-WmailHub-Delivery",
|
||||
timestamp: "X-WmailHub-Timestamp",
|
||||
signature: "X-WmailHub-Signature",
|
||||
} as const;
|
||||
|
||||
/** # 成员变量: Worker -> Node ingress 共享密钥请求头 **/
|
||||
export const INGRESS_SECRET_HEADER = "X-WmailHub-Ingress-Secret";
|
||||
|
||||
/** # 成员变量: Node 心跳间隔(毫秒) **/
|
||||
export const NODE_HEARTBEAT_INTERVAL_MS = 60_000;
|
||||
Reference in New Issue
Block a user