用途:接收并验证 USPS 通过 Subscriptions - Tracking API(v3.2)推送的追踪 Webhook。通过 POST /subscriptions 创建订阅,指定 listenerURL、filterProperties(按 Mailer ID 或追踪号过滤)及可选的 32 位 secret;USPS 在包裹状态更新时向 listenerURL 发送通知。
主要能力:解析通知信封(含 subscriptionId、subscriptionType、timestamp、payload、links),校验 X-HMAC 签名,并按订阅类型分发事件。签名以订阅 secret 为密钥,对 timestamp 与原始 payload 字符串拼接后做 HMAC-SHA256,Base64 摘要放入 X-HMAC 头(旧别名 hmac-header)。必须使用原始字符串,不可重新序列化内层 payload,比较需时序安全。
事件类型:无事件名枚举,可订阅过滤值仅为 ALL_UPDATES,每次更新都会通知。信封 subscriptionType 区分两种 schema:TRACKING 为单件追踪摘要;扫描事件提取 schema 为单条原始扫描记录,其确切字符串与字段名暂未提供,需记录首次投递后显式分支,并保留未知类型的兜底分支。追踪状态包括 Pre-Shipment、Accepted、In Transit、Out for Delivery、Delivered、Available for Pickup、Delivery Attempt、Alert。
使用方式:设置环境变量 USPS_WEBHOOK_SECRET 为创建订阅时的 32 位 secret。本地开发可用 npx hookdeck-cli listen 3000 usps --path /webhooks/usps,将打印的 URL 作为 listenerURL。示例目录含 examples/express/、examples/nextjs/、examples/fastapi/。
限制:OAuth2 令牌不随投递发送,逐消息真实性依赖 X-HMAC 或 IP 白名单;未设 secret 且无白名单时无逐消息验证。secret 未设置时订阅不发送 X-HMAC 头,不应将缺失 secret 传入 createHmac/hmac.new,否则抛错导致 500;示例会记录一次性警告后继续处理,若部署无法依赖白名单应改为拒绝。权威 schema 与状态值由 USPS Tracking API 定义,代码需防御性处理。建议配合 webhook-handler-patterns 技能处理幂等、错误与重试。