[package] name = "joule-moq-room" version = "0.1.0" description = "A room service for WAI live rooms over joule-moq-relay: it holds a room's authority and clock keys, issues short-lived WRG1 grants to keys visitors make in their browsers (each useless without that key's proof of possession), authors the room's lifecycle on the clock's events track from what the relay carries, and serves the signed room descriptor." edition = "2024" license = "Apache-2.0" repository = "https://github.com/transaction-science/open-standards" # A workspace of its own, with its own lock file: it builds on wai-rs (the room's records # are WAI's), whose serde_json features would otherwise be unified into every crate of the # joule-code workspace. [workspace] # The relay's wtransport, vendored with its WebTransport session close; the joule-code # workspace patches it the same way (vendor/wtransport/VENDORED.md). [patch.crates-io] wtransport = { path = "../../vendor/wtransport" } # quinn 0.11.12 and quinn-proto 0.11.19 with RESET_STREAM_AT and the reset_stream_at transport # parameter, which WebTransport over HTTP/3 relies on (vendor/quinn-proto/VENDORED.md). quinn = { path = "../../vendor/quinn" } quinn-proto = { path = "../../vendor/quinn-proto" } [lib] path = "src/lib.rs" # The binary is `wai-room`; the crate keeps its name (WAI toolchain decision 11). [[bin]] name = "wai-room" path = "src/main.rs" [dependencies] joule-moq = { path = "../joule-moq" } joule-moq-relay = { path = "../joule-moq-relay" } # The impaired path a synthetic participant's QUIC session goes through (`lossy`), from the # contribution links' tests. joule-contrib = { path = "../joule-contrib" } # End-to-end encrypted rooms: the confidentiality record and the clock as the MLS group's # external sender (WAI confidentiality §3, §5). joule-moq-mls = { path = "../joule-moq-mls" } # The room's records (live-rooms, live-events, live-compose, co-performance, co-watch, live # worlds, remote desktop, messaging, the offers a room presents), and admission by age # (age-assurance: the policy, the rating, the token's checks and the receipts): no codec chain. wai = { path = "../../../../wai/wai-rs", default-features = false, features = ["live_compose", "timed_text", "age_assurance", "co_performance", "co_watch", "live_world", "remote_desktop", "live_messaging", "live_egress", "live_ads", "audience_decision", "shoppable_events"] } # The HTTP service (MIT), the versions joule-moq-ingest pins. hyper = { version = "=1.11.1", features = ["server", "http1"] } hyper-util = { version = "=0.1.20", default-features = false, features = ["tokio"] } http-body-util = "=0.1.5" tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time", "net", "io-util", "io-std", "signal", "fs"] } bytes = "1" tracing = "0.1" tracing-subscriber = "0.3" serde = { version = "1", features = ["derive"] } serde_json = "1" toml = "1.2" ed25519-dalek = { version = "3", features = ["alloc", "rand_core"] } rand_core_06 = { package = "rand_core", version = "0.6", features = ["getrandom"] } sha2 = "0.11" hex = "0.4" # The room source's catalog carries each header inline (`[source]`). base64 = "0.23" # GET /metrics, in the text exposition format (no dependencies of its own). wai-metrics = { path = "../../../../wai/wai-metrics" } [dev-dependencies] tokio = { version = "1", features = ["rt-multi-thread", "macros"] } # The remote desktop host agent and its headless viewer, for a remote room's session through the # service (tests/remote_room.rs). joule-moq-remote = { path = "../joule-moq-remote" } # The ingest gateway, whose example configuration tests/ports.rs reads with the gateway's own # reader and starts the gateway from. joule-moq-ingest = { path = "../joule-moq-ingest" } # The HTTP egress gateway, which serves the room source's parts under its running receipts # (tests/source_room.rs). joule-moq-http = { path = "../joule-moq-http" }