Self-hosted webhook security and reliable event-delivery platform in MoonBit.
| 模式 | 适用情况 | 存储与边界 |
|---|---|---|
| serve-config | 第三方 Webhook 验签、路由和单机交付 | 本机 SQLite,静态受信任配置;现有示例可直接运行 |
| serve-platform | 应用事件发布、第三方 Webhook 验签接入、消费者管理和多实例交付 | 共享 PostgreSQL,多租户令牌/角色、契约、CloudEvents、SLO 与告警 |
export HOOKLAB_SECRET=local-secret
moon run --target js cmd/hooklab -- config-check examples/gateway/config.json
moon run --target js cmd/hooklab -- serve-config examples/gateway/config.jsonexport HOOKLAB_SECRET=ingress-development-secret
export HOOKLAB_PUBLISH_ORDERS=publisher-development-token
export HOOKLAB_SIGN_WAREHOUSE=endpoint-development-secret
moon run --target js cmd/hooklab -- serve-config examples/gateway/outbound-config.json
curl -X POST http://127.0.0.1:8787/api/outbound/applications/orders/events/order.created \
-H 'Authorization: Bearer publisher-development-token' \
-H 'Idempotency-Key: order-42-created' \
-H 'Content-Type: application/json' \
--data '{"order_id":"order-42"}'moon run --target js cmd/hooklab -- serve generic local-secret http://127.0.0.1:9090/target 8787 .hooklab-datamoon test
moon run --target js cmd/hooklab -- retry-plan 5
moon run --target js cmd/hooklab -- sign github test-secret @examples/github/payload.jsonmoon run --target js cmd/hooklab -- verify github test-secret @examples/github/payload.json 'sha256=<digest>'moon run --target js cmd/hooklab -- report github test-secret @examples/github/payload.json 'sha256=<digest>' diagnosis.htmlmoon run --target js cmd/hooklab -- replay http://127.0.0.1:8787/webhook @examples/github/payload.json| 能力 | 实现 |
|---|---|
| 多平台验签 | GitHub、Stripe、飞书/Lark、通用 HMAC-SHA256 |
| 密码学 | 纯 MoonBit SHA-256、HMAC-SHA256、常量时间摘要比较 |
| 防重放 | 时间容差、未来时钟偏差、delivery ID TTL 幂等记录 |
| 内容路由 | JSON 点路径的 equals / not-equals / exists / contains / starts-with / ends-with |
| 声明式配置 | 版本化 JSON、全量错误报告、环境变量密钥和命名路由 |
| 规则化转换 | 按路由 set / remove / copy,显式输入、输出与操作数预算 |
| 隐私保护 | 嵌套 JSON 字段和 HTTP 头大小写不敏感脱敏 |
| 可复现诊断 | 无密钥 replay fixture、机器可读 JSON、单文件离线 HTML |
| 持久化网关 | 回环 HTTP 接收、SQLite WAL、进程重启恢复 |
| 事务存储 | Node 内置 SQLite、WAL、事件与投递原子提交、旧 state.json 一次性迁移 |
| 出站发布 | 配置化应用、端点和订阅,Bearer 发布鉴权、内容指纹幂等冲突检查 |
| 出站签名 | 每端点 HMAC-SHA256、公开 key ID、精确正文签名、重试保持稳定消息 ID |
| Worker 租约 | 原子领取、执行中续租、租约过期接管、owner/token/version fencing、崩溃恢复 |
| 投递状态机 | pending / scheduled / in-flight / delivered / dead-lettered / cancelled |
| 可靠交付 | 有界指数退避、Retry-After、死信恢复、事件回放 |
| 目标限流 | 每目标并发与滑动一秒速率控制、进程级 16 路硬上限;重试和回放同样受限 |
| 故障熔断 | 可选的按目标失败阈值、冷却与单次半开探测;其他目标继续投递 |
| 耗时统计 | 管理 API 提供不含目标 URL 或正文的匿名固定桶聚合指标 |
| 契约测试 | 提供方、事件类型、Header、JSON 路径、大小限制的全量问题报告 |
| 管理界面 | 脱敏事件 API、投递状态 API、本地 Web 控制台 |
| 多租户控制面 | PostgreSQL 租户、应用、端点、订阅,Owner/Developer/Viewer 角色、审计、消费者门户和一次性密钥轮换 |
| 分布式交付 | PostgreSQL 事务入队、跨实例任务竞争领取、续租、fencing、持久化尝试审计与死信恢复;至少一次交付 |
| 第三方入站闭环 | MoonBit 验签 GitHub、Stripe、飞书和通用 HMAC,请求通过后才在 PostgreSQL 原子保存事件和订阅交付 |
| 事件契约 | 版本化 JSON Schema 子集、非破坏性变更检查、CloudEvents 1.0 structured JSON 接入 |
| 运行观测 | Prometheus 指标、脱敏事件时间线、24 小时 SLO、p95 尝试及最终交付耗时、死信与积压告警 |
| 数据转移 | SQLite 已结束历史事件的私有导出、预览与显式确认导入;不迁移活动队列或密钥 |
| CLI | sign、verify/inspect、report、route-test、contract-check、config-check、retry-plan、replay、serve、serve-config、serve-platform |
hooklab/core 领域模型与稳定错误码
hooklab/crypto SHA-256 / HMAC-SHA256
hooklab/providers 提供方验签适配器
hooklab/engine 幂等、路由、脱敏、重试、fixture
hooklab/event 接收事件模型与查询存储
hooklab/delivery 投递状态机、队列、重试和死信恢复
hooklab/outbound 应用发布、订阅匹配、确定性 ID、出站签名与验签
hooklab/contract Webhook 契约验证
hooklab/config 版本化网关配置解析与全量校验
hooklab/transform 带显式预算的确定性 JSON 转换
hooklab/gateway 验签到持久化投递的领域编排
hooklab/pipeline 安全处理顺序
hooklab/report JSON 与离线 HTML 诊断
cmd/hooklab JS/Node CLI、本地网关与控制台
platform PostgreSQL 多租户 HTTP/Worker 适配器、门户与结构测试
ops Prometheus 告警规则示例
examples 可复现实例moon fmt --check
moon check --target all --deny-warn
moon test --target all --deny-warn
moon build --target all --deny-warn
node scripts/check-core-coverage.mjs
node scripts/check-moonc-version.mjs
node scripts/check-package-contents.mjs
node scripts/gateway-e2e.mjs
node scripts/gateway-config-e2e.mjs
node scripts/gateway-limits-e2e.mjs
node scripts/gateway-circuit-e2e.mjs
node scripts/gateway-deadletter-e2e.mjs
node scripts/gateway-restart-e2e.mjs
node scripts/gateway-outbound-e2e.mjs
node scripts/gateway-lease-e2e.mjs
npm ci
npm run test:platform
# 使用专用 PostgreSQL 测试库设置 TEST_DATABASE_URL 后:
node scripts/platform-e2e.mjs
node scripts/platform-showcase.mjsInstall
Download zipSelf-hosted webhook security and reliable event-delivery platform in MoonBit.