Files
rutster/crates/rutster-trunk/Cargo.toml
Aaron D. Lee ac3670b962 feat(trunk): app-level WS ping on the media-stream WS, RUTSTER_WS_PING_SECS default 20 (deploy-A §5.2)
Neither Twilio nor Telnyx documents WS keepalive — keepalive is entirely
our job (spec §3.1 invariant 3), and the caller→engine direction can be
the only traffic for hours, letting any 60s proxy idle timer kill a live
call. Engine-originated Ping frames as a third select! branch in the
existing pump loop; interval via the config.rs fail-fast parser pattern
(0 rejected — no 'off' spelling by design).

Router signature grows the interval; both call sites updated. WebRTC
signaling is plain HTTP today, so this is the only long-lived WS.

Signed-off-by: Aaron D. Lee <himself@adlee.work>
2026-07-05 22:43:59 -04:00

44 lines
1.7 KiB
TOML

# crates/rutster-trunk/Cargo.toml
[package]
name = "rutster-trunk"
version = "0.0.0"
license.workspace = true
edition.workspace = true
repository.workspace = true
description = "Rented carrier transport — CPaaS media-leg ingress; no first-party SIP (spearhead step 5, ADR-0007)."
[dependencies]
# FOB-side (dev-c, T1/T3/T4/T5):
rutster-media = { path = "../rutster-media" }
rutster-call-model = { path = "../rutster-call-model" }
rutster-tap = { path = "../rutster-tap" }
tokio = { workspace = true, features = ["macros", "rt-multi-thread", "sync", "time"] }
axum = { workspace = true, features = ["ws"] }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
tracing = { workspace = true }
thiserror = { workspace = true }
base64 = { workspace = true }
# Green-zone (dev-b, T2/T6):
async-trait = { workspace = true }
url = { workspace = true }
# reqwest is OPTIONAL — only pulled in when `twilio-live` is enabled (the
# live `TwilioCallControlClient`, T6). Keeps default CI build lean.
reqwest = { workspace = true, optional = true }
[dev-dependencies]
tower = { workspace = true }
futures-util = { workspace = true }
tokio-tungstenite = { workspace = true }
tracing-subscriber = { workspace = true }
rutster-brain-realtime = { path = "../rutster-brain-realtime", features = ["mock"] }
tokio = { workspace = true, features = ["macros", "rt-multi-thread", "sync", "time", "net"] }
[features]
default = []
# The live `TwilioCallControlClient` (T6) is feature-gated behind `twilio-live`.
# `MockCallControlClient` is the per-PR test surface; the maintainer runs
# `cargo test --features=twilio-live` manually pre-release (ADR-0009).
twilio-live = ["dep:reqwest"]