open-standards/joule-code/joule-code-rs/crates/joule-moq-room/Cargo.toml
Transaction Science 9f7e686777 Merge #432 (co-watch) into the live-room train
Co-watch merged by meaning onto the integrated live room (#428):

- joule-moq-room: one config reader, `Config::settings()`, now fallible, carries
  `age`, `audience_input`, `latency_budget_ms`, `lead`, `ai` and the watch room's
  `watch` (from `watch_source`/`watch_duration_ms`), `watch_control` and
  `watch_window_ms`; one `public_prefix`. A watch room is refused together with
  `e2ee`, `[age]` or `[co]`.
- One path for the clock's records: co-performance's `Item` (`Life`/`Meta`) and
  `emit_items`, with the clock's rate kept; co-watch's skew statements go out as
  `emit_meta`, its leaves through `emit_after` (a least `t`), and every record of
  the clock's chain reaches the watch log through `watch_record`. The separate
  `Lifecycle::Meta` is dropped.
- Roles and grants: `meta` for participants in a room with co-performance or a
  watch room, `WATCHER_KINDS` for a watch room's viewers, `watch_control` the last
  attribute in key order.
- Page: the co-watch mode beside co-performance and the binding; the e2e suite
  gains `cowatch` and keeps every scenario; run.sh runs all five node test files.
- Workflows: each step whole, `paths:` unioned. CHANGELOG and REGISTRY rows
  kept from both; capabilities.json and v2.ttl regenerated by `registry export`.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 05:26:53 -04:00

54 lines
2.6 KiB
TOML

[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"
rust-version = "1.97"
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" }
[lib]
path = "src/lib.rs"
[[bin]]
name = "joule-moq-room"
path = "src/main.rs"
[dependencies]
joule-moq = { path = "../joule-moq" }
joule-moq-relay = { path = "../joule-moq-relay" }
# 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), 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"] }
# 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", "signal", "fs"] }
bytes = "1"
tracing = "0.1"
tracing-subscriber = "0.3"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "0.9"
ed25519-dalek = { version = "2", features = ["rand_core"] }
rand_core_06 = { package = "rand_core", version = "0.6", features = ["getrandom"] }
sha2 = "0.10"
hex = "0.4"
[dev-dependencies]
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }