-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration
Two required variables, the rest optional. All are read from the environment, and .env.example lists them.
Resend API key. Sign up at resend.com; the free tier ships 3,000 emails per month.
Where every webhook email lands. Comma-separate for several recipients:
NOTIFY_EMAIL=alice@team.com,bob@team.com
Default: webhooks@onresend.dev
In production, use your own verified domain. The default sender is fine for testing but flagged as spam by some receivers. Verify a domain in Resend, Domains, Add, then add the DNS records they show.
If set, every request must include a valid HMAC signature. The verifier picks the scheme from the :source segment, so /hooks/stripe uses the Stripe profile, /hooks/github the GitHub profile, and so on. Generate a secret:
openssl rand -hex 32When unset, signature verification is disabled. See HMAC-Verification for the per-provider detail.
If set, enables POST /dead-letter/:id/replay behind this bearer token, which re-enqueues a stored failure for another delivery attempt. While unset the endpoint returns 404, so a public deployment cannot be probed. Generate one the same way as the HMAC secret:
openssl rand -hex 32See Retry-and-Dead-Letter for the full replay flow.
If set, every delivered event is also posted to Slack as a Block Kit message. Get one from Slack, Apps, Incoming Webhooks, Add to channel.
Both must be set for Telegram fan-out to activate. Create a bot with @BotFather to get the token, and resolve your chat id (for example via @userinfobot). See Fan-Out.
Default: 5. Delivery attempts before a job is dead-lettered.
Default: 500. The base backoff delay, doubled each attempt.
Default: 30000. The backoff cap.
Default: ./data/dead-letter.jsonl. Path for the dead-letter JSON Lines file. Mount a volume here in production so failures survive a redeploy. See Retry-and-Dead-Letter.
Default: 3000. The port Express listens on.
-
Body size. 1MB. Raise the
bodyLimitpassed tocreateAppinsrc/app.jsif a source sends more. -
Recipients.
NOTIFY_EMAILaccepts a comma-separated list, passed straight to Resend. - Resend rate limits. The free tier caps the send rate. The retry queue absorbs short rate-limit spikes via backoff; sustained excess needs a higher Resend plan or several instances.