# Node 与 Console 通信协议 Node -> Console 必须使用 HTTPS + HMAC 请求签名 + timestamp + nonce + body hash。 ## Credential ```text node_id credential_id credential_secret cloudflare_account_id ``` Console 保存 secret 的安全摘要;Node 保存实际 secret。 ## 签名 ```text body_hash = SHA256(raw_body) canonical = METHOD + "\n" + PATH + "\n" + TIMESTAMP + "\n" + NONCE + "\n" + body_hash signature = HMAC-SHA256(secret, canonical) ``` 请求头: ```text Authorization: WmailHub-Node X-WmailHub-Timestamp: X-WmailHub-Nonce: X-WmailHub-Body-SHA256: X-WmailHub-Signature: X-WmailHub-Protocol: 1 ``` Console 拒绝 timestamp 超窗、重复 nonce、错误 signature、错误 body hash、已撤销 credential。默认 timestamp window 建议 5 分钟。 ## API ```text POST /api/internal/nodes/{node_id}/emails POST /api/internal/nodes/{node_id}/heartbeat GET /api/internal/nodes/{node_id}/config ``` 邮件请求推荐 `Content-Type: message/rfc822`,body 直接使用 raw MIME。 Console 可以立即撤销 credential。Node 收到 401/403 后不得无限重试。 协议必须版本化。