open-standards/joule-code/joule-code-rs/crates/joule-moq-room/room.example.toml
Transaction Science f801f58acb joule-moq-room: a room service that issues grants and authors the lifecycle
It holds a room's authority and clock keys (a 0600 file outside every
repository). POST /grant signs a short-lived WRG1 grant for a key a page made,
a publisher's or a viewer's, bounded per client and per room; the relay honours
it only beside the key's proof (live-rooms §10.5). The clock's session on the
relay watches each publisher's video track and signs join, publish and leave on
its events track (§7.2, live-events §8.1); GET /room serves the signed
descriptor, the composition descriptor and the grants. A new room starts when
the last publisher has left.

A workspace of its own: it builds on wai-rs, whose serde_json features would
otherwise reach every crate of the joule-code workspace.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 03:13:32 -04:00

32 lines
1.2 KiB
TOML

# joule-moq-room: an example configuration. Nothing secret belongs here: the keys are a
# file of their own (`joule-moq-room keygen <path>` makes it, mode 0600), outside every
# repository, and the relay knows the clock's token by its SHA-256 alone.
# The HTTP service, on loopback behind the front that serves the room's page.
listen = "127.0.0.1:9682"
keys = "/path/to/keys.toml"
# The relay's WebSocket endpoint, for the clock's own session (loopback).
relay_url = "ws://127.0.0.1:9681/moq"
# Exit with status 70 past this resident memory (MiB), for the supervisor to restart it.
max_resident_mb = 256
[room]
# Publishers at once, those whose grants are still waited for among them; the composition
# lays out this many tiles.
max_publishers = 4
max_present = 16
# A grant's life, in seconds.
publisher_grant_s = 1200
viewer_grant_s = 1800
# How long a publisher's grant holds its place before its tracks appear.
join_wait_s = 90
# Grants one room takes; then a new room starts once it is empty.
max_grants = 64
[rate]
# Grants per client address: this many at once, then one more every this many seconds.
client_burst = 6
client_every_s = 20
# And for everyone together.
global_burst = 120
global_every_s = 10