[package] name = "joule-moq-remote" version = "0.1.0" description = "A host agent for WAI remote desktop rooms (wai.live.remote) over joule-moq-relay: it captures a screen, encodes it with the platform's encoder, publishes it as the room's screen track with its receipts, decides every input by the host's rules of the extension and injects what they accept, signing a screen statement and an outcome for every input." edition = "2024" license = "Apache-2.0" repository = "https://github.com/transaction-science/open-standards" # A workspace of its own, with its own lock file, as joule-moq-room is: it builds on wai-rs # (the room's records are WAI's), whose 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" [[bin]] name = "wai-remote-host" path = "src/main.rs" [dependencies] joule-moq = { path = "../joule-moq" } joule-moq-relay = { path = "../joule-moq-relay" } # The room's records (live-rooms, live-events) and the remote desktop extension's statements, # rules and verifier: no codec chain. wai = { path = "../../../../wai/wai-rs", default-features = false, features = ["remote_desktop"] } tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time", "net", "io-util", "signal"] } tracing = "0.1" tracing-subscriber = "0.3" serde = { version = "1", features = ["derive"] } serde_json = "1" 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" # TLS to the room service (https://) and the relay (wss://): rustls with ring, as the relay # builds it, the operating system's roots, and the WebSocket client the relay's binding takes. rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } rustls-native-certs = "0.8" tokio-tungstenite = "0.30" # The platform adapters on Linux: dlopen for the X11 client library (so a host without it still # builds and runs with the pattern source), and the input device's ioctls. [target.'cfg(target_os = "linux")'.dependencies] libc = "0.2" [dev-dependencies] tokio = { version = "1", features = ["rt-multi-thread", "macros"] }