diff --git a/Cargo.lock b/Cargo.lock index d5adc173..5cc7091f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,9 +71,9 @@ dependencies = [ [[package]] name = "annotate-snippets" -version = "0.12.10" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15580ece6ea97cbf832d60ba19c021113469480852c6a2a6beb0db28f097bf1f" +checksum = "16e4850548ff4a25a77ce3bda7241874e17fb702ea551f0cc62a2dbe052f1272" dependencies = [ "anstyle", "unicode-width", @@ -131,9 +131,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" dependencies = [ "backtrace", ] @@ -146,9 +146,12 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "9ded5f9a03ac8f24d1b8a25101ee812cd32cdc8c50a4c50237de2c4915850e73" +dependencies = [ + "rustversion", +] [[package]] name = "arraydeque" @@ -174,7 +177,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] @@ -213,24 +216,11 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-compression" -version = "0.4.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37" -dependencies = [ - "compression-codecs", - "compression-core", - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "async-lock" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener", "event-listener-strategy", @@ -319,9 +309,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.15.2" +version = "1.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288" +checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" dependencies = [ "aws-lc-sys", "untrusted 0.7.1", @@ -330,9 +320,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1" +checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a" dependencies = [ "cc", "cmake", @@ -379,9 +369,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", @@ -504,9 +494,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder" @@ -519,18 +509,6 @@ name = "bytes" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -dependencies = [ - "serde", -] - -[[package]] -name = "bytestring" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "113b4343b5f6617e7ad401ced8de3cc8b012e73a594347c307b90db3e9271289" -dependencies = [ - "bytes", -] [[package]] name = "bzip2" @@ -631,9 +609,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.50" +version = "1.2.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" +checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" dependencies = [ "find-msvc-tools", "jobserver", @@ -661,9 +639,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "num-traits", @@ -673,9 +651,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.54" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" dependencies = [ "clap_builder", "clap_derive", @@ -683,9 +661,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.54" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" dependencies = [ "anstream", "anstyle", @@ -695,9 +673,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck", "proc-macro2", @@ -707,9 +685,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "clipboard-win" @@ -735,7 +713,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -754,23 +732,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "compression-codecs" -version = "0.4.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2" -dependencies = [ - "compression-core", - "flate2", - "memchr", -] - -[[package]] -name = "compression-core" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -787,8 +748,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8599749b6667e2f0c910c1d0dff6901163ff698a52d5a39720f61b5be4b20d3" dependencies = [ "futures-core", - "prost 0.14.1", - "prost-types 0.14.1", + "prost 0.14.3", + "prost-types 0.14.3", "tonic", "tonic-prost", "tracing-core", @@ -807,8 +768,8 @@ dependencies = [ "hdrhistogram", "humantime", "hyper-util", - "prost 0.14.1", - "prost-types 0.14.1", + "prost 0.14.3", + "prost-types 0.14.3", "serde", "serde_json", "thread_local", @@ -864,6 +825,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "cpp_demangle" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0667304c32ea56cb4cd6d2d7c0cfe9a2f8041229db8c033af7f8d69492429def" +dependencies = [ + "cfg-if", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -875,36 +845,36 @@ dependencies = [ [[package]] name = "cranelift-assembler-x64" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32b9105ce689b3e79ae288f62e9c2d0de66e4869176a11829e5c696da0f018f" +checksum = "0377b13bf002a0774fcccac4f1102a10f04893d24060cf4b7350c87e4cbb647c" dependencies = [ "cranelift-assembler-x64-meta", ] [[package]] name = "cranelift-assembler-x64-meta" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e950e8dd96c1760f1c3a2b06d3d35584a3617239d034e73593ec096a1f3ea69" +checksum = "cfa027979140d023b25bf7509fb7ede3a54c3d3871fb5ead4673c4b633f671a2" dependencies = [ "cranelift-srcgen", ] [[package]] name = "cranelift-bforest" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d769576bc48246fccf7f07173739e5f7a7fb3270eb9ac363c0792cad8963c034" +checksum = "618e4da87d9179a70b3c2f664451ca8898987aa6eb9f487d16988588b5d8cc40" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-bitset" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d37c4589e52def48bd745c3b28b523d66ade8b074644ed3a366144c225f212" +checksum = "db53764b5dad233b37b8f5dc54d3caa9900c54579195e00f17ea21f03f71aaa7" dependencies = [ "serde", "serde_derive", @@ -912,9 +882,9 @@ dependencies = [ [[package]] name = "cranelift-codegen" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c23b5ab93367eba82bddf49b63d841d8a0b8b39fb89d82829de6647b3a747108" +checksum = "4ae927f1d8c0abddaa863acd201471d56e7fc6c3925104f4861ed4dc3e28b421" dependencies = [ "bumpalo", "cranelift-assembler-x64", @@ -939,9 +909,9 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c6118d26dd046455d31374b9432947ea2ba445c21fd8724370edd072f51f3bd" +checksum = "d3fcf1e3e6757834bd2584f4cbff023fcc198e9279dcb5d684b4bb27a9b19f54" dependencies = [ "cranelift-assembler-x64-meta", "cranelift-codegen-shared", @@ -952,24 +922,24 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a068c67f04f37de835fda87a10491e266eea9f9283d0887d8bd0a2c0726588a9" +checksum = "205dcb9e6ccf9d368b7466be675ff6ee54a63e36da6fe20e72d45169cf6fd254" [[package]] name = "cranelift-control" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ceb830549fcd7f05493a3b6d3d2bcfa4d43588b099e8c2393d2d140d6f7951" +checksum = "108eca9fcfe86026054f931eceaf57b722c1b97464bf8265323a9b5877238817" dependencies = [ "arbitrary", ] [[package]] name = "cranelift-entity" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b130f0edd119e7665f1875b8d686bd3fccefd9d74d10e9005cbcd76392e1831" +checksum = "a0d96496910065d3165f84ff8e1e393916f4c086f88ac8e1b407678bc78735aa" dependencies = [ "cranelift-bitset", "serde", @@ -978,9 +948,9 @@ dependencies = [ [[package]] name = "cranelift-frontend" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626a46aa207183bae011de3411a40951c494cea3fb2ef223d3118f75e13b23ca" +checksum = "e303983ad7e23c850f24d9c41fc3cb346e1b930f066d3966545e4c98dac5c9fb" dependencies = [ "cranelift-codegen", "log", @@ -990,15 +960,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09dab08a5129cf59919fdd4567e599ea955de62191a852982150ac42ce4ab21" +checksum = "24b0cf8d867d891245836cac7abafb0a5b0ea040a019d720702b3b8bcba40bfa" [[package]] name = "cranelift-native" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847b8eaef0f7095b401d3ce80587036495b94e7a051904df9e28d6cd14e69b94" +checksum = "e24b641e315443e27807b69c440fe766737d7e718c68beb665a2d69259c77bf3" dependencies = [ "cranelift-codegen", "libc", @@ -1007,9 +977,9 @@ dependencies = [ [[package]] name = "cranelift-srcgen" -version = "0.128.1" +version = "0.128.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a4849e90e778f2fcc9fd1b93bd074dbf6b8b6f420951f9617c4774fe71e7fc" +checksum = "a4e378a54e7168a689486d67ee1f818b7e5356e54ae51a1d7a53f4f13f7f8b7a" [[package]] name = "crc32fast" @@ -1101,9 +1071,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "debugid" @@ -1140,18 +1110,18 @@ dependencies = [ [[package]] name = "derive_more" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b768e943bed7bf2cab53df09f4bc34bfd217cdb57d971e769874c9a6710618" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d286bfdaf75e988b4a78e013ecd79c581e06399ab53fbacd2d916c2f904f30b" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "convert_case", "proc-macro2", @@ -1351,9 +1321,9 @@ checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "fastbloom" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18c1ddb9231d8554c2d6bdf4cfaabf0c59251658c68b6c95cd52dd0c513a912a" +checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" dependencies = [ "getrandom 0.3.4", "libm", @@ -1405,9 +1375,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "findshlibs" @@ -1429,9 +1399,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -1481,9 +1451,9 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.2.1" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824f08d01d0f496b3eca4f001a13cf17690a6ee930043d20817f547455fd98f8" +checksum = "baf68cef89750956493a66a10f512b9e58d9db21f2a573c079c0bdf1207a54a7" dependencies = [ "autocfg", "tokio", @@ -1621,9 +1591,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -1653,7 +1623,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" dependencies = [ "fallible-iterator", - "indexmap 2.12.1", + "indexmap 2.13.0", "stable_deref_trait", ] @@ -1665,9 +1635,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -1675,44 +1645,31 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.12.1", + "indexmap 2.13.0", "slab", "tokio", "tokio-util 0.7.18", "tracing", ] -[[package]] -name = "h264-parser" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2f85be813ce08f0569fcd816f256c6f4287c975d69a9a14ceacc309f1de967" - [[package]] name = "hang" -version = "0.10.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48979817ce00fbfeb6e65787fbb5b540ed221566272f85730dfde142aec6a0dc" +checksum = "c05205d948a355a7b260b82a652d64bc502a4ae42d523e25a6931220fdd5f0a0" dependencies = [ - "anyhow", "buf-list", "bytes", "derive_more", "futures", - "h264-parser", "hex", "lazy_static", - "m3u8-rs", "moq-lite", - "mp4-atom", - "num_enum", "regex", - "reqwest 0.12.26", - "scuffle-h265", "serde", "serde_json", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "url", @@ -1898,7 +1855,6 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots", ] [[package]] @@ -1916,14 +1872,13 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", - "futures-core", "futures-util", "http", "http-body", @@ -1942,9 +1897,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2047,9 +2002,9 @@ dependencies = [ [[package]] name = "id-arena" -version = "2.2.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" [[package]] name = "ident_case" @@ -2105,9 +2060,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -2122,7 +2077,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88" dependencies = [ "ahash", - "indexmap 2.12.1", + "indexmap 2.13.0", "is-terminal", "itoa", "log", @@ -2163,9 +2118,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -2208,9 +2163,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "ittapi" @@ -2283,9 +2238,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" dependencies = [ "once_cell", "wasm-bindgen", @@ -2293,13 +2248,13 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "10.2.0" +version = "10.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76e1c7d7df3e34443b3621b459b066a7b79644f059fc8b2db7070c825fd417e" +checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1" dependencies = [ "aws-lc-rs", "base64 0.22.1", - "getrandom 0.2.16", + "getrandom 0.2.17", "js-sys", "serde", "serde_json", @@ -2326,9 +2281,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.178" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libloading" @@ -2342,19 +2297,19 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall 0.6.0", + "redox_syscall 0.7.0", ] [[package]] @@ -2396,16 +2351,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" -[[package]] -name = "m3u8-rs" -version = "5.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1d7ba86f7ea62f17f4310c55e93244619ddc7dadfc7e565de1967e4e41e6e7" -dependencies = [ - "chrono", - "nom", -] - [[package]] name = "mach2" version = "0.4.3" @@ -2451,9 +2396,9 @@ checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memfd" @@ -2524,9 +2469,9 @@ dependencies = [ [[package]] name = "moq-lite" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25d751c1058cd3293fc22633ec84c6e03a5d31dd33e2fa4c700b01094384ac00" +checksum = "4462d2c8aabd99cd8be3f6704ff92b37446cdd5c576997cae5d74fda41705834" dependencies = [ "async-channel", "bytes", @@ -2535,7 +2480,7 @@ dependencies = [ "num_enum", "rand 0.9.2", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "web-async", @@ -2544,9 +2489,9 @@ dependencies = [ [[package]] name = "moq-native" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8d037495f71647c80e1c69a39f118f0647bbcb6ac1d6a60cc79d45b0ea863f" +checksum = "9d5a0aa1d9d584fd867f8e107d7e487cccc9eef47f27648baf2ebc3731c75706" dependencies = [ "anyhow", "clap", @@ -2559,7 +2504,7 @@ dependencies = [ "quinn", "rand 0.9.2", "rcgen", - "reqwest 0.12.26", + "reqwest 0.12.28", "rustls", "rustls-native-certs", "rustls-pemfile", @@ -2571,15 +2516,15 @@ dependencies = [ "tracing", "tracing-subscriber", "url", - "web-transport-quinn 0.10.1", + "web-transport-quinn 0.10.2", "web-transport-ws", ] [[package]] name = "moq-transport" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db4a29e1c6eafe9455a23df6a510310415349038b1b30fc6bff6f9d2a7a853" +checksum = "50d2f896962af0634a5b71f274a07590fbbe21f30c89d986066479078644b477" dependencies = [ "bytes", "futures", @@ -2594,22 +2539,6 @@ dependencies = [ "web-transport", ] -[[package]] -name = "mp4-atom" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b9fcf396d53fdf1c43a9afd38953412b9d782d11391807b473927317bb28f9" -dependencies = [ - "bytes", - "derive_more", - "num", - "paste", - "serde", - "thiserror 1.0.69", - "tokio", - "tracing", -] - [[package]] name = "multer" version = "3.1.0" @@ -2642,7 +2571,7 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe", + "openssl-probe 0.1.6", "openssl-sys", "schannel", "security-framework 2.11.1", @@ -2827,15 +2756,6 @@ dependencies = [ "syn", ] -[[package]] -name = "nutype-enum" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e13adea6de269faa0724df58f43f6fe2a81af7094f1dcb8b5b968eb2103cb3" -dependencies = [ - "scuffle-workspace-hack", -] - [[package]] name = "objc2-core-foundation" version = "0.3.2" @@ -2863,7 +2783,7 @@ checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "crc32fast", "hashbrown 0.15.5", - "indexmap 2.12.1", + "indexmap 2.13.0", "memchr", ] @@ -2935,6 +2855,12 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "openssl-sys" version = "0.9.111" @@ -2957,7 +2883,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] @@ -2971,7 +2897,7 @@ dependencies = [ "bytes", "http", "opentelemetry", - "reqwest 0.12.26", + "reqwest 0.12.28", ] [[package]] @@ -2985,9 +2911,9 @@ dependencies = [ "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.14.1", - "reqwest 0.12.26", - "thiserror 2.0.17", + "prost 0.14.3", + "reqwest 0.12.28", + "thiserror 2.0.18", "tokio", "tonic", "tracing", @@ -3001,7 +2927,7 @@ checksum = "a7175df06de5eaee9909d4805a3d07e28bb752c34cab57fa9cff549da596b30f" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.14.1", + "prost 0.14.3", "tonic", "tonic-prost", ] @@ -3018,7 +2944,7 @@ dependencies = [ "opentelemetry", "percent-encoding", "rand 0.9.2", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-stream", ] @@ -3105,7 +3031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.12.1", + "indexmap 2.13.0", ] [[package]] @@ -3196,7 +3122,7 @@ dependencies = [ "spin 0.10.0", "symbolic-demangle", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -3252,9 +3178,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -3294,12 +3220,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" dependencies = [ "bytes", - "prost-derive 0.14.1", + "prost-derive 0.14.3", ] [[package]] @@ -3351,9 +3277,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" dependencies = [ "anyhow", "itertools 0.14.0", @@ -3373,18 +3299,18 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" dependencies = [ - "prost 0.14.1", + "prost 0.14.3", ] [[package]] name = "pulley-interpreter" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45b733bc861727077314d961c926e41f4a2f366c9bf1c2b29caf8182b979e9fd" +checksum = "01051a5b172e07f9197b85060e6583b942aec679dac08416647bf7e7dc916b65" dependencies = [ "cranelift-bitset", "log", @@ -3394,9 +3320,9 @@ dependencies = [ [[package]] name = "pulley-macros" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "591c2768539dc694548d3aec1460b5afeb6bdeccb3ca1fbeac4d81a381fedc05" +checksum = "2cf194f5b1a415ef3a44ee35056f4009092cc4038a9f7e3c7c1e392f48ee7dbb" dependencies = [ "proc-macro2", "quote", @@ -3426,7 +3352,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls", "socket2", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -3450,7 +3376,7 @@ dependencies = [ "rustls-pki-types", "rustls-platform-verifier", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -3472,9 +3398,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.42" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -3513,7 +3439,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -3533,7 +3459,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -3542,14 +3468,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", ] @@ -3585,9 +3511,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec0a99f2de91c3cddc84b37e7db80e4d96b743e05607f647eb236fc0455907f" +checksum = "10b99e0098aa4082912d4c649628623db6aba77335e4f4569ff5083a6448b32e" dependencies = [ "aws-lc-rs", "rustls-pki-types", @@ -3616,9 +3542,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5" +checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" dependencies = [ "bitflags 2.10.0", ] @@ -3629,7 +3555,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -3656,9 +3582,9 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.13.3" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e249c660440317032a71ddac302f25f1d5dff387667bcc3978d1f77aa31ac34" +checksum = "08effbc1fa53aaebff69521a5c05640523fab037b34a4a2c109506bc938246fa" dependencies = [ "allocator-api2", "bumpalo", @@ -3670,9 +3596,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -3682,9 +3608,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -3693,9 +3619,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "relative-path" @@ -3708,9 +3634,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.26" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", @@ -3721,21 +3647,16 @@ dependencies = [ "http-body", "http-body-util", "hyper", - "hyper-rustls", "hyper-util", "js-sys", "log", "percent-encoding", "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls", "tower", "tower-http", "tower-service", @@ -3743,14 +3664,13 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", ] [[package]] name = "reqwest" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ "base64 0.22.1", "bytes", @@ -3807,7 +3727,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted 0.9.0", "windows-sys 0.52.0", @@ -3845,9 +3765,9 @@ dependencies = [ [[package]] name = "rubato" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddc303d435dbb461ae4b780286ce577005d5bb4956567038bd67a7204a71dc6" +checksum = "90173154a8a14e6adb109ea641743bc95ec81c093d94e70c6763565f7108ebeb" dependencies = [ "audioadapter", "audioadapter-buffers", @@ -3872,9 +3792,9 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.9.0" +version = "8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2" +checksum = "da0902e4c7c8e997159ab384e6d0fc91c221375f6894346ae107f47dd0f3ccaa" dependencies = [ "proc-macro2", "quote", @@ -3885,9 +3805,9 @@ dependencies = [ [[package]] name = "rust-embed-utils" -version = "8.9.0" +version = "8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475" +checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" dependencies = [ "sha2", "walkdir", @@ -3895,9 +3815,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" +checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc-hash" @@ -3997,11 +3917,11 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe", + "openssl-probe 0.2.1", "rustls-pki-types", "schannel", "security-framework 3.5.1", @@ -4018,9 +3938,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", @@ -4055,9 +3975,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.8" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "aws-lc-rs", "ring", @@ -4095,9 +4015,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "same-file" @@ -4126,7 +4046,7 @@ checksum = "774c33a6543af6939bd9b250c86c72d2dcc169db3c028e13ae07a6927c863dab" dependencies = [ "arraydeque", "smallvec 2.0.0-alpha.12", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -4152,9 +4072,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", @@ -4165,9 +4085,9 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4908ad288c5035a8eb12cfdf0d49270def0a268ee162b75eeee0f85d155a7c45" +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" dependencies = [ "proc-macro2", "quote", @@ -4181,49 +4101,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scuffle-bytes-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0417748c2a42f4a08d4e634b68b1d64f22a8c24bef2e7ac93df33aa61202a45b" -dependencies = [ - "byteorder", - "bytes", - "bytestring", - "scuffle-workspace-hack", -] - -[[package]] -name = "scuffle-expgolomb" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d21330974c941e4c0aedc1e7255ea809e8cbac51e135209f6d67843ad1b94d" -dependencies = [ - "scuffle-bytes-util", - "scuffle-workspace-hack", -] - -[[package]] -name = "scuffle-h265" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04b276c2f79846b7968abe6f87cedf951e06fd2a2b72d99c457e85d7e40f3fb" -dependencies = [ - "bitflags 2.10.0", - "byteorder", - "bytes", - "nutype-enum", - "scuffle-bytes-util", - "scuffle-expgolomb", - "scuffle-workspace-hack", -] - -[[package]] -name = "scuffle-workspace-hack" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8028ded836a0d9fabdfa4d713389b76a2098b5153f50a135c8faed7e3a3d5ae2" - [[package]] name = "security-framework" version = "2.11.1" @@ -4351,16 +4228,16 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -4414,9 +4291,9 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.12.1", + "indexmap 2.13.0", "schemars 0.9.0", - "schemars 1.2.0", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -4441,13 +4318,24 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "itoa", "ryu", "serde", "unsafe-libyaml", ] +[[package]] +name = "sfv" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d471eaefb14f4b30032525bdb124b36e55ba9cb1292080e06f1a236cd10fe87" +dependencies = [ + "base64 0.22.1", + "indexmap 2.13.0", + "ref-cast", +] + [[package]] name = "sha1" version = "0.10.6" @@ -4487,10 +4375,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -4511,9 +4400,9 @@ checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "sized-chunks" @@ -4527,9 +4416,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" @@ -4548,9 +4437,9 @@ checksum = "ef784004ca8777809dcdad6ac37629f0a97caee4c685fcea805278d81dd8b857" [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", "windows-sys 0.60.2", @@ -4587,7 +4476,7 @@ checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" name = "streamkit-api" version = "0.1.1" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "serde", "serde-saphyr 0.0.11", "serde_json", @@ -4605,7 +4494,7 @@ dependencies = [ "futures", "futures-util", "rand 0.9.2", - "reqwest 0.13.1", + "reqwest 0.13.2", "rustyline", "serde", "serde-saphyr 0.0.15", @@ -4628,11 +4517,11 @@ dependencies = [ "async-trait", "base64 0.22.1", "bytes", - "schemars 1.2.0", + "schemars 1.2.1", "serde", "serde_json", "smallvec 1.15.1", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-util 0.7.18", "tracing", @@ -4676,10 +4565,10 @@ dependencies = [ "ogg", "opentelemetry", "opus", - "reqwest 0.13.1", + "reqwest 0.13.2", "rquickjs", "rubato", - "schemars 1.2.0", + "schemars 1.2.1", "serde", "serde-saphyr 0.0.15", "serde_json", @@ -4787,10 +4676,10 @@ dependencies = [ "opentelemetry_sdk", "opus", "pprof", - "reqwest 0.13.1", + "reqwest 0.13.2", "rust-embed", "rustls", - "schemars 1.2.0", + "schemars 1.2.1", "semver", "serde", "serde-saphyr 0.0.15", @@ -4805,7 +4694,7 @@ dependencies = [ "sysinfo", "tar", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", "tikv-jemallocator", "time", "tokio", @@ -4845,9 +4734,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symbolic-common" -version = "12.17.0" +version = "12.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d8046c5674ab857104bc4559d505f4809b8060d57806e45d49737c97afeb60" +checksum = "751a2823d606b5d0a7616499e4130a516ebd01a44f39811be2b9600936509c23" dependencies = [ "debugid", "memmap2", @@ -4857,11 +4746,11 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "12.17.0" +version = "12.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1accb6e5c4b0f682de907623912e616b44be1c9e725775155546669dbff720ec" +checksum = "79b237cfbe320601dd24b4ac817a5b68bb28f5508e33f08d42be0682cadc8ac9" dependencies = [ - "cpp_demangle", + "cpp_demangle 0.5.1", "rustc-demangle", "symbolic-common", ] @@ -4977,9 +4866,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -5022,9 +4911,9 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ "bitflags 2.10.0", "core-foundation 0.9.4", @@ -5107,11 +4996,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -5127,9 +5016,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -5317,8 +5206,12 @@ checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", + "rustls", + "rustls-pki-types", "tokio", + "tokio-rustls", "tungstenite 0.24.0", + "webpki-roots 0.26.11", ] [[package]] @@ -5381,7 +5274,7 @@ version = "0.9.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "serde_core", "serde_spanned 1.0.4", "toml_datetime 0.7.5+spec-1.1.0", @@ -5414,7 +5307,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", @@ -5428,7 +5321,7 @@ version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "winnow", @@ -5457,9 +5350,9 @@ checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tonic" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" +checksum = "a286e33f82f8a1ee2df63f4fa35c0becf4a85a0cb03091a15fd7bf0b402dc94a" dependencies = [ "async-trait", "axum", @@ -5486,12 +5379,12 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" +checksum = "d6c55a2d6a14174563de34409c9f92ff981d006f56da9c6ecd40d9d4a31500b0" dependencies = [ "bytes", - "prost 0.14.1", + "prost 0.14.3", "tonic", ] @@ -5503,7 +5396,7 @@ checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", - "indexmap 2.12.1", + "indexmap 2.13.0", "pin-project-lite", "slab", "sync_wrapper", @@ -5520,7 +5413,6 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "async-compression", "bitflags 2.10.0", "bytes", "futures-core", @@ -5574,7 +5466,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf" dependencies = [ "crossbeam-channel", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", "tracing-subscriber", ] @@ -5613,16 +5505,13 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6e5658463dd88089aba75c7791e1d3120633b1bfde22478b28f625a9bb1b8e" +checksum = "1ac28f2d093c6c477eaa76b23525478f38de514fa9aeb1285738d4b97a9552fc" dependencies = [ "js-sys", "opentelemetry", - "opentelemetry_sdk", - "rustversion", "smallvec 1.15.1", - "thiserror 2.0.17", "tracing", "tracing-core", "tracing-log", @@ -5684,7 +5573,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4994acea2522cd2b3b85c1d9529a55991e3ad5e25cdcd3de9d505972c4379424" dependencies = [ "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "ts-rs-macros", ] @@ -5713,6 +5602,8 @@ dependencies = [ "httparse", "log", "rand 0.8.5", + "rustls", + "rustls-pki-types", "sha1", "thiserror 1.0.69", "utf-8", @@ -5732,7 +5623,7 @@ dependencies = [ "native-tls", "rand 0.9.2", "sha1", - "thiserror 2.0.17", + "thiserror 2.0.18", "utf-8", ] @@ -5753,9 +5644,9 @@ dependencies = [ [[package]] name = "unicase" -version = "2.8.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-ident" @@ -5838,9 +5729,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ "getrandom 0.3.4", "js-sys", @@ -5904,18 +5795,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", @@ -5926,11 +5817,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.56" +version = "0.4.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" +checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -5939,9 +5831,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5949,9 +5841,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ "bumpalo", "proc-macro2", @@ -5962,9 +5854,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] @@ -5978,15 +5870,15 @@ dependencies = [ "anyhow", "heck", "im-rc", - "indexmap 2.12.1", + "indexmap 2.13.0", "log", "petgraph", "serde", "serde_derive", "serde_yaml", "smallvec 1.15.1", - "wasm-encoder", - "wasmparser", + "wasm-encoder 0.243.0", + "wasmparser 0.243.0", "wat", ] @@ -5997,14 +5889,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c55db9c896d70bd9fa535ce83cd4e1f2ec3726b0edd2142079f594fc3be1cb35" dependencies = [ "leb128fmt", - "wasmparser", + "wasmparser 0.243.0", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser 0.244.0", ] [[package]] name = "wasm-streams" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" dependencies = [ "futures-util", "js-sys", @@ -6021,11 +5923,22 @@ checksum = "f6d8db401b0528ec316dfbe579e6ab4152d61739cfe076706d2009127970159d" dependencies = [ "bitflags 2.10.0", "hashbrown 0.15.5", - "indexmap 2.12.1", + "indexmap 2.13.0", "semver", "serde", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.10.0", + "indexmap 2.13.0", + "semver", +] + [[package]] name = "wasmprinter" version = "0.243.0" @@ -6034,14 +5947,14 @@ checksum = "eb2b6035559e146114c29a909a3232928ee488d6507a1504d8934e8607b36d7b" dependencies = [ "anyhow", "termcolor", - "wasmparser", + "wasmparser 0.243.0", ] [[package]] name = "wasmtime" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a1198409bd281650c097b95ac1d20a82e5b403a5ca7223ea607fe1272125d5a" +checksum = "a19f56cece843fa95dd929f5568ff8739c7e3873b530ceea9eda2aa02a0b4142" dependencies = [ "addr2line", "anyhow", @@ -6055,7 +5968,7 @@ dependencies = [ "fxprof-processed-profile", "gimli", "hashbrown 0.15.5", - "indexmap 2.12.1", + "indexmap 2.13.0", "ittapi", "libc", "log", @@ -6075,8 +5988,8 @@ dependencies = [ "target-lexicon", "tempfile", "wasm-compose", - "wasm-encoder", - "wasmparser", + "wasm-encoder 0.243.0", + "wasmparser 0.243.0", "wasmtime-environ", "wasmtime-internal-cache", "wasmtime-internal-component-macro", @@ -6096,16 +6009,16 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b9af430b11ff3cd63fbef54cf38e26154089c179316b8a5e400b8ba2d0ebf1" +checksum = "3bf9dff572c950258548cbbaf39033f68f8dcd0b43b22e80def9fe12d532d3e5" dependencies = [ "anyhow", - "cpp_demangle", + "cpp_demangle 0.4.5", "cranelift-bitset", "cranelift-entity", "gimli", - "indexmap 2.12.1", + "indexmap 2.13.0", "log", "object", "postcard", @@ -6115,17 +6028,17 @@ dependencies = [ "serde_derive", "smallvec 1.15.1", "target-lexicon", - "wasm-encoder", - "wasmparser", + "wasm-encoder 0.243.0", + "wasmparser 0.243.0", "wasmprinter", "wasmtime-internal-component-util", ] [[package]] name = "wasmtime-internal-cache" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37f09527993e5d3ab68857fa8b4cddfb300ec89d8bbe6ba33e279f0234367e73" +checksum = "7f52a985f5b5dae53147fc596f3a313c334e2c24fd1ba708634e1382f6ecd727" dependencies = [ "base64 0.22.1", "directories-next", @@ -6143,9 +6056,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-component-macro" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5c69a6d1514ee5bcae494f69f3fee7a20528a38048fc9e847e0833af71071b" +checksum = "7920dc7dcb608352f5fe93c52582e65075b7643efc5dac3fc717c1645a8d29a0" dependencies = [ "anyhow", "proc-macro2", @@ -6158,15 +6071,15 @@ dependencies = [ [[package]] name = "wasmtime-internal-component-util" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aa29030e4457259121400fa9043e9af3bb29e004e2f56b5e26caf1a2728fc5f" +checksum = "066f5aed35aa60580a2ac0df145c0f0d4b04319862fee1d6036693e1cca43a12" [[package]] name = "wasmtime-internal-cranelift" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "452397e623732c58fd9ce0545c62210965c0446155667fbd59c380642ce6df1b" +checksum = "afb8002dc415b7773d7949ee360c05ee8f91627ec25a7a0b01ee03831bdfdda1" dependencies = [ "cfg-if", "cranelift-codegen", @@ -6181,8 +6094,8 @@ dependencies = [ "pulley-interpreter", "smallvec 1.15.1", "target-lexicon", - "thiserror 2.0.17", - "wasmparser", + "thiserror 2.0.18", + "wasmparser 0.243.0", "wasmtime-environ", "wasmtime-internal-math", "wasmtime-internal-unwinder", @@ -6191,9 +6104,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-fiber" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa94737a693a38227edca24aaa995d3a3a80b2fe88a7de029345bd35c0d19b13" +checksum = "7f9c562c5a272bc9f615d8f0c085a4360bafa28eef9aa5947e63d204b1129b22" dependencies = [ "cc", "cfg-if", @@ -6206,9 +6119,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-jit-debug" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d760a8909786674007cc1a65fd999d280502437c73b2eb4fab2fe6b714effe" +checksum = "db673148f26e1211db3913c12c75594be9e3858a71fa297561e9162b1a49cfb0" dependencies = [ "cc", "object", @@ -6218,36 +6131,36 @@ dependencies = [ [[package]] name = "wasmtime-internal-jit-icache-coherence" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b46da671c07242b5f5eab491b12d6c25dd26929f1693c055fcca94489ef8f5" +checksum = "bada5ca1cc47df7d14100e2254e187c2486b426df813cea2dd2553a7469f7674" dependencies = [ + "anyhow", "cfg-if", "libc", - "wasmtime-environ", "windows-sys 0.61.2", ] [[package]] name = "wasmtime-internal-math" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d1f0763c6f6f78e410f964db9f53d9b84ab4cc336945e81f0b78717b0a9934e" +checksum = "cf6f615d528eda9adc6eefb062135f831b5215c348f4c3ec3e143690c730605b" dependencies = [ "libm", ] [[package]] name = "wasmtime-internal-slab" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f641abc8d6c6d5464615222b0617c85317f391c14aaa60b13183e4e2a63462" +checksum = "da169d4f789b586e1b2612ba8399c653ed5763edf3e678884ba785bb151d018f" [[package]] name = "wasmtime-internal-unwinder" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6916a23c8369d3caf04630f55598b5c326782817faa318c5e9355ed7dea8f172" +checksum = "4888301f3393e4e8c75c938cce427293fade300fee3fc8fd466fdf3e54ae068e" dependencies = [ "cfg-if", "cranelift-codegen", @@ -6258,9 +6171,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-versioned-export-macros" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a724908757d1b5c174984f4215e377183de1d4fe789f3755f6b4fd7928274fb" +checksum = "63ba3124cc2cbcd362672f9f077303ccc4cd61daa908f73447b7fdaece75ff9f" dependencies = [ "proc-macro2", "quote", @@ -6269,16 +6182,16 @@ dependencies = [ [[package]] name = "wasmtime-internal-winch" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa86f52a53d2bfcb60673b039a0e07bbcc2dd3e5a6459df1dcc195e563045479" +checksum = "90a4182515dabba776656de4ebd62efad03399e261cf937ecccb838ce8823534" dependencies = [ "cranelift-codegen", "gimli", "log", "object", "target-lexicon", - "wasmparser", + "wasmparser 0.243.0", "wasmtime-environ", "wasmtime-internal-cranelift", "winch-codegen", @@ -6286,22 +6199,22 @@ dependencies = [ [[package]] name = "wasmtime-internal-wit-bindgen" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c0d0892239910953c6f3e9ff5cf418c29eb964470ea855b64b2c0af67f2b8a" +checksum = "87acbd416227cdd279565ba49e57cf7f08d112657c3b3f39b70250acdfd094fe" dependencies = [ "anyhow", "bitflags 2.10.0", "heck", - "indexmap 2.12.1", + "indexmap 2.13.0", "wit-parser", ] [[package]] name = "wasmtime-wasi" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b48028f5a86dc62c4d23b4769f5a59dcafb572c172b7b94a53619820a2727f3d" +checksum = "d9a1bdb4948463ed22559a640e687fed0df50b66353144aa6a9496c041ecd927" dependencies = [ "anyhow", "async-trait", @@ -6318,7 +6231,7 @@ dependencies = [ "io-lifetimes", "rustix 1.1.3", "system-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "url", @@ -6330,9 +6243,9 @@ dependencies = [ [[package]] name = "wasmtime-wasi-io" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb53401d473beef46b530a5d6394f3ea9ccdbabc1b66456c72b8ad6015060697" +checksum = "d7873d8b990d3cf1105ef491abf2b3cf1e19ff6722d24d5ca662026ea082cdff" dependencies = [ "anyhow", "async-trait", @@ -6352,24 +6265,24 @@ dependencies = [ [[package]] name = "wast" -version = "243.0.0" +version = "244.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df21d01c2d91e46cb7a221d79e58a2d210ea02020d57c092e79255cc2999ca7f" +checksum = "b2e7b9f9e23311275920e3d6b56d64137c160cf8af4f84a7283b36cfecbf4acb" dependencies = [ "bumpalo", "leb128fmt", "memchr", "unicode-width", - "wasm-encoder", + "wasm-encoder 0.244.0", ] [[package]] name = "wat" -version = "1.243.0" +version = "1.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226a9a91cd80a50449312fef0c75c23478fcecfcc4092bdebe1dc8e760ef521b" +checksum = "bbf35b87ed352f9ab6cd0732abde5a67dd6153dfd02c493e61459218b19456fa" dependencies = [ - "wast 243.0.0", + "wast 244.0.0", ] [[package]] @@ -6385,9 +6298,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" dependencies = [ "js-sys", "wasm-bindgen", @@ -6423,19 +6336,33 @@ checksum = "974fa1e325e6cc5327de8887f189a441fcff4f8eedcd31ec87f0ef0cc5283fbc" dependencies = [ "bytes", "http", - "thiserror 2.0.17", + "thiserror 2.0.18", "url", ] [[package]] name = "web-transport-proto" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b5400535d6dd4c07dc86e83651a838fd513de7f5011d4e4eafa239fa4d0ded4" +checksum = "660175a6d1643adb93b71c4f853d4f20f0fce47f53ae579afe9f7711fe84870d" dependencies = [ "bytes", "http", - "thiserror 2.0.17", + "thiserror 2.0.18", + "tokio", + "url", +] + +[[package]] +name = "web-transport-proto" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee133824c73a492e5739a449fb088571d8a418c2de29520035639107d6a7d6bc" +dependencies = [ + "bytes", + "http", + "sfv", + "thiserror 2.0.18", "tokio", "url", ] @@ -6460,29 +6387,29 @@ dependencies = [ [[package]] name = "web-transport-quinn" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91815d3170c715230c94b5107a71ccf81646513e548ee1408c3ce285d021d6ca" +checksum = "b1f44b4e68a3e7adb790793e24ec8b5923a610a8c2df1d6cd58849f9e4759d04" dependencies = [ "bytes", "futures", "http", - "log", "quinn", "rustls", "rustls-native-certs", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", + "tracing", "url", - "web-transport-proto 0.3.0", + "web-transport-proto 0.3.1", "web-transport-trait", ] [[package]] name = "web-transport-trait" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4bafa8c6ff708042f67ef8031ca0f342822fd785b70f36a4b2c014760fc442" +checksum = "2615c30ed29953bb3727391850279a25c948c0b7a4ed2343d3a78e1d3cce2f7c" dependencies = [ "bytes", ] @@ -6502,16 +6429,16 @@ dependencies = [ [[package]] name = "web-transport-ws" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aee7ae0f2a6f3596dc2842e20f2ad0cf046211414979d67e445760348b60becf" +checksum = "56c9b75112f51e492294dcad75a98046764bb8e6147e681b1783c64d2d7aab40" dependencies = [ "bytes", "futures", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-tungstenite 0.24.0", - "web-transport-proto 0.3.0", + "web-transport-proto 0.4.0", "web-transport-trait", ] @@ -6535,31 +6462,40 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3e3b5f5e80bc89f30ce8d0343bf4e5f12341c51f3e26cbeecbc7c85443e85b" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "1.0.4" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.6", +] + +[[package]] +name = "webpki-roots" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" dependencies = [ "rustls-pki-types", ] [[package]] name = "wiggle" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6ae01b30b9f18d138161960031656929f85d747b3dd4bcfad7ee34fe097a65" +checksum = "1f05d2a9932ca235984248dc98471ae83d1985e095682d049af4c296f54f0fb4" dependencies = [ "anyhow", "bitflags 2.10.0", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "wasmtime", "wiggle-macro", @@ -6567,9 +6503,9 @@ dependencies = [ [[package]] name = "wiggle-generate" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9938a7719a726027b28bfc435bd162004a73a31410615894a920a80ee8119216" +checksum = "57f773d51c1696bd7d028aa35c884d9fc58f48d79a1176dfbad6c908de314235" dependencies = [ "anyhow", "heck", @@ -6581,9 +6517,9 @@ dependencies = [ [[package]] name = "wiggle-macro" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b933908b084f69998d6a3d1072a32e534d1f9888d04b4ffd0fe179c7759af239" +checksum = "0e976fe0cecd60041f66b15ad45ebc997952af13da9bf9d90261c7b025057edc" dependencies = [ "proc-macro2", "quote", @@ -6630,9 +6566,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winch-codegen" -version = "41.0.1" +version = "41.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37f6bea231cd5a9b4e70f30172556c6793dedf4308dcb45902e6be3e1cb0448d" +checksum = "a4f31dcfdfaf9d6df9e1124d7c8ee6fc29af5b99b89d11ae731c138e0f5bd77b" dependencies = [ "anyhow", "cranelift-assembler-x64", @@ -6641,8 +6577,8 @@ dependencies = [ "regalloc2", "smallvec 1.15.1", "target-lexicon", - "thiserror 2.0.17", - "wasmparser", + "thiserror 2.0.18", + "wasmparser 0.243.0", "wasmtime-environ", "wasmtime-internal-cranelift", "wasmtime-internal-math", @@ -7068,9 +7004,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "wit-bindgen-rt" @@ -7089,14 +7025,14 @@ checksum = "df983a8608e513d8997f435bb74207bf0933d0e49ca97aa9d8a6157164b9b7fc" dependencies = [ "anyhow", "id-arena", - "indexmap 2.12.1", + "indexmap 2.13.0", "log", "semver", "serde", "serde_derive", "serde_json", "unicode-xid", - "wasmparser", + "wasmparser 0.243.0", ] [[package]] @@ -7119,9 +7055,9 @@ checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "x509-parser" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3e137310115a65136898d2079f003ce33331a6c4b0d51f1531d1be082b6425" +checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202" dependencies = [ "asn1-rs", "aws-lc-rs", @@ -7131,7 +7067,7 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] @@ -7185,18 +7121,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", @@ -7265,9 +7201,9 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.14" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea" +checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" [[package]] name = "zstd" diff --git a/apps/skit/Cargo.toml b/apps/skit/Cargo.toml index 8dca0def..67b4a14b 100644 --- a/apps/skit/Cargo.toml +++ b/apps/skit/Cargo.toml @@ -115,7 +115,7 @@ jemalloc_pprof = { version = "0.8", features = ["symbolize"], optional = true } dhat = { version = "0.3", optional = true } # MoQ support (optional) -moq-native = { version = "0.11.0", optional = true } +moq-native = { version = "0.12.1", optional = true } async-trait = { workspace = true } # For glob pattern matching in permissions @@ -130,7 +130,7 @@ getrandom = "0.3" aws-lc-rs = "1" # For MoQ auth path matching (optional, with moq feature) -moq-lite = { version = "0.11.0", optional = true } +moq-lite = { version = "0.13.0", optional = true } blake2 = "0.10.6" [features] diff --git a/apps/skit/src/moq_gateway.rs b/apps/skit/src/moq_gateway.rs index a81a78cf..f9c433dd 100644 --- a/apps/skit/src/moq_gateway.rs +++ b/apps/skit/src/moq_gateway.rs @@ -84,7 +84,7 @@ impl MoqGateway { #[allow(clippy::cognitive_complexity)] pub async fn accept_connection( &self, - session: moq_native::web_transport_quinn::Session, + request: moq_native::Request, path: String, auth: Option>, ) -> Result<(), String> { @@ -123,8 +123,8 @@ impl MoqGateway { if let Some(connection_tx) = connection_tx { let (response_tx, response_rx) = oneshot::channel(); - // Type-erase the WebTransport session - let session_boxed: streamkit_core::moq_gateway::WebTransportSession = Box::new(session); + // Type-erase the moq-native Request + let session_boxed: streamkit_core::moq_gateway::WebTransportSession = Box::new(request); let conn = MoqConnection { path: path.clone(), session: session_boxed, response_tx, auth }; diff --git a/apps/skit/src/server.rs b/apps/skit/src/server.rs index d3e4ab98..f914046e 100644 --- a/apps/skit/src/server.rs +++ b/apps/skit/src/server.rs @@ -3214,17 +3214,20 @@ fn start_moq_webtransport_acceptor( key_path = %config.server.key_path, "Using provided TLS certificates for MoQ WebTransport" ); - ServerTlsConfig { - cert: vec![std::path::PathBuf::from(&config.server.cert_path)], - key: vec![std::path::PathBuf::from(&config.server.key_path)], - generate: vec![], - } + let mut tls = ServerTlsConfig::default(); + tls.cert = vec![std::path::PathBuf::from(&config.server.cert_path)]; + tls.key = vec![std::path::PathBuf::from(&config.server.key_path)]; + tls } else { info!("Auto-generating self-signed certificate for MoQ WebTransport (14-day validity for local development)"); - ServerTlsConfig { cert: vec![], key: vec![], generate: vec!["localhost".to_string()] } + let mut tls = ServerTlsConfig::default(); + tls.generate = vec!["localhost".to_string()]; + tls }; - let moq_config = MoqServerConfig { bind: Some(addr), tls }; + let mut moq_config = MoqServerConfig::default(); + moq_config.bind = Some(addr); + moq_config.tls = tls; info!( address = %addr, @@ -3256,142 +3259,41 @@ fn start_moq_webtransport_acceptor( let auth_state = Arc::clone(&auth_state); tokio::spawn(async move { - match request { - moq_native::Request::WebTransport(wt_request) => { - let url = wt_request.url(); - let path = url.path().to_string(); - - // SECURITY: Never log the full URL (may contain jwt) - debug!(path = %path, "Received WebTransport connection request"); - - // Validate MoQ auth if enabled - let moq_auth = if auth_state.is_enabled() { - // Extract jwt from query params - let jwt = url - .query_pairs() - .find(|(k, _)| k == "jwt") - .map(|(_, v)| v.to_string()); - - let Some(jwt) = jwt else { - warn!(path = %path, "MoQ auth failed: missing jwt parameter"); - let _ = wt_request - .close(axum::http::StatusCode::UNAUTHORIZED) - .await; - return; - }; - - // Validate JWT - let claims = match auth_state.validate_moq_token(&jwt) { - Ok(c) => c, - Err(e) => { - warn!(path = %path, error = %e, "MoQ JWT validation failed"); - let _ = wt_request - .close(axum::http::StatusCode::UNAUTHORIZED) - .await; - return; - }, - }; - - // Check audience - if claims.aud != crate::auth::AUD_MOQ { - warn!(path = %path, expected = crate::auth::AUD_MOQ, actual = %claims.aud, "MoQ auth failed: wrong audience"); - let _ = wt_request - .close(axum::http::StatusCode::UNAUTHORIZED) - .await; - return; - } - - let token_hash = crate::auth::hash_token(&jwt); - - // Enforce "tokens we mint" policy (parity with HTTP API auth). - let metadata_store = auth_state.token_metadata_store().cloned(); - let Some(metadata_store) = metadata_store else { - warn!(path = %path, "MoQ auth failed: token metadata store not available"); - let _ = wt_request - .close(axum::http::StatusCode::SERVICE_UNAVAILABLE) - .await; - return; - }; - - let meta = match metadata_store.get(&claims.jti).await { - Ok(Some(meta)) => meta, - Ok(None) => { - warn!(path = %path, jti = %claims.jti, "MoQ auth failed: token not recognized (not minted by this server)"); - let _ = wt_request - .close(axum::http::StatusCode::UNAUTHORIZED) - .await; - return; - }, - Err(e) => { - warn!(path = %path, error = %e, "MoQ auth failed: metadata store error"); - let _ = wt_request - .close(axum::http::StatusCode::SERVICE_UNAVAILABLE) - .await; - return; - }, - }; - - // Extra robustness: ensure the presented token matches the stored hash. - if meta.token_hash != token_hash { - warn!(path = %path, jti = %claims.jti, "MoQ auth failed: token hash mismatch"); - let _ = wt_request - .close(axum::http::StatusCode::UNAUTHORIZED) - .await; - return; - } - - if meta.revoked { - warn!(path = %path, jti = %claims.jti, "MoQ auth failed: token revoked"); - let _ = wt_request - .close(axum::http::StatusCode::UNAUTHORIZED) - .await; - return; - } - - // Check revocation - if auth_state.is_revoked(&token_hash) { - warn!(path = %path, "MoQ auth failed: token revoked"); - let _ = wt_request - .close(axum::http::StatusCode::UNAUTHORIZED) - .await; - return; - } - - // Verify root matches path and reduce permissions - match crate::auth::verify_moq_token(&claims, &path) { - Ok(ctx) => Some(Arc::new(ctx) - as Arc< - dyn streamkit_core::moq_gateway::MoqAuthChecker, - >), - Err(e) => { - warn!(path = %path, error = %e, "MoQ path verification failed"); - let _ = wt_request - .close(axum::http::StatusCode::UNAUTHORIZED) - .await; - return; - }, - } - } else { - None - }; - - match wt_request.ok().await { - Ok(session) => { - if let Err(e) = gateway - .accept_connection(session, path.clone(), moq_auth) - .await - { - warn!(path = %path, error = %e, "Failed to route WebTransport connection"); - } - }, - Err(e) => { - warn!(path = %path, error = %e, "Failed to accept WebTransport session"); - }, - } - }, - moq_native::Request::Quic(_quic_request) => { - debug!("Received raw QUIC connection (not WebTransport), ignoring"); - }, + // Extract URL data before consuming the request. + // request.url() borrows, so we copy what we need first. + let (path, jwt_param) = { + let Some(url) = request.url() else { + debug!("Received MoQ connection without URL (raw QUIC), ignoring"); + return; + }; + let path = url.path().to_string(); + let jwt_param = url + .query_pairs() + .find(|(k, _)| k == "jwt") + .map(|(_, v)| v.to_string()); + (path, jwt_param) + }; + + // SECURITY: Never log the full URL (may contain jwt) + debug!(path = %path, "Received MoQ connection request"); + + // Validate MoQ auth if enabled + let moq_auth = if auth_state.is_enabled() { + match validate_moq_auth(&auth_state, &path, jwt_param).await { + Ok(ctx) => Some(ctx), + Err(status) => { + let _ = request.reject(status).await; + return; + }, + } + } else { + None + }; + + if let Err(e) = + gateway.accept_connection(request, path.clone(), moq_auth).await + { + warn!(path = %path, error = %e, "Failed to route MoQ connection"); } }); } @@ -3407,6 +3309,75 @@ fn start_moq_webtransport_acceptor( Ok(()) } +/// Validates MoQ auth for an incoming connection, returning the auth context on success +/// or the HTTP status code to reject with on failure. +#[cfg(feature = "moq")] +async fn validate_moq_auth( + auth_state: &crate::auth::AuthState, + path: &str, + jwt_param: Option, +) -> Result, axum::http::StatusCode> { + let Some(jwt) = jwt_param else { + warn!(path = %path, "MoQ auth failed: missing jwt parameter"); + return Err(axum::http::StatusCode::UNAUTHORIZED); + }; + + // Validate JWT + let claims = auth_state.validate_moq_token(&jwt).map_err(|e| { + warn!(path = %path, error = %e, "MoQ JWT validation failed"); + axum::http::StatusCode::UNAUTHORIZED + })?; + + // Check audience + if claims.aud != crate::auth::AUD_MOQ { + warn!(path = %path, expected = crate::auth::AUD_MOQ, actual = %claims.aud, "MoQ auth failed: wrong audience"); + return Err(axum::http::StatusCode::UNAUTHORIZED); + } + + let token_hash = crate::auth::hash_token(&jwt); + + // Enforce "tokens we mint" policy (parity with HTTP API auth). + let metadata_store = auth_state.token_metadata_store().cloned().ok_or_else(|| { + warn!(path = %path, "MoQ auth failed: token metadata store not available"); + axum::http::StatusCode::SERVICE_UNAVAILABLE + })?; + + let meta = metadata_store.get(&claims.jti).await.map_err(|e| { + warn!(path = %path, error = %e, "MoQ auth failed: metadata store error"); + axum::http::StatusCode::SERVICE_UNAVAILABLE + })?; + + let Some(meta) = meta else { + warn!(path = %path, jti = %claims.jti, "MoQ auth failed: token not recognized (not minted by this server)"); + return Err(axum::http::StatusCode::UNAUTHORIZED); + }; + + // Extra robustness: ensure the presented token matches the stored hash. + if meta.token_hash != token_hash { + warn!(path = %path, jti = %claims.jti, "MoQ auth failed: token hash mismatch"); + return Err(axum::http::StatusCode::UNAUTHORIZED); + } + + if meta.revoked { + warn!(path = %path, jti = %claims.jti, "MoQ auth failed: token revoked"); + return Err(axum::http::StatusCode::UNAUTHORIZED); + } + + // Check revocation + if auth_state.is_revoked(&token_hash) { + warn!(path = %path, "MoQ auth failed: token revoked"); + return Err(axum::http::StatusCode::UNAUTHORIZED); + } + + // Verify root matches path and reduce permissions + crate::auth::verify_moq_token(&claims, path) + .map_err(|e| { + warn!(path = %path, error = %e, "MoQ path verification failed"); + axum::http::StatusCode::UNAUTHORIZED + }) + .map(|ctx| Arc::new(ctx) as Arc) +} + /// Starts the HTTP/HTTPS server and optional MoQ WebTransport acceptor. /// /// # Errors diff --git a/crates/nodes/Cargo.toml b/crates/nodes/Cargo.toml index e2f1ed32..c6eb5944 100644 --- a/crates/nodes/Cargo.toml +++ b/crates/nodes/Cargo.toml @@ -46,10 +46,10 @@ url = { version = "2.5.8", optional = true, features = ["serde"] } rquickjs = { version = "0.11", features = ["array-buffer", "futures", "loader", "parallel"], optional = true } wildmatch = { version = "2.6", optional = true } -moq-transport = { version = "0.12.1", optional = true } -moq-native = { version = "0.11.0", optional = true } -moq-lite = { version = "0.11.0", optional = true } -hang = { version = "0.10.0", optional = true } +moq-transport = { version = "0.12.2", optional = true } +moq-native = { version = "0.12.1", optional = true } +moq-lite = { version = "0.13.0", optional = true } +hang = { version = "0.13.0", optional = true } # For local dev, debugging moq stuff # moq-transport = { version = "0.11.0", optional = true } diff --git a/crates/nodes/src/transport/moq/mod.rs b/crates/nodes/src/transport/moq/mod.rs index d8b52fa3..e187743a 100644 --- a/crates/nodes/src/transport/moq/mod.rs +++ b/crates/nodes/src/transport/moq/mod.rs @@ -31,6 +31,11 @@ use streamkit_core::{ static SHARED_INSECURE_CLIENT: OnceLock> = OnceLock::new(); +/// Returns a cached `moq_native::Client` with TLS verification disabled. +/// +/// In moq-native 0.12, publish/consume origins are set on the `Client` via builder methods +/// (`with_publish` / `with_consume`) before calling `connect()`. The cached client has +/// neither set, so callers must clone and configure it for each connection. fn shared_insecure_client() -> Result { let client = SHARED_INSECURE_CLIENT.get_or_init(|| { let mut client_config = moq_native::ClientConfig::default(); @@ -46,6 +51,27 @@ fn shared_insecure_client() -> Result { } } +/// Serialize a catalog to JSON with `priority` fields injected into `video` and `audio`. +/// +/// The published `@moq/hang` JS client (0.1.2) still requires `priority` in the catalog +/// schema, but the Rust `hang` 0.13.0 crate removed it from the structs. +/// The upstream JS source has already dropped the requirement, but a new npm release +/// hasn't been published yet. This shim keeps the two sides compatible. +pub(super) fn catalog_to_json(catalog: &hang::catalog::Catalog) -> Result { + let mut value = serde_json::to_value(catalog) + .map_err(|e| StreamKitError::Runtime(format!("Failed to serialize catalog: {e}")))?; + + if let Some(video) = value.get_mut("video").and_then(|v| v.as_object_mut()) { + video.entry("priority").or_insert(serde_json::json!(60)); + } + if let Some(audio) = value.get_mut("audio").and_then(|v| v.as_object_mut()) { + audio.entry("priority").or_insert(serde_json::json!(80)); + } + + serde_json::to_string(&value) + .map_err(|e| StreamKitError::Runtime(format!("Failed to serialize catalog: {e}"))) +} + pub(super) fn redact_url_str_for_logs(raw: &str) -> String { raw.parse::().map_or_else( |_| raw.split(['?', '#']).next().unwrap_or(raw).to_string(), diff --git a/crates/nodes/src/transport/moq/peer.rs b/crates/nodes/src/transport/moq/peer.rs index abbdd59e..e28965fe 100644 --- a/crates/nodes/src/transport/moq/peer.rs +++ b/crates/nodes/src/transport/moq/peer.rs @@ -532,13 +532,11 @@ impl MoqPeerNode { ) -> Result>, StreamKitError> { let path = moq_connection.path.clone(); - // Extract the WebTransport session - let web_transport_session = *moq_connection + // Extract the moq-native Request + let request = *moq_connection .session - .downcast::() - .map_err(|_| { - StreamKitError::Runtime("Invalid WebTransport session type".to_string()) - })?; + .downcast::() + .map_err(|_| StreamKitError::Runtime("Invalid MoQ request type".to_string()))?; // Notify gateway that we accepted the connection let _ = moq_connection @@ -547,16 +545,14 @@ impl MoqPeerNode { // Create origin for receiving from client let client_publish_origin = moq_lite::Origin::produce(); - let receive_origin = client_publish_origin.consumer.clone(); + let receive_origin = client_publish_origin.consume(); // Accept MoQ session (publisher only sends, no server publish needed) - let session = moq_lite::Session::accept( - web_transport_session, - None, // No server publish origin - publisher is receive-only - Some(client_publish_origin.producer), - ) - .await - .map_err(|e| StreamKitError::Runtime(format!("Failed to accept session: {e}")))?; + let session = request + .with_consume(client_publish_origin) + .accept() + .await + .map_err(|e| StreamKitError::Runtime(format!("Failed to accept session: {e}")))?; let handle = tokio::spawn(async move { let _permit = permit; @@ -590,13 +586,11 @@ impl MoqPeerNode { ) -> Result, StreamKitError> { let path = moq_connection.path.clone(); - // Extract the WebTransport session - let web_transport_session = *moq_connection + // Extract the moq-native Request + let request = *moq_connection .session - .downcast::() - .map_err(|_| { - StreamKitError::Runtime("Invalid WebTransport session type".to_string()) - })?; + .downcast::() + .map_err(|_| StreamKitError::Runtime("Invalid MoQ request type".to_string()))?; // Notify gateway that we accepted the connection let _ = moq_connection @@ -605,18 +599,17 @@ impl MoqPeerNode { // Create origins for full bidirectional MoQ let server_publish_origin = moq_lite::Origin::produce(); - let send_origin = server_publish_origin.producer.clone(); + let send_origin = server_publish_origin.clone(); let client_publish_origin = moq_lite::Origin::produce(); - let receive_origin = client_publish_origin.consumer.clone(); + let receive_origin = client_publish_origin.consume(); - let session = moq_lite::Session::accept( - web_transport_session, - Some(server_publish_origin.consumer), - Some(client_publish_origin.producer), - ) - .await - .map_err(|e| StreamKitError::Runtime(format!("Failed to accept session: {e}")))?; + let session = request + .with_publish(server_publish_origin.consume()) + .with_consume(client_publish_origin) + .accept() + .await + .map_err(|e| StreamKitError::Runtime(format!("Failed to accept session: {e}")))?; let handle = tokio::spawn(async move { let mut publisher_shutdown_rx = config.shutdown_rx.resubscribe(); @@ -828,10 +821,11 @@ impl MoqPeerNode { tracing::info!("Received catalog from publisher: audio={:?}", catalog.audio); - if let Some(audio) = &catalog.audio { + { + let audio = &catalog.audio; if let Some(track_name) = audio.renditions.keys().next() { tracing::info!("Found audio track in catalog: {}", track_name); - return Ok(Some((track_name.clone(), audio.priority))); + return Ok(Some((track_name.clone(), 2))); } } tracing::debug!("Catalog has no audio yet, waiting for update..."); @@ -982,13 +976,11 @@ impl MoqPeerNode { output_initial_delay_ms: u64, stats_delta_tx: mpsc::Sender, ) -> Result, StreamKitError> { - // Extract the WebTransport session - let web_transport_session = *moq_connection + // Extract the moq-native Request + let request = *moq_connection .session - .downcast::() - .map_err(|_| { - StreamKitError::Runtime("Invalid WebTransport session type".to_string()) - })?; + .downcast::() + .map_err(|_| StreamKitError::Runtime("Invalid MoQ request type".to_string()))?; // Notify gateway that we accepted the connection let _ = moq_connection @@ -997,16 +989,14 @@ impl MoqPeerNode { // Create origin for sending to client let server_publish_origin = moq_lite::Origin::produce(); - let send_origin = server_publish_origin.producer.clone(); + let send_origin = server_publish_origin.clone(); // Accept MoQ session (subscriber only receives, no client publish needed) - let session = moq_lite::Session::accept( - web_transport_session, - Some(server_publish_origin.consumer), - None, // No client publish origin - subscriber is send-only - ) - .await - .map_err(|e| StreamKitError::Runtime(format!("Failed to accept session: {e}")))?; + let session = request + .with_publish(server_publish_origin.consume()) + .accept() + .await + .map_err(|e| StreamKitError::Runtime(format!("Failed to accept session: {e}")))?; let handle = tokio::spawn(async move { let result = Self::subscriber_send_loop( @@ -1067,7 +1057,7 @@ impl MoqPeerNode { ) .await?; - track_producer.inner.clone().close(); + track_producer.track.clone().close(); tracing::info!("Subscriber task finished after {} packets", packet_count); Ok(()) } @@ -1077,18 +1067,18 @@ impl MoqPeerNode { publish: &moq_lite::OriginProducer, broadcast_name: &str, ) -> Result< - (moq_lite::BroadcastProducer, hang::TrackProducer, moq_lite::TrackProducer), + (moq_lite::BroadcastProducer, hang::container::OrderedProducer, moq_lite::TrackProducer), StreamKitError, > { // Create broadcast - let broadcast_produce = moq_lite::Broadcast::produce(); - publish.publish_broadcast(broadcast_name, broadcast_produce.consumer); - let mut broadcast_producer = broadcast_produce.producer; + let mut broadcast_producer = publish.create_broadcast(broadcast_name).ok_or_else(|| { + StreamKitError::Runtime(format!("Failed to create broadcast '{broadcast_name}'")) + })?; // Create audio track let audio_track = moq_lite::Track { name: "audio/data".to_string(), priority: 80 }; let track_producer = broadcast_producer.create_track(audio_track.clone()); - let track_producer: hang::TrackProducer = track_producer.into(); + let track_producer: hang::container::OrderedProducer = track_producer.into(); // Create and publish catalog let catalog_producer = @@ -1111,19 +1101,19 @@ impl MoqPeerNode { channel_count: 1, bitrate: Some(64_000), description: None, + container: hang::catalog::Container::default(), + jitter: None, }, ); let catalog = hang::catalog::Catalog { - audio: Some(hang::catalog::Audio { renditions: audio_renditions, priority: 80 }), + audio: hang::catalog::Audio { renditions: audio_renditions }, ..Default::default() }; let mut catalog_producer = broadcast_producer.create_track(hang::catalog::Catalog::default_track()); - let catalog_json = catalog - .to_string() - .map_err(|e| StreamKitError::Runtime(format!("Failed to serialize catalog: {e}")))?; + let catalog_json = super::catalog_to_json(&catalog)?; catalog_producer.write_frame(catalog_json.into_bytes()); Ok(catalog_producer) @@ -1132,7 +1122,7 @@ impl MoqPeerNode { /// Run the main send loop, forwarding packets to the subscriber #[allow(clippy::too_many_arguments)] async fn run_subscriber_send_loop( - track_producer: &mut hang::TrackProducer, + track_producer: &mut hang::container::OrderedProducer, mut broadcast_rx: broadcast::Receiver, shutdown_rx: &mut broadcast::Receiver<()>, output_group_duration_ms: u64, @@ -1192,7 +1182,7 @@ impl MoqPeerNode { #[allow(clippy::too_many_arguments, clippy::cast_precision_loss)] fn handle_broadcast_recv( recv_result: Result, - track_producer: &mut hang::TrackProducer, + track_producer: &mut hang::container::OrderedProducer, packet_count: &mut u64, frame_count: &mut u64, last_log: &mut std::time::Instant, @@ -1224,14 +1214,15 @@ impl MoqPeerNode { } *last_ts_ms = Some(timestamp_ms); - let timestamp = hang::Timestamp::from_millis(timestamp_ms).map_err(|_| { - StreamKitError::Runtime("MoQ frame timestamp overflow".to_string()) - })?; + let timestamp = + hang::container::Timestamp::from_millis(timestamp_ms).map_err(|_| { + StreamKitError::Runtime("MoQ frame timestamp overflow".to_string()) + })?; - let mut payload = hang::BufList::new(); + let mut payload = hang::container::BufList::new(); payload.push_chunk(broadcast_frame.data); - let frame = hang::Frame { timestamp, keyframe, payload }; + let frame = hang::container::Frame { timestamp, keyframe, payload }; if let Err(e) = track_producer.write(frame) { tracing::warn!("Failed to write MoQ frame to subscriber: {e}"); diff --git a/crates/nodes/src/transport/moq/pull.rs b/crates/nodes/src/transport/moq/pull.rs index 58b1f22a..d2f1b09f 100644 --- a/crates/nodes/src/transport/moq/pull.rs +++ b/crates/nodes/src/transport/moq/pull.rs @@ -296,16 +296,18 @@ impl MoqPullNode { let client = super::shared_insecure_client()?; let origin = moq_lite::Origin::produce(); - let _consumer_session = client.connect(url, None, origin.producer).await.map_err(|e| { - StreamKitError::Runtime(format!("Failed to create consumer session: {e}")) - })?; + let consumer = origin.consume(); + let _consumer_session = + client.clone().with_consume(origin).connect(url).await.map_err(|e| { + StreamKitError::Runtime(format!("Failed to create consumer session: {e}")) + })?; // Subscribe to the specified broadcast. // // During dynamic session initialization, the broadcast may not have been announced yet. // Treat this as "no tracks discovered" rather than a hard error: the runtime `run()` path // already waits for announcements and will connect once the broadcast appears. - let Some(broadcast) = origin.consumer.consume_broadcast(&self.config.broadcast) else { + let Some(broadcast) = consumer.consume_broadcast(&self.config.broadcast) else { tracing::debug!( broadcast = %self.config.broadcast, "Broadcast not available during catalog discovery; using default output pin" @@ -377,23 +379,20 @@ impl MoqPullNode { let mut tracks = Vec::new(); - if let Some(audio) = catalog.audio { - for (track_name, config) in audio.renditions { - match config.codec { - hang::catalog::AudioCodec::Opus => { - tracing::info!(track = %track_name, "found opus audio track"); - let track = - moq_lite::Track { name: track_name, priority: audio.priority }; - tracks.push(track); - }, - codec => { - tracing::debug!( - "skipping non-opus audio track: {} (codec: {})", - track_name, - codec - ); - }, - } + for (track_name, config) in catalog.audio.renditions { + match config.codec { + hang::catalog::AudioCodec::Opus => { + tracing::info!(track = %track_name, "found opus audio track"); + let track = moq_lite::Track { name: track_name, priority: 2 }; + tracks.push(track); + }, + codec => { + tracing::debug!( + "skipping non-opus audio track: {} (codec: {})", + track_name, + codec + ); + }, } } @@ -429,17 +428,19 @@ impl MoqPullNode { // Create origin for consuming broadcasts only (no publishing to avoid cycles) let origin = moq_lite::Origin::produce(); - let _consumer_session = client.connect(url, None, origin.producer).await.map_err(|e| { - StreamKitError::Runtime(format!("Failed to create consumer session: {e}")) - })?; + let consumer = origin.consume(); + let _consumer_session = + client.clone().with_consume(origin).connect(url).await.map_err(|e| { + StreamKitError::Runtime(format!("Failed to create consumer session: {e}")) + })?; // Wait for broadcast to become available // Note: consume_broadcast() only works after announcement, so we primarily rely on announcements let broadcast = { - let mut consumer = origin.consumer.clone(); + let mut announcements = consumer.clone(); // Try immediate consume first (works if broadcast already announced) - if let Some(broadcast) = origin.consumer.consume_broadcast(&self.config.broadcast) { + if let Some(broadcast) = consumer.consume_broadcast(&self.config.broadcast) { tracing::info!("Broadcast '{}' is immediately available", self.config.broadcast); broadcast } else { @@ -467,7 +468,7 @@ impl MoqPullNode { } } } - Some((path, maybe_broadcast)) = consumer.announced() => { + Some((path, maybe_broadcast)) = announcements.announced() => { if let Some(broadcast) = maybe_broadcast { // Compare paths without allocation - bind path to extend lifetime let announced_path = path.as_path(); diff --git a/crates/nodes/src/transport/moq/push.rs b/crates/nodes/src/transport/moq/push.rs index 13fa7628..93187da9 100644 --- a/crates/nodes/src/transport/moq/push.rs +++ b/crates/nodes/src/transport/moq/push.rs @@ -121,24 +121,24 @@ impl ProcessorNode for MoqPushNode { }; let publisher_origin = moq_lite::Origin::produce(); - let _publisher_session = match client.connect(url, publisher_origin.consumer, None).await { - Ok(session) => session, - Err(e) => { - let err_msg = format!("Failed to create publisher session: {e}"); - state_helpers::emit_failed(&context.state_tx, &node_name, &err_msg); - return Err(StreamKitError::Runtime(err_msg)); - }, - }; + let _publisher_session = + match client.clone().with_publish(publisher_origin.consume()).connect(url).await { + Ok(session) => session, + Err(e) => { + let err_msg = format!("Failed to create publisher session: {e}"); + state_helpers::emit_failed(&context.state_tx, &node_name, &err_msg); + return Err(StreamKitError::Runtime(err_msg)); + }, + }; // Create a transcoded broadcast and publish it - let transcoded_broadcast = moq_lite::Broadcast::produce(); - - // Publish the transcoded broadcast via the publisher session - publisher_origin - .producer - .publish_broadcast(&self.config.broadcast, transcoded_broadcast.consumer); - - let mut broadcast = transcoded_broadcast.producer; + let mut broadcast = + publisher_origin.create_broadcast(&self.config.broadcast).ok_or_else(|| { + StreamKitError::Runtime(format!( + "Failed to create broadcast '{}'", + self.config.broadcast + )) + })?; tracing::info!("Publishing to broadcast '{}'", self.config.broadcast); @@ -147,7 +147,7 @@ impl ProcessorNode for MoqPushNode { let audio_track = moq_lite::Track { name: "audio/data".to_string(), priority: 80 }; let track_producer = broadcast.create_track(audio_track.clone()); - let mut track_producer: hang::TrackProducer = track_producer.into(); + let mut track_producer: hang::container::OrderedProducer = track_producer.into(); // Create and publish a catalog describing our audio track let mut audio_renditions = std::collections::BTreeMap::new(); @@ -155,26 +155,27 @@ impl ProcessorNode for MoqPushNode { audio_track.name.clone(), hang::catalog::AudioConfig { codec: hang::catalog::AudioCodec::Opus, - sample_rate: 48000, // Default opus sample rate - channel_count: self.config.channels, // From configuration - bitrate: Some(128_000), // Default bitrate + sample_rate: 48000, + channel_count: self.config.channels, + bitrate: Some(128_000), description: None, + container: hang::catalog::Container::default(), + jitter: None, }, ); let catalog = hang::catalog::Catalog { - audio: Some(hang::catalog::Audio { renditions: audio_renditions, priority: 80 }), + audio: hang::catalog::Audio { renditions: audio_renditions }, ..Default::default() }; // Create catalog track and publish the catalog data let mut catalog_producer = broadcast.create_track(hang::catalog::Catalog::default_track()); - let catalog_json = match catalog.to_string() { + let catalog_json = match super::catalog_to_json(&catalog) { Ok(json) => json, Err(e) => { - let err_msg = format!("Failed to serialize catalog: {e}"); - state_helpers::emit_failed(&context.state_tx, &node_name, &err_msg); - return Err(StreamKitError::Runtime(err_msg)); + state_helpers::emit_failed(&context.state_tx, &node_name, e.to_string()); + return Err(e); }, }; let catalog_data = catalog_json.into_bytes(); // Avoid intermediate Vec allocation @@ -253,14 +254,14 @@ impl ProcessorNode for MoqPushNode { let keyframe = is_first || clock.is_group_boundary_ms(self.config.group_duration_ms); - let timestamp = hang::Timestamp::from_millis(timestamp_ms).map_err(|_| { + let timestamp = hang::container::Timestamp::from_millis(timestamp_ms).map_err(|_| { StreamKitError::Runtime("MoQ frame timestamp overflow".to_string()) })?; - let mut payload = hang::BufList::new(); + let mut payload = hang::container::BufList::new(); payload.push_chunk(data); - let frame = hang::Frame { timestamp, keyframe, payload }; + let frame = hang::container::Frame { timestamp, keyframe, payload }; if let Err(e) = track_producer.write(frame) { let err_msg = format!("Failed to write MoQ frame: {e}"); @@ -311,7 +312,7 @@ impl ProcessorNode for MoqPushNode { state_helpers::emit_stopped(&context.state_tx, &node_name, "input_closed"); // Close the track when done (best-effort) - track_producer.inner.clone().close(); + track_producer.track.clone().close(); tracing::info!("MoqPushNode finished after sending {} packets", packet_count); Ok(()) diff --git a/ui/bun.lock b/ui/bun.lock index e119e48f..f9a9604c 100644 --- a/ui/bun.lock +++ b/ui/bun.lock @@ -10,7 +10,7 @@ "@emotion/styled": "^11.14.1", "@kixelated/libavjs-webcodecs-polyfill": "^0.5.5", "@libav.js/variant-opus-af": "^6.8.8", - "@moq/hang": "^0.1.1", + "@moq/hang": "^0.1.2", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.3", @@ -337,11 +337,11 @@ "@marijn/find-cluster-break": ["@marijn/find-cluster-break@1.0.2", "", {}, "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g=="], - "@moq/hang": ["@moq/hang@0.1.1", "", { "dependencies": { "@kixelated/libavjs-webcodecs-polyfill": "^0.5.5", "@libav.js/variant-opus-af": "^6.8.8", "@moq/lite": "^0.1.1", "@moq/signals": "^0.1.0", "async-mutex": "^0.5.0", "comlink": "^4.4.2", "zod": "^4.1.5" } }, "sha512-m2gMpSVZqoiPdJJoEURnsP/BC2wwMcST5ywRHC2r4WReJd1rWts8C/Qc9CgR/jzfZUJyZNYCtuXVvo0H5WBBiA=="], + "@moq/hang": ["@moq/hang@0.1.2", "", { "dependencies": { "@kixelated/libavjs-webcodecs-polyfill": "^0.5.5", "@libav.js/variant-opus-af": "^6.8.8", "@moq/lite": "^0.1.2", "@moq/signals": "^0.1.1", "@svta/cml-iso-bmff": "^1.0.0-alpha.9", "async-mutex": "^0.5.0", "comlink": "^4.4.2", "zod": "^4.1.5" } }, "sha512-OGwHifmIsko7K0Yzms5kdo9tEgBkx3cC0XAyPuGtWLPHea8OgvshEN/7S6iETz+ELrHIIuAkjC6tWHH925GH+A=="], - "@moq/lite": ["@moq/lite@0.1.1", "", { "dependencies": { "@moq/signals": "^0.1.0", "@moq/web-transport-ws": "^0.1.2", "async-mutex": "^0.5.0" }, "peerDependencies": { "zod": "^4.1.0" } }, "sha512-72zQoc8yrk4W9Y8WZK1aAMnS+7J8+ZIIiON+jhaZ/ifNrcabyQrnSOY8SiEz7vPrvAuIcyOylza8T9R6qRfQbw=="], + "@moq/lite": ["@moq/lite@0.1.2", "", { "dependencies": { "@moq/signals": "^0.1.1", "@moq/web-transport-ws": "^0.1.2", "async-mutex": "^0.5.0" }, "peerDependencies": { "zod": "^4.1.0" } }, "sha512-duz27+uFI4jxCe/w42rxlBwBIQg9/u/lFFqTplhCAZ5kyhkiokqacpsvD5OUA+j5OVLepnYZpyTYRqAzanL37g=="], - "@moq/signals": ["@moq/signals@0.1.0", "", { "dependencies": { "dequal": "^2.0.3" }, "peerDependencies": { "@types/react": "^19.1.8", "react": "^19.0.0", "solid-js": "^1.9.7" }, "optionalPeers": ["react", "solid-js"] }, "sha512-tXUJqiC1AHzGnDY0QfFlvO5yqryFyqmpz+YjJslqQwGKsArcWuRkQA0jeRL7qLpkRGzZOSBCXCZByeLTahuLZA=="], + "@moq/signals": ["@moq/signals@0.1.2", "", { "dependencies": { "dequal": "^2.0.3" }, "peerDependencies": { "@types/react": "^19.1.8", "react": "^19.0.0", "solid-js": "^1.9.7" }, "optionalPeers": ["react", "solid-js"] }, "sha512-mzDk7KvQLSU6ZjZp9jrK2ZRlq07zp+LFZvS6AbKFyEqOxawwsy4tRAPdK9zmFCfIupjqwia42Pq9upo/RgjrMA=="], "@moq/web-transport-ws": ["@moq/web-transport-ws@0.1.2", "", {}, "sha512-mYha+AkLNPT3uOGnTA5YWjpxc9LO/yriFSoWzKkR0zN3UMZb9RXbsD8Gbhg1pJZod6QD4tevHoOWTBADYN7yAQ=="], @@ -481,6 +481,10 @@ "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + "@svta/cml-iso-bmff": ["@svta/cml-iso-bmff@1.0.0-beta.1", "", { "peerDependencies": { "@svta/cml-utils": "1.1.0" } }, "sha512-vacnGPHyg7Llz6pjuDxY10gzCqk4OOO0elPSio+VFokc1jdm5vraUKXNu9bzJftGf4FKJ2qUZJ2HguOSmywtZA=="], + + "@svta/cml-utils": ["@svta/cml-utils@1.1.0", "", {}, "sha512-5RyHD75RYbq0clUkb/L/+JklxAq+PZRAwKZTcmqUt/ciHm79HBq0/IgrDXYvTgIRGRv8gE4GNvUWQbvRZRxZpA=="], + "@tanstack/query-core": ["@tanstack/query-core@5.90.18", "", {}, "sha512-rbGx6bHgPNVzutP7BEr+53UPKohpckqlMAad+To9UxTbeaQ+kC/1SDRj+QzkwbQ7qhLT/1IKp34yS6thda6fzA=="], "@tanstack/react-query": ["@tanstack/react-query@5.90.18", "", { "dependencies": { "@tanstack/query-core": "5.90.18" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-KqNZX0C5IFz4639zR1ilnQ288tQdJrMNLtzmlzyJ14xauBkhtLEy3mPU/V4KiHsr41eL1ILZbDP36TB12lYfCQ=="], diff --git a/ui/package.json b/ui/package.json index c9471a70..771b68c7 100644 --- a/ui/package.json +++ b/ui/package.json @@ -54,7 +54,7 @@ "@emotion/styled": "^11.14.1", "@kixelated/libavjs-webcodecs-polyfill": "^0.5.5", "@libav.js/variant-opus-af": "^6.8.8", - "@moq/hang": "^0.1.1", + "@moq/hang": "^0.1.2", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.3",