Search by

semitexa / webhooks

syntaxwanderer

Semitexa Webhooks - inbound verification/deduplication and outbound durable delivery with retries

Package info

github.com/semitexa/semitexa-webhooks

Type:semitexa-module

pkg:composer/semitexa/webhooks

Statistics

Installs: 677

Dependents: 2

Suggesters: 0

Stars: 2

Open Issues: 0

2026.11.01.0448 2026-10-31 21:45 UTC

README

Webhook support for Semitexa — inbound signature verification with deduplication, outbound durable delivery with retries, audit trail, and replay CLI.

Install

Included in every project created by the installer (https://semitexa.com/install.sh).

Features

  • Inbound: signature verification (HMAC-SHA256), durable inbox with deduplication
  • Outbound: persistent outbox, claim-and-lease worker, exponential backoff retries
  • Audit: append-only attempt history for all transitions
  • CLI: webhook:work, webhook:replay:inbound, webhook:replay:outbound, webhook:show, webhook:cleanup

Worker

Outbound deliveries are sent by webhook:work, a long-running loop. In a project started with bin/semitexa server:start it is already running: the package declares it with #[AsWorkerProcessSource], and the worker container runs it next to queue:work (bin/semitexa worker:processes lists them; WORKER_REPLICAS sets how many worker containers run). Without it, published webhooks stay pending. To run it by hand:

bin/semitexa webhook:work [worker-id] [poll-interval]   # poll-interval defaults to 5 seconds

Outbound targets

A delivery is only sent to an http(s) URL whose host resolves exclusively to public addresses. Loopback, private and link-local ranges (including the cloud metadata address 169.254.169.254) are refused, and cURL connects to the exact address that was checked, so a DNS answer cannot change in between. A refused target fails the attempt with the reason in the attempt history.

To deliver to a receiver on a private network, typically in development, set WEBHOOK_ALLOW_PRIVATE_TARGETS=true.