Files
inbuxa-server/crates/features/Cargo.toml
T
jcoffey-dev 30c83c8ef7
github/ci (branch) GitHub Actions
ci / fork-checks (pull_request) Skipped
ci / build (pull_request) Skipped
ci / github (pull_request) Canceled after 30s
inbuxa Relay: the downstream's link service
The second server-side part of docs/spec/features/relay.md ("The link",
"Recipients", "Joining and reset"):

- Every node dials each enabled relay over JMAP on WebSocket, with TLS
  1.3 and a client certificate signed by the downstream's link CA. Node
  certificates last 30 days and are renewed after 20; the relay pins
  the CA, not the node.
- Joining: while a relay waits for its join, a node posts Relay/join
  with a fresh nonce, checks the proof against the token's secret and
  the relay's key, and records the pin by compare-and-set, so two nodes
  joining at once agree. An expired token reports joinFailed. Once
  joined, a node only talks to the pinned key.
- Settings: the relay's settings are pushed whole when they change,
  with the domains, the sealing key, the recipient key and the SMTP
  certificate filled in by the downstream.
- Recipients: the relay's domains (all enabled local domains, or the
  ones it names), with catch-all and the sub-address separator; every
  account, list and alias address at each domain name, and masked
  emails that take mail. The first push is the whole hashed set as a
  blob (Recipient/replace); after that, deltas through Recipient/set,
  falling back to a whole push past 2000 changes.
- A relay change wakes the links at once; otherwise they resync every
  15 s and on the relay's Relay push. Moving a relay restarts its link;
  turning one off closes it.
- Each node's link (state, since, last seen, last error, the relay's
  own status and recipient count) is kept per node and read back as
  the relay's links property; destroying a relay clears it.
- A system test runs the real inbuxa-relay binary: join, pin, recipient
  push, RCPT accept and reject, a new user reaching the relay, a
  settings push, and turning it off.
2026-10-29 22:23:07 -07:00

43 lines
1.5 KiB
TOML

[package]
name = "inbuxa-features"
description = "inbuxa's rebuilt features: behavior Stalwart ships only in its Enterprise Edition, rebuilt clean-room"
license = "AGPL-3.0-only"
version.workspace = true
edition = "2024"
[dependencies]
registry = { path = "../registry" }
jmap_proto = { path = "../jmap-proto" }
store = { path = "../store" }
trc = { path = "../trc" }
types = { path = "../types" }
utils = { path = "../utils" }
ahash = { version = "0.8.12", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
toml = "1.1"
xxhash-rust = { version = "0.8.18", features = ["xxh3"] }
base64 = "0.23"
sha2 = "0.11"
flate2 = "1.1"
tokio = { version = "1.53", features = ["sync", "rt"] }
# inbuxa: DLP detectors and attachment text (dlp-and-mail-flow-rules spec)
regex = "1.13.1"
aho-corasick = "1.1"
zip = "8.6"
quick-xml = "0.41"
mail-parser = { version = "0.11", features = ["full_encoding"] }
mail-builder = { version = "1.0" }
# inbuxa: scheduled reports run at a local time (scheduled-reports spec, RP-15)
chrono = { version = "0.4", default-features = false, features = ["std"] }
chrono-tz = "0.10"
# inbuxa: the downstream side of inbuxa Relay (relay spec)
inbuxa-relay-proto = { path = "../relay-proto" }
aws-lc-rs = { version = "1" }
rcgen = { version = "0.14", default-features = false, features = ["crypto", "pem", "aws_lc_rs", "x509-parser"] }
time = "0.3"
[dev-dependencies]
x509-parser = "0.18"
tokio = { version = "1.53", features = ["macros", "rt"] }