inbuxa-relay: the relay binary, inbound in held and live mode #245

Merged
jcoffey-dev merged 1 commits from relay/binary into main 2026-10-30 03:47:45 +00:00
1 Commits
Author SHA1 Message Date
jcoffey-dev 3eb5879bb3 inbuxa-relay: the relay binary, inbound in held and live mode
ci / fork-checks (pull_request) Skipped
ci / build (pull_request) Skipped
github/ci (branch) GitHub Actions
ci / github (pull_request) Successful in 11m6s
The edge appliance from docs/spec/features/relay.md, inbound side:

- join, run, status and reset; INBUXA_RELAY_JOIN_TOKEN joins a
  container on its first run (RL-2, RL-8, RL-9, RL-10)
- the link: TLS 1.3 with a client certificate required and chained to
  the pinned downstream CA, else a TLS alert and nothing more (RL-5,
  RL-6); JMAP over HTTP/1.1 and RFC 8887 WebSocket with push; uploads
  and downloads
- the JMAP methods: Relay/join, get, set; RecipientDomain and Recipient
  sync with Recipient/replace; Inbound get, query, changes, claim, set;
  RelayEvent get, changes, set
- the door on port 25, closed until the first settings and recipient
  set: real recipients only (RL-1), no AUTH or relaying (RL-4), per-IP
  limits, early talkers dropped, STARTTLS, DSN parameters passed down
- the spool: sealed to the downstream as the message arrives and
  fsynced before 250 (RL-21), leases per connection (RL-15), held mail
  expiry, 452 when 90% full
- live mode: the SMTP reply waits for the downstream's verdict, and
  falls back to held after liveVerdictTimeout (RL-12, RL-13)

An end-to-end test drives it over real sockets as a downstream would.
Release build: 5.4 MB; 6.3 MB resident when idle.

Not here yet: outbound (phase 4), DNSBL zones, Relay/upgrade, the
static musl build and image (RL-31), and the server side.
2026-10-29 20:33:00 -07:00