Sky Notify treats notification destinations and payloads as untrusted input.
- webhook delivery requires HTTPS
- webhook hostname must be explicitly allowlisted through
NOTIFY_WEBHOOK_HOSTS - embedded URL credentials are rejected
- redirects are not followed
- JSON payloads are bounded to 64 KiB
- optional bearer authentication uses constant-time comparison
- durable idempotency keys reduce accidental duplicate submissions
- external delivery is marked successful only after a 2xx provider response
- retry budgets transition exhausted deliveries to
dead_letter - the container runs as an unprivileged
skyuser - CI performs compile, lint, tests, dependency audit, and image checks
This service does not provide SSRF-proof IP-range filtering beyond the exact hostname allowlist, tenant isolation, message encryption at rest, distributed consensus, exactly-once external delivery, or compliance certification. Operators should place it behind authenticated network boundaries, manage secrets outside the repository, back up the SQLite database, and monitor dead-letter growth.
Do not include credentials or high-value secrets in notification payloads unless the deployment adds an appropriate encrypted storage and data-handling layer.