[package] name = "joule-moq" version = "0.3.0" description = "MoQT (Media over QUIC Transport, draft-ietf-moq-transport-22, with -18 and -16 for interoperation) wire protocol + JWP receipt extension for CommunicationOS broadcast media. Trait surface lets the Realtime stack publish, subscribe, and relay tracks with object-level signed provenance and joule receipts." edition = "2024" rust-version = "1.97" license = "Apache-2.0" repository = "https://github.com/transaction-science/open-standards" [dependencies] bytes = "1" serde = { version = "1", features = ["derive"] } serde_json = "1" thiserror = "2" blake3 = "1" ed25519-dalek = { version = "2", features = ["serde", "rand_core"] } # SHA-256 for a room grant's digest (WAI live-rooms §4.2), the one a proof names. sha2 = "0.10" # The async surface's dependencies (feature `runtime`). jwp = { path = "../jwp", optional = true } async-trait = { version = "0.1", optional = true } tracing = { version = "0.1", optional = true } tokio = { version = "1", features = ["sync", "rt", "macros", "io-util", "net", "time"], optional = true } uuid = { version = "1", features = ["v4", "v5", "v7", "serde", "js"], optional = true } chrono = { version = "0.4", features = ["serde"], optional = true } rand_core_06 = { package = "rand_core", version = "0.6", features = ["getrandom"], optional = true } futures = { version = "0.3", optional = true } # End-to-end sealed objects (feature `secure-objects`): RustCrypto's AES-GCM, AES-CTR, # HMAC and HKDF, all Apache-2.0 OR MIT, at the versions this workspace's lock already # holds. No default features: nothing here draws randomness. aes-gcm = { version = "0.10", default-features = false, features = ["aes", "alloc"], optional = true } aes = { version = "0.8", optional = true } ctr = { version = "0.9", optional = true } hmac = { version = "0.12", optional = true } hkdf = { version = "0.12", optional = true } [features] default = ["runtime"] # The async surface: the endpoint traits, the in-memory mock, and (with `quic`) the QUIC # transport, on tokio and the JWP framing crate. Without it the crate is the -22 codec, # the carriage of objects and receipts, the receipts and the session's setup rules, with # no runtime and no native dependency, and it builds for wasm32-unknown-unknown # (`joule-moq-web` builds it so). runtime = ["dep:jwp", "dep:async-trait", "dep:tracing", "dep:tokio", "dep:uuid", "dep:chrono", "dep:rand_core_06", "dep:futures"] quic = ["runtime", "dep:quinn", "dep:rustls", "dep:rcgen"] # Sealing and opening objects end to end (WAI confidentiality §4, §6): no runtime, so it # builds for wasm32-unknown-unknown beside the codec. secure-objects = ["dep:aes-gcm", "dep:aes", "dep:ctr", "dep:hmac", "dep:hkdf"] [dependencies.quinn] version = "0.11" optional = true [dependencies.rustls] version = "0.23" features = ["ring", "std"] optional = true [dependencies.rcgen] version = "0.14" optional = true [dev-dependencies] tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread"] }