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,28 @@
|
||||
/**
|
||||
* Console Cloudflare Workers 入口(生产部署):
|
||||
* fetch -> Hono 应用(前端资产 + 管理 API + OAuth 回调)
|
||||
* scheduled -> Cron Trigger:TTL 清理 + Webhook 重试(docs/09 建议每 15 分钟)
|
||||
*/
|
||||
|
||||
import { createApp } from "./app.ts";
|
||||
import type { Env, ScheduledEvent, WorkersExecutionContext } from "./env.ts";
|
||||
import { runCron } from "./services/cleanup.ts";
|
||||
import { processDueDeliveries } from "./services/webhook_delivery.ts";
|
||||
|
||||
/** # 成员变量: Hono 应用实例 **/
|
||||
const app = createApp();
|
||||
|
||||
/** # 成员变量: Workers 导出(fetch + scheduled) **/
|
||||
export default {
|
||||
async fetch(request: Request, env: Env, ctx: WorkersExecutionContext): Promise<Response> {
|
||||
return app.fetch(request, env, ctx as never);
|
||||
},
|
||||
|
||||
async scheduled(event: ScheduledEvent, env: Env, ctx: WorkersExecutionContext): Promise<void> {
|
||||
ctx.waitUntil(
|
||||
runCron(env, () => processDueDeliveries(env)).then((stats) => {
|
||||
console.log(JSON.stringify({ t: new Date().toISOString(), lvl: "info", msg: "cron", ...stats }));
|
||||
}),
|
||||
);
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user