live.webhooks.outbound(['demos:outbound:orders'], ...) POSTs a signed body to a sink endpoint on every publish - no +server.js on the sending side, no client code.
Place an order and watch the receipt arrive with its verified
HMAC signature and idempotency-key; place a failing order and watch the retries exhaust into the
cluster-shared dead-letter queue, then replay it.
Ordering as Crispy Turnip (8a9ef018)
Both buttons just ctx.publish a placed event - the webhook declaration does the
rest. A failing order asks the sink to answer 500, so the
delivery retries (300 / 600 / 1200ms, jittered) and then
dead-letters.
Newest first, polled every 3s while visible. The sink is a plain HTTP route with no live ctx - it verifies the signature, logs the receipt to Redis, and answers; honest polling instead of a pretend push. Retried deliveries repeat the same idempotency key - that repetition is the at-least-once contract made visible.
Replay re-fires the ORIGINAL payload through the complete
delivery path (SSRF gate re-applied, signature and idempotency
key recomputed) - that is the point. So replaying a fail order fails again and returns here, exactly
like a receiver that is still down; in a real incident you fix
the endpoint, then replay.