用途:管理 joelclaw webhook 网关,添加新提供方、调试投递、在外部服务注册 webhook。外部服务经 hooks.joelclaw.com 窄代理与 Tailscale Funnel 到 Worker:3111 的 /webhooks/:provider,依次执行 verifySignature()、normalizePayload(),再入队或直发 Inngest 事件。稳定 URL 为 https://hooks.joelclaw.com/webhooks/<provider>,代理仅保留原始 body 与签名头。
主要能力:提供 WebhookProvider 接口与 Hono 路由;每个服务一个提供方文件;支持签名算法(Todoist HMAC-SHA256 base64、Front 应用 SHA256 覆盖 timestamp:rawBody、Front Rules SHA1、Vercel SHA1 hex、GitHub SHA256 hex、Stripe 结构化签名);限流(每 IP 每分钟 20 次认证失败);幂等键。新增提供方需:建 providers/{name}.ts、在 server.ts 注册、建 Inngest notify 函数并导出、存密钥到 agent-secrets、部署并注册 URL。
调试:用 joelclaw logs worker --follow --grep webhook 观察日志;curl -s http://localhost:3111/ | jq .webhooks 查看提供方列表;手动 HMAC 测试签名;joelclaw runs --count 5 查 Inngest 事件;joelclaw gateway status/events 检查网关。部署后执行 joelclaw inngest restart-worker --register。
限制:Vercel webhook 仅 Pro/Enterprise 可用;Caddy 会丢弃 Funnel POST body,应直连 Worker:3111;Todoist 密钥用 client_secret 而非 Verification token;迁移未通过稳定 URL 真实签名投递前不得宣称完成。