diff --git a/Cargo.lock b/Cargo.lock index 9f80e86..4026376 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,15 +105,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -138,9 +138,37 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" + +[[package]] +name = "askama_escape" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df27b8d5ddb458c5fb1bbc1ce172d4a38c614a97d550b0ac89003897fb01de4" + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "async-trait" @@ -153,6 +181,22 @@ dependencies = [ "syn", ] +[[package]] +name = "async-tungstenite" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee88b4c88ac8c9ea446ad43498955750a4bbe64c4392f21ccfe5d952865e318f" +dependencies = [ + "atomic-waker", + "futures-core", + "futures-io", + "futures-task", + "futures-util", + "log", + "pin-project-lite", + "tungstenite 0.27.0", +] + [[package]] name = "atoi" version = "2.0.0" @@ -255,7 +299,7 @@ dependencies = [ "clap", "criterion", "hex", - "http 1.4.0", + "http 1.4.2", "multihash", "proptest", "reqwest", @@ -302,7 +346,7 @@ dependencies = [ "hickory-resolver", "idna", "k256", - "lru 0.16.3", + "lru 0.16.4", "multibase", "p256", "p384", @@ -326,7 +370,7 @@ dependencies = [ "atproto-identity", "clap", "futures", - "http 1.4.0", + "http 1.4.2", "serde", "serde_json", "thiserror 2.0.18", @@ -378,11 +422,11 @@ dependencies = [ "ecdsa", "elliptic-curve", "k256", - "lru 0.16.3", + "lru 0.16.4", "multibase", "p256", "p384", - "rand 0.10.0", + "rand 0.10.2", "reqwest", "reqwest-chain", "reqwest-middleware", @@ -424,8 +468,8 @@ dependencies = [ "clap", "elliptic-curve", "hickory-resolver", - "http 1.4.0", - "rand 0.10.0", + "http 1.4.2", + "rand 0.10.2", "reqwest", "reqwest-chain", "reqwest-middleware", @@ -439,6 +483,27 @@ dependencies = [ "zeroize", ] +[[package]] +name = "atproto-oauth-dioxus" +version = "0.15.0-alpha.2" +dependencies = [ + "atproto-identity", + "atproto-oauth", + "chrono", + "dioxus", + "form_urlencoded", + "hex", + "p256", + "rand 0.10.2", + "reqwest", + "serde", + "serde_json", + "thiserror 2.0.18", + "tokio", + "url", + "web-sys", +] + [[package]] name = "atproto-pds" version = "0.15.0-alpha.2" @@ -475,7 +540,7 @@ dependencies = [ "p256", "p384", "prometheus-client", - "rand 0.10.0", + "rand 0.10.2", "redis", "reqwest", "serde", @@ -506,7 +571,7 @@ dependencies = [ "cid", "clap", "multihash", - "rand 0.10.0", + "rand 0.10.2", "serde", "serde_json", "sha2 0.11.0", @@ -549,7 +614,7 @@ dependencies = [ "hkdf 0.13.0", "hmac 0.13.0", "proptest", - "rand 0.10.0", + "rand 0.10.2", "serde", "serde_bytes", "serde_json", @@ -569,7 +634,7 @@ dependencies = [ "clap", "compact_str", "futures", - "http 1.4.0", + "http 1.4.2", "itoa", "reqwest", "serde", @@ -595,8 +660,8 @@ dependencies = [ "chrono", "elliptic-curve", "hickory-resolver", - "http 1.4.0", - "rand 0.10.0", + "http 1.4.2", + "rand 0.10.2", "reqwest", "reqwest-chain", "reqwest-middleware", @@ -621,8 +686,8 @@ dependencies = [ "clap", "elliptic-curve", "hickory-resolver", - "http 1.4.0", - "rand 0.10.0", + "http 1.4.2", + "rand 0.10.2", "reqwest", "reqwest-chain", "reqwest-middleware", @@ -654,9 +719,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-config" @@ -676,7 +741,7 @@ dependencies = [ "aws-types", "bytes", "fastrand", - "http 1.4.0", + "http 1.4.2", "time", "tokio", "tracing", @@ -697,9 +762,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.16.3" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" +checksum = "4342d8937fc7e5dd9b1c60292261c0670c882a2cd1719cfc11b1af41731e32ad" dependencies = [ "aws-lc-sys", "zeroize", @@ -707,14 +772,15 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.40.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" +checksum = "6d9ceb1da931507a12f4fccea479dccd00da1943e1b4ae72d8e502d707361444" dependencies = [ "cc", "cmake", "dunce", "fs_extra", + "pkg-config", ] [[package]] @@ -735,7 +801,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "percent-encoding", @@ -768,7 +834,7 @@ dependencies = [ "hex", "hmac 0.12.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "lru 0.12.5", "percent-encoding", @@ -798,7 +864,7 @@ dependencies = [ "aws-types", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -819,7 +885,7 @@ dependencies = [ "hex", "hmac 0.12.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "percent-encoding", "sha2 0.10.9", "time", @@ -882,7 +948,7 @@ dependencies = [ "futures-core", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "percent-encoding", "pin-project-lite", @@ -902,7 +968,7 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -921,19 +987,19 @@ dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", "h2 0.3.27", - "h2 0.4.13", + "h2 0.4.15", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-rustls 0.24.2", - "hyper-rustls 0.27.7", + "hyper-rustls 0.27.9", "hyper-util", "pin-project-lite", "rustls 0.21.12", - "rustls 0.23.37", - "rustls-native-certs 0.8.3", + "rustls 0.23.41", + "rustls-native-certs 0.8.4", "rustls-pki-types", "tokio", "tokio-rustls 0.26.4", @@ -993,7 +1059,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -1013,7 +1079,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "tokio", "tracing", @@ -1031,7 +1097,7 @@ dependencies = [ "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -1071,9 +1137,9 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "axum-macros", @@ -1081,15 +1147,16 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-util", "itoa", "matchit", "memchr", "mime", + "multer", "percent-encoding", "pin-project-lite", "serde_core", @@ -1099,7 +1166,7 @@ dependencies = [ "sha1", "sync_wrapper", "tokio", - "tokio-tungstenite", + "tokio-tungstenite 0.29.0", "tower", "tower-layer", "tower-service", @@ -1114,7 +1181,7 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "mime", @@ -1125,11 +1192,34 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum-extra" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" +dependencies = [ + "axum", + "axum-core", + "bytes", + "futures-util", + "headers", + "http 1.4.2", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "serde_core", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "axum-macros" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" +checksum = "7aa268c23bfbbd2c4363b9cd302a4f504fb2a9dfe7e3451d66f35dd392e20aca" dependencies = [ "proc-macro2", "quote", @@ -1151,6 +1241,12 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" +[[package]] +name = "base16" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27c3610c36aee21ce8ac510e6224498de4228ad772a171ed65643a24693a5a8" + [[package]] name = "base16ct" version = "0.2.0" @@ -1163,10 +1259,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" dependencies = [ - "const-str", + "const-str 0.4.3", "match-lookup", ] +[[package]] +name = "base45" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240e56f4d3c453c36faacb695c535a4d5f8c7d23dac175014f32eb0a71012a03" + [[package]] name = "base64" version = "0.22.1" @@ -1206,9 +1308,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -1224,9 +1326,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.8.4" +version = "1.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e" +checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" dependencies = [ "arrayref", "arrayvec", @@ -1247,18 +1349,18 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byteorder" @@ -1274,9 +1376,12 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +dependencies = [ + "serde", +] [[package]] name = "bytes-utils" @@ -1311,9 +1416,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.58" +version = "1.2.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" +checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" dependencies = [ "find-msvc-tools", "jobserver", @@ -1321,6 +1426,23 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + [[package]] name = "cfg-if" version = "1.0.4" @@ -1335,24 +1457,36 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cpufeatures 0.3.0", - "rand_core 0.10.0", + "rand_core 0.10.1", +] + +[[package]] +name = "charset" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f927b07c74ba84c7e5fe4db2baeb3e996ab2688992e39ac68ce3220a677c7e" +dependencies = [ + "base64", + "encoding_rs", ] [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-link", ] @@ -1385,11 +1519,10 @@ dependencies = [ [[package]] name = "cid" -version = "0.11.1" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" +checksum = "21a304f95f84d169a6f31c4d0a30d784643aaa0bbc9c1e449a2c23e963ec4971" dependencies = [ - "core2", "multibase", "multihash", "unsigned-varint", @@ -1397,9 +1530,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -1419,9 +1552,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck", "proc-macro2", @@ -1446,9 +1579,9 @@ dependencies = [ [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "colorchoice" @@ -1472,9 +1605,9 @@ dependencies = [ [[package]] name = "compact_str" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" +checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" dependencies = [ "castaway", "cfg-if", @@ -1512,18 +1645,143 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" +[[package]] +name = "const-serialize" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad7154afa56de2f290e3c82c2c6dc4f5b282b6870903f56ef3509aba95866edc" +dependencies = [ + "const-serialize-macro 0.7.2", +] + +[[package]] +name = "const-serialize" +version = "0.8.0-alpha.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e42cd5aabba86f128b3763da1fec1491c0f728ce99245062cd49b6f9e6d235b" +dependencies = [ + "const-serialize 0.7.2", + "const-serialize-macro 0.8.0-alpha.0", + "serde", +] + +[[package]] +name = "const-serialize-macro" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f160aad86b4343e8d4e261fee9965c3005b2fd6bc117d172ab65948779e4acf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "const-serialize-macro" +version = "0.8.0-alpha.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42571ed01eb46d2e1adcf99c8ca576f081e46f2623d13500eba70d1d99a4c439" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "const-str" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" +[[package]] +name = "const-str" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0664d2867b4a32697dfe655557f5c3b187e9b605b38612a748e5ec99811d160" + +[[package]] +name = "const_format" +version = "0.2.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" +dependencies = [ + "const_format_proc_macros", + "konst", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "constant_time_eq" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" +[[package]] +name = "content_disposition" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc14a88e1463ddd193906285abe5c360c7e8564e05ccc5d501755f7fbc9ca9c" +dependencies = [ + "charset", +] + +[[package]] +name = "convert_case" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1550,15 +1808,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - [[package]] name = "cpufeatures" version = "0.2.17" @@ -1600,7 +1849,7 @@ checksum = "6ddc2d09feefeee8bd78101665bd8645637828fa9317f9f292496dbbd8c65ff3" dependencies = [ "crc", "digest 0.10.7", - "rand 0.9.2", + "rand 0.9.4", "regex", "rustversion", ] @@ -1626,7 +1875,7 @@ dependencies = [ "ciborium", "clap", "criterion-plot", - "itertools", + "itertools 0.13.0", "num-traits", "oorandom", "page_size", @@ -1646,7 +1895,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea" dependencies = [ "cast", - "itertools", + "itertools 0.13.0", ] [[package]] @@ -1738,9 +1987,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "hybrid-array", ] @@ -1781,11 +2030,45 @@ dependencies = [ "syn", ] +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn", +] + [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1797,15 +2080,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] name = "data-encoding-macro" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8142a83c17aa9461d637e649271eae18bf2edd00e91f2e105df36c3c16355bdb" +checksum = "3259c913752a86488b501ed8680446a5ed2d5aeac6e596cb23ba3800768ea32c" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1813,9 +2096,9 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab67060fc6b8ef687992d439ca0fa36e7ed17e9a0b16b25b601e8757df720de" +checksum = "ccc2776f0c61eca1ca32528f85548abd1a4be8fb53d1b21c013e4f18da1e7090" dependencies = [ "data-encoding", "syn", @@ -1837,8 +2120,28 @@ name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ - "powerfmt", + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case 0.10.0", + "proc-macro2", + "quote", + "rustc_version", + "syn", + "unicode-xid", ] [[package]] @@ -1855,20 +2158,610 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.0", + "block-buffer 0.12.1", "const-oid 0.10.2", - "crypto-common 0.2.1", + "crypto-common 0.2.2", "ctutils", ] [[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "dioxus" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c01ecf7ddbae18a419ad3d83c486101a85ffc5740ea09cdd0f09a30dc12170d" +dependencies = [ + "dioxus-asset-resolver", + "dioxus-cli-config", + "dioxus-config-macro", + "dioxus-config-macros", + "dioxus-core", + "dioxus-core-macro", + "dioxus-devtools", + "dioxus-document", + "dioxus-fullstack", + "dioxus-fullstack-macro", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-liveview", + "dioxus-logger", + "dioxus-router", + "dioxus-server", + "dioxus-signals", + "dioxus-ssr", + "dioxus-stores", + "dioxus-web", + "manganis", + "serde", + "subsecond", + "warnings", +] + +[[package]] +name = "dioxus-asset-resolver" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69387edbbc60c7cb93ad96d8cc7a22b49a76e21643380b89b1c49a78d347ff60" +dependencies = [ + "dioxus-cli-config", + "http 1.4.2", + "infer", + "jni", + "ndk", + "ndk-context", + "ndk-sys", + "percent-encoding", + "thiserror 2.0.18", + "tokio", +] + +[[package]] +name = "dioxus-cli-config" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c000f584ddf608e2b272b3074bf11512a474eeeb2eb85a1915f276ce5c4a8615" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "dioxus-config-macro" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7637091592978fbfdb45a16b26bd99fd97fb1bd7e31c6a963530e00c022af321" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "dioxus-config-macros" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54f9ed8fc1a215ad34bb8dbae42a4ea54efbcd26ca9006bbe5cca78e511bf25f" + +[[package]] +name = "dioxus-core" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45887100ff0cf89abeb8b659808294fda48cd53f3b424e36407dedffcfea830b" +dependencies = [ + "anyhow", + "const_format", + "dioxus-core-types", + "futures-channel", + "futures-util", + "generational-box", + "longest-increasing-subsequence", + "rustc-hash 2.1.3", + "rustversion", + "serde", + "slab", + "slotmap", + "subsecond", + "tracing", +] + +[[package]] +name = "dioxus-core-macro" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "370c63663dff0f24df5dfea643ca239283542c6b228a302f69b32e1d36762b7f" +dependencies = [ + "convert_case 0.8.0", + "dioxus-rsx", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-core-types" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36963eab106b169737762f9cd5ee5fd97f585989dcb2d8e30a596e97a6999009" + +[[package]] +name = "dioxus-devtools" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2349cedbdf1b429df1f1bea61fdee0ad3dae7b2548eedfbeca82710122a57da0" +dependencies = [ + "dioxus-cli-config", + "dioxus-core", + "dioxus-devtools-types", + "dioxus-signals", + "futures-channel", + "futures-util", + "serde", + "serde_json", + "subsecond", + "thiserror 2.0.18", + "tracing", + "tungstenite 0.28.0", +] + +[[package]] +name = "dioxus-devtools-types" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab9b0f7565d1916b70915f59b89ea8054ef0a9d67a364a32bbee68ef5f3818d" +dependencies = [ + "dioxus-core", + "serde", + "subsecond-types", +] + +[[package]] +name = "dioxus-document" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e3a5bec7ffc999ff23446a487eb5cd86111d1574a23533dd3f8b3c69a53a22" +dependencies = [ + "dioxus-core", + "dioxus-core-macro", + "dioxus-core-types", + "dioxus-html", + "futures-channel", + "futures-util", + "generational-box", + "lazy-js-bundle", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "dioxus-fullstack" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37f0558edb88af5ad47275ae36a7f06317163ba482db377c26d7d8590b5cd0f6" +dependencies = [ + "anyhow", + "async-stream", + "async-tungstenite", + "axum", + "axum-core", + "axum-extra", + "base64", + "bytes", + "ciborium", + "const-str 0.7.1", + "const_format", + "content_disposition", + "derive_more", + "dioxus-asset-resolver", + "dioxus-cli-config", + "dioxus-core", + "dioxus-fullstack-core", + "dioxus-fullstack-macro", + "dioxus-hooks", + "dioxus-html", + "dioxus-signals", + "form_urlencoded", + "futures", + "futures-channel", + "futures-util", + "gloo-net", + "headers", + "http 1.4.2", + "http-body 1.0.1", + "http-body-util", + "inventory", + "js-sys", + "mime", + "pin-project", + "reqwest", + "rustversion", + "send_wrapper", + "serde", + "serde_json", + "serde_qs", + "serde_urlencoded", + "thiserror 2.0.18", + "tokio", + "tokio-stream", + "tokio-tungstenite 0.28.0", + "tokio-util", + "tower", + "tower-http", + "tower-layer", + "tracing", + "tungstenite 0.27.0", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "xxhash-rust", +] + +[[package]] +name = "dioxus-fullstack-core" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc634b28b4b1e3eab1e8df4f98510e2d2fa39d686321467f977213155e86ed2b" +dependencies = [ + "anyhow", + "axum-core", + "base64", + "ciborium", + "dioxus-core", + "dioxus-document", + "dioxus-history", + "dioxus-hooks", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "http 1.4.2", + "inventory", + "parking_lot", + "serde", + "serde_json", + "thiserror 2.0.18", + "tokio", + "tracing", +] + +[[package]] +name = "dioxus-fullstack-macro" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a8fe7da549859fae00c7f4bf11a2aab734ae7ef6f98f280dce9bea1f3326ec" +dependencies = [ + "const_format", + "convert_case 0.8.0", + "proc-macro2", + "quote", + "syn", + "xxhash-rust", +] + +[[package]] +name = "dioxus-history" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a15232302d1933015fcf2d6fe9e286ad36f6e9c205a546089a0f326023bb0d2" +dependencies = [ + "dioxus-core", + "tracing", +] + +[[package]] +name = "dioxus-hooks" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4534f91cf6305204b948bdec130076ac9ecc7c22faab29475b76870558bf73ea" +dependencies = [ + "dioxus-core", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "rustversion", + "slab", + "tracing", +] + +[[package]] +name = "dioxus-html" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e03d6ad4040b667f2b2eefcb678840e630938c09bf9ec39b04ea4d1d96d90d44" +dependencies = [ + "async-trait", + "bytes", + "dioxus-core", + "dioxus-core-macro", + "dioxus-core-types", + "dioxus-hooks", + "dioxus-html-internal-macro", + "enumset", + "euclid", + "futures-channel", + "futures-util", + "generational-box", + "keyboard-types", + "lazy-js-bundle", + "rustversion", + "serde", + "serde_json", + "serde_repr", + "tracing", +] + +[[package]] +name = "dioxus-html-internal-macro" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "584e2772127ab00f0d5e1d4d9795f39fecebc828ece0b7a02349d438bc1b1ce7" +dependencies = [ + "convert_case 0.8.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-interpreter-js" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11999d6eb5bb179a9512dad30e5de408aab66f2cb65de9098c9fbe02927e2978" +dependencies = [ + "dioxus-core", + "dioxus-core-types", + "dioxus-html", + "js-sys", + "lazy-js-bundle", + "rustc-hash 2.1.3", + "sledgehammer_bindgen", + "sledgehammer_utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus-liveview" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7344b8f174967c7d2f6ad0103d680ab57daea83ebe3368f7f011c402fd6aaf77" +dependencies = [ + "axum", + "dioxus-cli-config", + "dioxus-core", + "dioxus-devtools", + "dioxus-document", + "dioxus-history", + "dioxus-html", + "dioxus-interpreter-js", + "futures-channel", + "futures-util", + "generational-box", + "rustc-hash 2.1.3", + "serde", + "serde_json", + "slab", + "thiserror 2.0.18", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "dioxus-logger" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ccdfe36d2cb830a2784e40f7e6f7199805a2c6da99bd65b1ca308f11aed28" +dependencies = [ + "dioxus-cli-config", + "tracing", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "dioxus-router" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e47f62d680429badfcb99bf5dec17ee92b0cb9623f264e36bc003a1359bfdc" +dependencies = [ + "dioxus-cli-config", + "dioxus-core", + "dioxus-core-macro", + "dioxus-fullstack-core", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-router-macro", + "dioxus-signals", + "percent-encoding", + "rustversion", + "tracing", + "url", +] + +[[package]] +name = "dioxus-router-macro" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f83fb667d27e256f8c9eca49963fbace66a8722cb64ee15a10ffc97d092357e" +dependencies = [ + "base16", + "digest 0.10.7", + "proc-macro2", + "quote", + "sha2 0.10.9", + "slab", + "syn", +] + +[[package]] +name = "dioxus-rsx" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2106afda239a4c7c22ffa1ca19117011225fc1c735c139c0a5b765996aa8bb1d" +dependencies = [ + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "dioxus-server" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5ba2095c16f847d3f680a94cc9b0637d190aace651ecfad0feda180da13634b" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "base64", + "bytes", + "chrono", + "ciborium", + "dashmap", + "dioxus-cli-config", + "dioxus-core", + "dioxus-core-macro", + "dioxus-devtools", + "dioxus-document", + "dioxus-fullstack-core", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-logger", + "dioxus-router", + "dioxus-signals", + "dioxus-ssr", + "enumset", + "futures", + "futures-channel", + "futures-util", + "generational-box", + "http 1.4.2", + "http-body-util", + "hyper 1.10.1", + "hyper-util", + "inventory", + "lru 0.16.4", + "parking_lot", + "pin-project", + "rustc-hash 2.1.3", + "serde", + "serde_json", + "serde_qs", + "subsecond", + "thiserror 2.0.18", + "tokio", + "tokio-tungstenite 0.28.0", + "tokio-util", + "tower", + "tower-http", + "tracing", + "tracing-futures", + "url", + "walkdir", +] + +[[package]] +name = "dioxus-signals" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3705754f5e043deec9fc7af0d159f18e5b21c02c47d255c7e477f31368f0b6d2" +dependencies = [ + "dioxus-core", + "futures-channel", + "futures-util", + "generational-box", + "parking_lot", + "rustc-hash 2.1.3", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-ssr" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d261c5c9907b84fb1ed52f59f46d68c84a4ae860a65cc5effd0cea740ee428af" +dependencies = [ + "askama_escape", + "dioxus-core", + "dioxus-core-types", + "rustc-hash 2.1.3", +] + +[[package]] +name = "dioxus-stores" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64bec7b21c86b1360ec965a07a53a2c96b7caee3465049e1c299a45024e87614" +dependencies = [ + "dioxus-core", + "dioxus-signals", + "dioxus-stores-macro", + "generational-box", +] + +[[package]] +name = "dioxus-stores-macro" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a5875e9f890f27b1cc3e5b56c1e23601211470315a1fb8627c4ca4f3b2be9a" +dependencies = [ + "convert_case 0.8.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-web" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0a0be76b404e8242a597db0fb239d05f8dee4e7856bc1fc7144f7e244822fd" +dependencies = [ + "dioxus-cli-config", + "dioxus-core", + "dioxus-core-types", + "dioxus-devtools", + "dioxus-document", + "dioxus-fullstack-core", + "dioxus-history", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "gloo-timers", + "js-sys", + "lazy-js-bundle", + "rustc-hash 2.1.3", + "send_wrapper", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys", @@ -1888,13 +2781,22 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "document-features" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ - "proc-macro2", - "quote", - "syn", + "litrs", ] [[package]] @@ -1957,9 +2859,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" dependencies = [ "serde", ] @@ -2037,6 +2939,27 @@ dependencies = [ "syn", ] +[[package]] +name = "enumset" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "839c4174b41e75c8f7306110b2c51996a293b8d1d850edd529011841d9fede7d" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd536557b58c682b217b8fb199afdff47cd3eff260623f19e77074eb073d63a" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -2064,6 +2987,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "euclid" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" +dependencies = [ + "num-traits", + "serde", +] + [[package]] name = "event-listener" version = "5.4.1" @@ -2077,9 +3010,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "ff" @@ -2105,9 +3038,9 @@ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fjall" -version = "3.1.4" +version = "3.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62b25b4d815ae178d7d9e4aa32ee59f072efd5431c736abede1e6ee13c8c453" +checksum = "9fcdc69609906151dff9b534e30eaf8515082055d36f628e382bd0b5d6a1d362" dependencies = [ "byteorder-lite", "byteview", @@ -2281,6 +3214,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generational-box" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd0d825b8d339701ad330dbcd6399519ced4d143484954daf6e3185dace4f77" +dependencies = [ + "parking_lot", + "tracing", +] + [[package]] name = "generic-array" version = "0.14.9" @@ -2321,25 +3264,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi 5.3.0", "wasip2", - "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", - "rand_core 0.10.0", - "wasip2", - "wasip3", + "rand_core 0.10.1", + "wasm-bindgen", ] [[package]] @@ -2348,6 +3289,52 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http 1.4.2", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "group" version = "0.13.0" @@ -2380,16 +3367,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.13" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap", "slab", "tokio", @@ -2450,6 +3437,12 @@ dependencies = [ "foldhash 0.2.0", ] +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + [[package]] name = "hashlink" version = "0.10.0" @@ -2459,6 +3452,30 @@ dependencies = [ "hashbrown 0.15.5", ] +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64", + "bytes", + "headers-core", + "http 1.4.2", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.4.2", +] + [[package]] name = "heck" version = "0.5.0" @@ -2487,7 +3504,7 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand 0.9.2", + "rand 0.9.4", "ring", "thiserror 2.0.18", "tinyvec", @@ -2509,9 +3526,9 @@ dependencies = [ "moka", "once_cell", "parking_lot", - "rand 0.9.2", + "rand 0.9.4", "resolv-conf", - "smallvec 1.15.1", + "smallvec 1.15.2", "thiserror 2.0.18", "tokio", "tracing", @@ -2550,7 +3567,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest 0.11.2", + "digest 0.11.3", ] [[package]] @@ -2575,9 +3592,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -2601,7 +3618,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -2612,11 +3629,17 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + [[package]] name = "httparse" version = "1.10.1" @@ -2631,9 +3654,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hybrid-array" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ "typenum", ] @@ -2664,22 +3687,22 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "h2 0.4.13", - "http 1.4.0", + "h2 0.4.15", + "http 1.4.2", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", - "smallvec 1.15.1", + "smallvec 1.15.2", "tokio", "want", ] @@ -2701,20 +3724,19 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.7" +version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", - "rustls 0.23.37", - "rustls-native-certs 0.8.3", - "rustls-pki-types", + "rustls 0.23.41", + "rustls-native-certs 0.8.4", "tokio", "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 1.0.6", + "webpki-roots 1.0.8", ] [[package]] @@ -2727,16 +3749,17 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", - "hyper 1.9.0", + "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.4", "system-configuration", "tokio", + "tower-layer", "tower-service", "tracing", "windows-registry", @@ -2803,7 +3826,7 @@ dependencies = [ "icu_normalizer_data", "icu_properties", "icu_provider", - "smallvec 1.15.1", + "smallvec 1.15.2", "zerovec", ] @@ -2849,10 +3872,10 @@ dependencies = [ ] [[package]] -name = "id-arena" -version = "2.3.0" +name = "ident_case" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" @@ -2861,15 +3884,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", - "smallvec 1.15.1", + "smallvec 1.15.2", "utf8_iter", ] [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -2877,16 +3900,25 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "serde", "serde_core", ] +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + [[package]] name = "interval-heap" version = "0.0.5" @@ -2896,13 +3928,22 @@ dependencies = [ "compare", ] +[[package]] +name = "inventory" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" +dependencies = [ + "rustversion", +] + [[package]] name = "ipconfig" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.6.3", + "socket2 0.6.4", "widestring", "windows-registry", "windows-result", @@ -2915,16 +3956,6 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" -[[package]] -name = "iri-string" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -2940,31 +3971,83 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.94" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -2982,6 +4065,37 @@ dependencies = [ "signature", ] +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags", + "serde", +] + +[[package]] +name = "konst" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" +dependencies = [ + "konst_macro_rules", +] + +[[package]] +name = "konst_macro_rules" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" + +[[package]] +name = "lazy-js-bundle" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccafada6c9541db44db758619236f2748f6e1bdaa84d04ded858567cd1e89321" + [[package]] name = "lazy_static" version = "1.5.0" @@ -2991,17 +4105,11 @@ dependencies = [ "spin", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lettre" -version = "0.11.21" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dabda5859ee7c06b995b9d1165aa52c39110e079ef609db97178d86aeb051fa7" +checksum = "0da65617f6cb926332d039cb578aad56178da86e128db6a1b09f4c94fa5b3349" dependencies = [ "async-trait", "base64", @@ -3016,20 +4124,30 @@ dependencies = [ "nom", "percent-encoding", "quoted_printable", - "rustls 0.23.37", - "socket2 0.6.3", + "rustls 0.23.41", + "socket2 0.6.4", "tokio", "tokio-rustls 0.26.4", "tracing", "url", - "webpki-roots 1.0.6", + "webpki-roots 1.0.8", ] [[package]] name = "libc" -version = "0.2.184" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libloading" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] [[package]] name = "libm" @@ -3039,14 +4157,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.15" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" dependencies = [ "bitflags", "libc", "plain", - "redox_syscall 0.7.4", + "redox_syscall 0.9.0", ] [[package]] @@ -3072,6 +4190,12 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + [[package]] name = "lock_api" version = "0.4.14" @@ -3083,33 +4207,30 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] -name = "lru" -version = "0.16.3" +name = "longest-increasing-subsequence" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" -dependencies = [ - "hashbrown 0.16.1", -] +checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" [[package]] name = "lru" -version = "0.16.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.15.5", ] [[package]] name = "lru" -version = "0.16.3" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" +checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" dependencies = [ "hashbrown 0.16.1", ] @@ -3118,37 +4239,92 @@ dependencies = [ name = "lru-slab" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "lsm-tree" +version = "3.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ca67401338b98d58447387dd5230552d2241bc388206e491d137b18dfea9d6" +dependencies = [ + "byteorder-lite", + "byteview", + "crossbeam-skiplist", + "enum_dispatch", + "interval-heap", + "log", + "lz4_flex", + "quick_cache", + "rustc-hash 2.1.3", + "self_cell", + "sfa", + "tempfile", + "varint-rs", + "xxhash-rust", +] + +[[package]] +name = "lz4_flex" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e" +dependencies = [ + "twox-hash", +] + +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "manganis" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bfcf56309de35b48b8780ea097ace5c3b773a617b52edc49dfc9a63a7d9dc43" +dependencies = [ + "const-serialize 0.7.2", + "const-serialize 0.8.0-alpha.0", + "jni", + "manganis-core", + "manganis-macro", + "ndk-context", + "objc2", + "thiserror 2.0.18", +] [[package]] -name = "lsm-tree" -version = "3.1.4" +name = "manganis-core" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e447ac67ff6aef4ec07fc19e507b219336cbba90a697c0dbeb1bf51b91536b67" +checksum = "a24d6be68f594495aea60850a284029d585d7b7839b26096c1b6d758f8518648" dependencies = [ - "byteorder-lite", - "byteview", - "crossbeam-skiplist", - "enum_dispatch", - "interval-heap", - "log", - "lz4_flex", - "quick_cache", - "rustc-hash", - "self_cell", - "sfa", - "tempfile", - "varint-rs", - "xxhash-rust", + "const-serialize 0.7.2", + "const-serialize 0.8.0-alpha.0", + "dioxus-cli-config", + "dioxus-core-types", + "serde", + "winnow 0.7.15", ] [[package]] -name = "lz4_flex" -version = "0.13.0" +name = "manganis-macro" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db9a0d582c2874f68138a16ce1867e0ffde6c0bb0a0df85e1f36d04146db488a" +checksum = "5e782a10318d707c0833e31876ded8acf91287eee0010af8392559af614c7226" dependencies = [ - "twox-hash", + "dunce", + "macro-string", + "manganis-core", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -3189,9 +4365,27 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" + +[[package]] +name = "memfd" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" +dependencies = [ + "rustix", +] + +[[package]] +name = "memmap2" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" +dependencies = [ + "libc", +] [[package]] name = "mime" @@ -3211,9 +4405,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -3232,33 +4426,80 @@ dependencies = [ "equivalent", "parking_lot", "portable-atomic", - "smallvec 1.15.1", + "smallvec 1.15.2", "tagptr", "uuid", ] +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.4.2", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + [[package]] name = "multibase" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" +checksum = "7e0e4a371cbf1dfd666b658ba137763edb23c45beb43cfe369b5593cd6b437b6" dependencies = [ "base-x", "base256emoji", + "base45", "data-encoding", "data-encoding-macro", ] [[package]] name = "multihash" -version = "0.19.3" +version = "0.19.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" +checksum = "577c63b00ad74d57e8c9aa870b5fccebf2fd64a308a5aee9f1bb88e4aea19447" dependencies = [ - "core2", "unsigned-varint", ] +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + [[package]] name = "nom" version = "8.0.0" @@ -3279,9 +4520,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", @@ -3299,15 +4540,15 @@ dependencies = [ "num-iter", "num-traits", "rand 0.8.6", - "smallvec 1.15.1", + "smallvec 1.15.2", "zeroize", ] [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" @@ -3339,6 +4580,43 @@ dependencies = [ "libm", ] +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + [[package]] name = "once_cell" version = "1.21.4" @@ -3395,7 +4673,7 @@ checksum = "10a8a7f5f6ba7c1b286c2fbca0454eaba116f63bbe69ed250b642d36fbb04d80" dependencies = [ "async-trait", "bytes", - "http 1.4.0", + "http 1.4.2", "opentelemetry", "reqwest", ] @@ -3408,7 +4686,7 @@ checksum = "91cf61a1868dacc576bf2b2a1c3e9ab150af7272909e80085c3173384fe11f76" dependencies = [ "async-trait", "futures-core", - "http 1.4.0", + "http 1.4.2", "opentelemetry", "opentelemetry-http", "opentelemetry-proto", @@ -3509,7 +4787,7 @@ dependencies = [ "panproto-lens", "panproto-mig", "panproto-schema", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "serde_json", "thiserror 2.0.18", @@ -3538,7 +4816,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45ab6944782982798b7871948e3f62a2cfc06b94392a022f68dac1c7aa8b5d05" dependencies = [ - "rustc-hash", + "rustc-hash 2.1.3", "serde", "thiserror 2.0.18", ] @@ -3550,7 +4828,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "664aba7b026ea0a9c141af0799f9cce602bcc98b66cb69a28d31c1c1135de16c" dependencies = [ "panproto-expr", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "thiserror 2.0.18", ] @@ -3565,7 +4843,7 @@ dependencies = [ "panproto-expr", "panproto-gat", "panproto-schema", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "serde_json", "smallvec 2.0.0-alpha.12", @@ -3587,7 +4865,7 @@ dependencies = [ "pulldown-cmark", "quick-xml", "rmp-serde", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "serde_json", "simd-json", @@ -3607,7 +4885,7 @@ dependencies = [ "panproto-inst", "panproto-mig", "panproto-schema", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "serde_json", "smallvec 2.0.0-alpha.12", @@ -3624,7 +4902,7 @@ dependencies = [ "panproto-gat", "panproto-inst", "panproto-schema", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "thiserror 2.0.18", ] @@ -3639,7 +4917,7 @@ dependencies = [ "panproto-gat", "panproto-inst", "panproto-schema", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "serde_json", "thiserror 2.0.18", @@ -3653,7 +4931,7 @@ checksum = "4181ffed106dca21b8f0cc8fe146710f5f393f4109c942be01a346b82965705c" dependencies = [ "panproto-expr", "panproto-gat", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "smallvec 2.0.0-alpha.12", "thiserror 2.0.18", @@ -3674,7 +4952,7 @@ dependencies = [ "panproto-mig", "panproto-schema", "rmp-serde", - "rustc-hash", + "rustc-hash 2.1.3", "serde", "serde_json", "smallvec 2.0.0-alpha.12", @@ -3706,7 +4984,7 @@ dependencies = [ "cfg-if", "libc", "redox_syscall 0.5.18", - "smallvec 1.15.1", + "smallvec 1.15.2", "windows-link", ] @@ -3738,18 +5016,18 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", @@ -3791,9 +5069,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "plain" @@ -3859,16 +5137,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "primeorder" version = "0.13.6" @@ -3879,6 +5147,15 @@ dependencies = [ "serdect", ] +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + [[package]] name = "proc-macro2" version = "1.0.106" @@ -3888,6 +5165,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "version_check", +] + [[package]] name = "prometheus-client" version = "0.23.1" @@ -3921,8 +5210,8 @@ dependencies = [ "bit-vec", "bitflags", "num-traits", - "rand 0.9.2", - "rand_chacha", + "rand 0.9.4", + "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", "rusty-fork", @@ -3947,12 +5236,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools", + "itertools 0.14.0", "proc-macro2", "quote", "syn", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + [[package]] name = "pulldown-cmark" version = "0.12.2" @@ -3989,9 +5294,9 @@ dependencies = [ [[package]] name = "quick_cache" -version = "0.6.21" +version = "0.6.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a70b1b8b47e31d0498ecbc3c5470bb931399a8bfed1fd79d1717a61ce7f96e3" +checksum = "b9c6658afe513a3b484e3abfdaa0d03ef3c0bbf017542c178dd55f94eb3051f9" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -3999,18 +5304,18 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", - "rustls 0.23.37", - "socket2 0.6.3", + "rustc-hash 2.1.3", + "rustls 0.23.41", + "socket2 0.6.4", "thiserror 2.0.18", "tokio", "tracing", @@ -4019,17 +5324,18 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" dependencies = [ "bytes", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.2", + "rand 0.10.2", + "rand_pcg", "ring", - "rustc-hash", - "rustls 0.23.37", + "rustc-hash 2.1.3", + "rustls 0.23.41", "rustls-pki-types", "slab", "thiserror 2.0.18", @@ -4040,23 +5346,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.3", + "socket2 0.6.4", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -4092,34 +5398,33 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] [[package]] name = "rand" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20", - "getrandom 0.4.2", - "rand_core 0.10.0", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] name = "rand_chacha" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "chacha20", - "getrandom 0.4.2", - "rand_core 0.10.0", + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] @@ -4152,9 +5457,18 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] [[package]] name = "rand_xorshift" @@ -4165,11 +5479,17 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + [[package]] name = "rayon" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -4198,12 +5518,12 @@ dependencies = [ "combine", "futures", "futures-util", - "itertools", + "itertools 0.13.0", "itoa", "num-bigint", "percent-encoding", "pin-project-lite", - "rustls 0.23.37", + "rustls 0.23.41", "rustls-native-certs 0.7.3", "rustls-pemfile", "rustls-pki-types", @@ -4225,9 +5545,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.4" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" +checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" dependencies = [ "bitflags", ] @@ -4265,9 +5585,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -4294,9 +5614,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "reqwest" @@ -4306,16 +5626,18 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", + "cookie", + "cookie_store", "encoding_rs", "futures-channel", "futures-core", "futures-util", - "h2 0.4.13", - "http 1.4.0", + "h2 0.4.15", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", - "hyper-rustls 0.27.7", + "hyper 1.10.1", + "hyper-rustls 0.27.9", "hyper-util", "js-sys", "log", @@ -4324,7 +5646,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.37", + "rustls 0.23.41", "rustls-pki-types", "serde", "serde_json", @@ -4332,14 +5654,16 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls 0.26.4", + "tokio-util", "tower", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", - "webpki-roots 1.0.6", + "webpki-roots 1.0.8", ] [[package]] @@ -4350,7 +5674,7 @@ checksum = "da5c014fb79a8227db44a0433d748107750d2550b7fca55c59a3d7ee7d2ee2b2" dependencies = [ "anyhow", "async-trait", - "http 1.4.0", + "http 1.4.2", "reqwest-middleware", ] @@ -4362,7 +5686,7 @@ checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e" dependencies = [ "anyhow", "async-trait", - "http 1.4.0", + "http 1.4.2", "reqwest", "serde", "thiserror 1.0.69", @@ -4420,13 +5744,13 @@ dependencies = [ [[package]] name = "rpassword" -version = "7.4.0" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d4c8b64f049c6721ec8ccec37ddfc3d641c4a7fca57e8f2a89de509c73df39" +checksum = "2da316a15f47e3d053de9cb2c439650bd8fa4aaeb9365f2e5f27f492ff73c196" dependencies = [ "libc", "rtoolbox", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4451,19 +5775,25 @@ dependencies = [ [[package]] name = "rtoolbox" -version = "0.0.3" +version = "0.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7cc970b249fbe527d6e02e0a227762c9108b2f49d81094fe357ffc6d14d7f6f" +checksum = "50a0e551c1e27e1731aba276dbeaeac73f53c7cd34d1bda485d02bd1e0f36844" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -4501,16 +5831,16 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.37" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "aws-lc-rs", "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.10", + "rustls-webpki 0.103.13", "subtle", "zeroize", ] @@ -4530,9 +5860,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe 0.2.1", "rustls-pki-types", @@ -4551,9 +5881,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" dependencies = [ "web-time", "zeroize", @@ -4571,9 +5901,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.10" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "aws-lc-rs", "ring", @@ -4708,9 +6038,18 @@ checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "send_wrapper" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +dependencies = [ + "futures-core", +] [[package]] name = "serde" @@ -4722,6 +6061,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_bytes" version = "0.11.19" @@ -4754,9 +6104,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "indexmap", "itoa", @@ -4777,6 +6127,28 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_qs" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3faaf9e727533a19351a43cc5a8de957372163c7d35cc48c90b75cdda13c352" +dependencies = [ + "percent-encoding", + "serde", + "thiserror 2.0.18", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4840,7 +6212,7 @@ checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", "cpufeatures 0.3.0", - "digest 0.11.2", + "digest 0.11.3", ] [[package]] @@ -4854,9 +6226,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -4906,21 +6278,51 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] -name = "smallvec" -version = "1.15.1" +name = "sledgehammer_bindgen" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e83e178d176459c92bc129cfd0958afac3ced925471b889b3a75546cfc4133" +dependencies = [ + "sledgehammer_bindgen_macro", + "wasm-bindgen", +] + +[[package]] +name = "sledgehammer_bindgen_macro" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb251b407f50028476a600541542b605bb864d35d9ee1de4f6cab45d88475e6d" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "sledgehammer_utils" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debdd4b83524961983cea3c55383b3910fd2f24fd13a188f5b091d2d504a61ae" +dependencies = [ + "rustc-hash 1.1.0", +] + +[[package]] +name = "slotmap" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "serde", + "version_check", ] [[package]] name = "smallvec" -version = "2.0.0-alpha.12" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef784004ca8777809dcdad6ac37629f0a97caee4c685fcea805278d81dd8b857" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -4933,19 +6335,20 @@ dependencies = [ ] [[package]] -name = "smallvec" -version = "2.0.0-alpha.12" +name = "socket2" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef784004ca8777809dcdad6ac37629f0a97caee4c685fcea805278d81dd8b857" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ - "serde_core", + "libc", + "windows-sys 0.52.0", ] [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -5007,11 +6410,11 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rustls 0.23.37", + "rustls 0.23.41", "serde", "serde_json", "sha2 0.10.9", - "smallvec 1.15.1", + "smallvec 1.15.2", "thiserror 2.0.18", "tokio", "tokio-stream", @@ -5093,7 +6496,7 @@ dependencies = [ "serde", "sha1", "sha2 0.10.9", - "smallvec 1.15.1", + "smallvec 1.15.2", "sqlx-core", "stringprep", "thiserror 2.0.18", @@ -5131,7 +6534,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.9", - "smallvec 1.15.1", + "smallvec 1.15.2", "sqlx-core", "stringprep", "thiserror 2.0.18", @@ -5191,7 +6594,35 @@ dependencies = [ name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subsecond" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cc79674bd55726e6b123204403389400229a95fe4a3b2c5453dada70b06ca95" +dependencies = [ + "js-sys", + "libc", + "libloading", + "memfd", + "memmap2", + "serde", + "subsecond-types", + "thiserror 2.0.18", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "subsecond-types" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9798bfed58797aed51c672aa99810aac30a50d3120ecfdcf28c13784e9a8f1c" +dependencies = [ + "serde", +] [[package]] name = "subtle" @@ -5201,9 +6632,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -5264,7 +6695,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -5321,9 +6752,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", "num-conv", @@ -5335,15 +6766,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" dependencies = [ "num-conv", "time-core", @@ -5392,25 +6823,25 @@ checksum = "b130bd8a58c163224b44e217b4239ca7b927d82bf6cc2fea1fc561d15056e3f7" [[package]] name = "tokio" -version = "1.50.0" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", @@ -5433,7 +6864,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.37", + "rustls 0.23.41", "tokio", ] @@ -5446,6 +6877,7 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", + "tokio-util", ] [[package]] @@ -5457,7 +6889,19 @@ dependencies = [ "futures-util", "log", "tokio", - "tungstenite", + "tungstenite 0.28.0", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite 0.29.0", ] [[package]] @@ -5468,6 +6912,7 @@ checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "futures-util", "pin-project-lite", @@ -5476,19 +6921,19 @@ dependencies = [ [[package]] name = "tokio-websockets" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad543404f98bfc969aeb71994105c592acfc6c43323fddcd016bb208d1c65cb" +checksum = "d52efb639344a7c6adb8e62c6f3d2c19c001ff1b79a5041ba1c6ed42e19c6aa5" dependencies = [ "base64", "bytes", "fastrand", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "httparse", "ring", - "rustls-native-certs 0.8.3", + "rustls-native-certs 0.8.4", "rustls-pki-types", "simdutf8", "tokio", @@ -5496,6 +6941,36 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.25.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow 1.0.3", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +dependencies = [ + "winnow 1.0.3", +] + [[package]] name = "tonic" version = "0.12.3" @@ -5505,7 +6980,7 @@ dependencies = [ "async-trait", "base64", "bytes", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -5535,20 +7010,29 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "bitflags", "bytes", + "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", - "iri-string", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", "pin-project-lite", + "tokio", + "tokio-util", "tower", "tower-layer", "tower-service", + "url", ] [[package]] @@ -5596,6 +7080,16 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -5617,7 +7111,7 @@ dependencies = [ "once_cell", "opentelemetry", "opentelemetry_sdk", - "smallvec 1.15.1", + "smallvec 1.15.2", "tracing", "tracing-core", "tracing-log", @@ -5636,19 +7130,47 @@ dependencies = [ "once_cell", "regex-automata", "sharded-slab", - "smallvec 1.15.1", + "smallvec 1.15.2", "thread_local", "tracing", "tracing-core", "tracing-log", ] +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" +dependencies = [ + "bytes", + "data-encoding", + "http 1.4.2", + "httparse", + "log", + "rand 0.9.4", + "sha1", + "thiserror 2.0.18", + "utf-8", +] + [[package]] name = "tungstenite" version = "0.28.0" @@ -5657,15 +7179,31 @@ checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" dependencies = [ "bytes", "data-encoding", - "http 1.4.0", + "http 1.4.2", "httparse", "log", - "rand 0.9.2", + "rand 0.9.4", "sha1", "thiserror 2.0.18", "utf-8", ] +[[package]] +name = "tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" +dependencies = [ + "bytes", + "data-encoding", + "http 1.4.2", + "httparse", + "log", + "rand 0.9.4", + "sha1", + "thiserror 2.0.18", +] + [[package]] name = "twox-hash" version = "2.1.2" @@ -5674,9 +7212,9 @@ checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ulid" @@ -5684,7 +7222,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe" dependencies = [ - "rand 0.9.2", + "rand 0.9.4", "web-time", ] @@ -5729,9 +7267,9 @@ checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -5795,11 +7333,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.0" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "wasm-bindgen", ] @@ -5824,9 +7362,9 @@ dependencies = [ [[package]] name = "varint-rs" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f54a172d0620933a27a4360d3db3e2ae0dd6cceae9730751a036bbf182c4b23" +checksum = "bfa6c38708f6257f1ec2ca7e5a11f9bbf58a27d7060078b6b333624968183d96" [[package]] name = "vcpkg" @@ -5875,25 +7413,38 @@ dependencies = [ ] [[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" +name = "warnings" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +checksum = "64f68998838dab65727c9b30465595c6f7c953313559371ca8bf31759b3680ad" +dependencies = [ + "pin-project", + "tracing", + "warnings-macro", +] [[package]] -name = "wasip2" -version = "1.0.2+wasi-0.2.9" +name = "warnings-macro" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "59195a1db0e95b920366d949ba5e0d3fc0e70b67c09be15ce5abb790106b0571" dependencies = [ - "wit-bindgen", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ "wit-bindgen", ] @@ -5906,9 +7457,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.117" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -5919,9 +7470,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.67" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -5929,9 +7480,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.117" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5939,9 +7490,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.117" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -5952,52 +7503,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.117" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] [[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" +name = "wasm-streams" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] name = "web-sys" -version = "0.3.94" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -6019,14 +7549,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.6", + "webpki-roots 1.0.8", ] [[package]] name = "webpki-roots" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" +checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" dependencies = [ "rustls-pki-types", ] @@ -6148,6 +7678,24 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -6168,20 +7716,41 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.60.2" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-targets 0.53.5", + "windows-link", ] [[package]] -name = "windows-sys" -version = "0.61.2" +name = "windows-targets" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows-link", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -6193,7 +7762,7 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", @@ -6201,21 +7770,16 @@ dependencies = [ ] [[package]] -name = "windows-targets" -version = "0.53.5" +name = "windows_aarch64_gnullvm" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" @@ -6224,10 +7788,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" @@ -6236,22 +7806,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" +name = "windows_i686_gnu" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.52.6" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.53.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" @@ -6260,152 +7830,106 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" +name = "windows_i686_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.52.6" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.53.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.52.6" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.53.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] -name = "windows_x86_64_gnullvm" +name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +name = "windows_x86_64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" +name = "windows_x86_64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] -name = "wit-bindgen" -version = "0.51.0" +name = "windows_x86_64_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] -name = "wit-bindgen-core" -version = "0.51.0" +name = "windows_x86_64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] -name = "wit-bindgen-rust" -version = "0.51.0" +name = "windows_x86_64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" +name = "winnow" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", + "memchr", ] [[package]] -name = "wit-component" -version = "0.244.0" +name = "winnow" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", + "memchr", ] [[package]] -name = "wit-parser" -version = "0.244.0" +name = "wit-bindgen" +version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "xmlparser" @@ -6415,15 +7939,15 @@ checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" [[package]] name = "xxhash-rust" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" +checksum = "4d93c89cdc2d3a63c3ec48ffe926931bdc069eafa8e4402fe6d8f790c9d1e576" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -6444,18 +7968,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", @@ -6464,9 +7988,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] @@ -6485,18 +8009,18 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 9a54155..0341718 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ members = [ "crates/atproto-oauth-aip", "crates/atproto-oauth-axum", "crates/atproto-oauth", + "crates/atproto-oauth-dioxus", "crates/atproto-pds", "crates/atproto-record", "crates/atproto-repo", diff --git a/crates/atproto-oauth-dioxus/Cargo.toml b/crates/atproto-oauth-dioxus/Cargo.toml new file mode 100644 index 0000000..827e27a --- /dev/null +++ b/crates/atproto-oauth-dioxus/Cargo.toml @@ -0,0 +1,57 @@ +[package] +name = "atproto-oauth-dioxus" +version = "0.15.0-alpha.2" +description = "Dioxus fullstack integration for AT Protocol OAuth authentication workflows" +readme = "README.md" +homepage = "https://tangled.org/ngerakines.me/atproto-crates" +documentation = "https://docs.rs/atproto-oauth-dioxus" + +edition.workspace = true +rust-version.workspace = true +authors.workspace = true +repository.workspace = true +license.workspace = true +keywords.workspace = true +categories.workspace = true + +[dependencies] +dioxus = { version = "0.7.1", features = ["router", "fullstack"] } + +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +thiserror.workspace = true + +url = "2.5" +web-sys = { version = "0.3", features = ["Window", "Location", "Storage"] } + +atproto-identity = { workspace = true, optional = true } +atproto-oauth = { workspace = true, optional = true } +reqwest = { workspace = true, optional = true } +tokio = { workspace = true, optional = true } +chrono = { workspace = true, optional = true } +p256 = { workspace = true, features = ["jwk", "serde"], optional = true } +rand = { workspace = true, optional = true } +hex = { version = "0.4", optional = true } +form_urlencoded = { version = "1.2", optional = true } + +[features] +default = [] +server = [ + "dioxus/server", + "dep:atproto-identity", + "dep:atproto-oauth", + "dep:reqwest", + "dep:tokio", + "dep:chrono", + "dep:p256", + "dep:rand", + "dep:hex", + "dep:form_urlencoded", +] +hickory-dns = [ + "atproto-identity?/hickory-dns", + "atproto-oauth?/hickory-dns", +] + +[lints] +workspace = true diff --git a/crates/atproto-oauth-dioxus/README.md b/crates/atproto-oauth-dioxus/README.md new file mode 100644 index 0000000..091459f --- /dev/null +++ b/crates/atproto-oauth-dioxus/README.md @@ -0,0 +1,163 @@ +# atproto-oauth-dioxus + +Dioxus fullstack integration for AT Protocol OAuth authentication. + +This crate wraps the `atproto-oauth` and `atproto-identity` crates into ergonomic Dioxus components, hooks, and server functions, providing a turnkey OAuth PKCE + DPoP flow for Dioxus fullstack apps. + +## Quick Start + +### 1. Add the dependency + +```toml +[dependencies] +atproto-oauth-dioxus = "0.15" + +[features] +server = ["atproto-oauth-dioxus/server"] +``` + +### 2. Define the callback route + +```rust +use dioxus::prelude::*; +use atproto_oauth_dioxus::components::AtprotoOAuthCallback; + +#[derive(Routable, Clone, PartialEq)] +enum Route { + #[route("/oauth/callback")] + AtprotoOAuthCallback {}, + #[route("/")] + Home {}, +} +``` + +> If you prefer the shorter name `OAuthCallback`, alias the import: +> `use atproto_oauth_dioxus::components::AtprotoOAuthCallback as OAuthCallback;` + +### 3. Wrap your app with the provider + +```rust +use atproto_oauth_dioxus::components::AtprotoOAuthProvider; +use atproto_oauth_dioxus::config::AtprotoOAuthConfig; + +#[component] +fn App() -> Element { + rsx! { + AtprotoOAuthProvider { + config: AtprotoOAuthConfig::new("/oauth/callback"), + Router:: {} + } + } +} +``` + +### 4. Add login to your page + +```rust +use dioxus::prelude::*; +use atproto_oauth_dioxus::hooks::do_atproto_login; + +#[component] +fn LoginPage() -> Element { + let mut handle = use_signal(String::new); + let auth_url = use_signal(|| None::); + let error = use_signal(|| None::); + let is_loading = use_signal(|| false); + + rsx! { + input { + placeholder: "you.bsky.social", + oninput: move |e| handle.set(e.value()), + disabled: is_loading(), + } + button { + disabled: is_loading() || handle.read().is_empty(), + onclick: move |_| do_atproto_login(handle(), auth_url, error, is_loading), + if is_loading() { "Connecting..." } else { "Login with AT Protocol" } + } + if let Some(url) = auth_url.read().as_ref() { + a { href: "{url}", "Continue to Authorization" } + } + if let Some(err) = error.read().as_ref() { + p { "{err}" } + } + } +} +``` + +### 5. Show session state elsewhere + +```rust +use dioxus::prelude::*; +use atproto_oauth_dioxus::types::SessionState; +use atproto_oauth_dioxus::hooks::do_atproto_logout; + +#[component] +fn UserMenu() -> Element { + let session = use_context::>(); + + rsx! { + span { "Logged in as {session.read().handle}" } + button { + onclick: move |_| do_atproto_logout(session), + "Log out" + } + } +} +``` + +## Server Configuration + +Set environment variables for production: + +| Variable | Purpose | +|----------|---------| +| `OAUTH_KEY_SEED` | 64 hex chars (32 bytes) seed for the P-256 signing key. Restoring the same seed on restart regenerates the identical key. | +| `HOST_DOMAIN` or `RAILWAY_PUBLIC_DOMAIN` | The public hostname used to construct the OAuth `client_id` and `redirect_uri`. | + +## Features + +| Feature | Description | +|---------|-------------| +| `server` | Enables server-side OAuth logic (DID resolution, PAR, token exchange, session storage). Required for `#[server]` functions. | +| `hickory-dns` | Enables Hickory DNS resolver for handle-to-DID resolution (passthrough to `atproto-identity`). | + +## Making Authenticated PDS Calls + +After login, server functions can retrieve the active session (including the DPoP key) to make authenticated calls to the user's PDS: + +```rust +use atproto_oauth_dioxus::server::get_active_session; +use atproto_oauth::dpop::request_dpop; +use atproto_identity::url::build_url; + +pub async fn call_pds(did: &str) -> Result<(), String> { + let session = get_active_session(did) + .await + .ok_or("No active session")?; + + let url = build_url(&session.pds_endpoint, "/xrpc/com.atproto.repo.describeRepo", [("repo", did)]) + .map_err(|e| e.to_string())? + .to_string(); + + let (dpop_token, _, _) = request_dpop(&session.dpop_key, "GET", &url, &session.access_token) + .map_err(|e| format!("DPoP error: {}", e))?; + + // Make the request with Authorization: DPoP {access_token} and DPoP: {dpop_token} + // ... +} +``` + +## How It Works + +1. User enters their AT Protocol handle (e.g. `you.bsky.social`) +2. Server resolves the handle to a DID and discovers the user's PDS OAuth endpoints +3. Server initiates a Pushed Authorization Request (PAR) and returns an authorization URL +4. Client redirects the user to their PDS to approve the app +5. PDS redirects back to `/oauth/callback?code=...&state=...` +6. `AtprotoOAuthCallback` component extracts the code and state, calls the server to exchange for tokens +7. Session is persisted to `localStorage` and provided via Dioxus context + +## License + +MIT (same as the atproto-crates workspace). diff --git a/crates/atproto-oauth-dioxus/src/components.rs b/crates/atproto-oauth-dioxus/src/components.rs new file mode 100644 index 0000000..0e40e50 --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/components.rs @@ -0,0 +1,159 @@ +use dioxus::prelude::*; + +use crate::config::AtprotoOAuthConfig; +use crate::types::SessionState; + +#[cfg(target_arch = "wasm32")] +use crate::state; + +/// Root component that provides AT Protocol OAuth session state to all children. +/// +/// Wrap your app's [`Router`] or root element with this component to enable +/// OAuth authentication. It provides a reactive [`SessionState`] via Dioxus +/// context and automatically restores the session from `localStorage` on mount. +/// +/// # Example +/// +/// ```rust,ignore +/// use atproto_oauth_dioxus::components::AtprotoOAuthProvider; +/// use atproto_oauth_dioxus::config::AtprotoOAuthConfig; +/// +/// fn App() -> Element { +/// rsx! { +/// AtprotoOAuthProvider { +/// config: AtprotoOAuthConfig::new("/oauth/callback"), +/// Router:: {} +/// } +/// } +/// } +/// ``` +#[component] +pub fn AtprotoOAuthProvider(config: AtprotoOAuthConfig, children: Element) -> Element { + #[cfg_attr(not(target_arch = "wasm32"), allow(unused_mut, unused_variables))] + let mut session = use_signal(SessionState::default); + use_context_provider(|| session); + + let _ = config; + + use_effect(move || { + #[cfg(target_arch = "wasm32")] + { + if !session.read().is_authenticated { + if let Some(stored) = state::load_session() { + session.set(stored); + } + } + } + }); + + rsx! { {children} } +} + +/// Component that handles the OAuth callback redirect. +/// +/// Mount this at the route matching your configured `redirect_path` +/// (typically `/oauth/callback`). It reads the `code` and `state` +/// query parameters from the URL, calls the `complete_atproto_oauth` +/// server function, updates the session state, and navigates to the +/// home route on success. +/// +/// # Example +/// +/// ```rust,ignore +/// #[derive(Routable)] +/// enum Route { +/// #[route("/oauth/callback")] +/// OAuthCallback {}, // mounts AtprotoOAuthCallback +/// #[route("/")] +/// Home {}, +/// } +/// ``` +#[component] +pub fn AtprotoOAuthCallback() -> Element { + #[cfg_attr(not(target_arch = "wasm32"), allow(unused_mut))] + let mut status = use_signal(|| "Processing login...".to_string()); + #[cfg_attr(not(target_arch = "wasm32"), allow(unused_mut))] + let mut done = use_signal(|| false); + #[cfg_attr(not(target_arch = "wasm32"), allow(unused_mut))] + let mut err = use_signal(String::new); + + #[cfg_attr(not(target_arch = "wasm32"), allow(unused_mut, unused_variables))] + let mut session = use_context::>(); + + use_effect(move || { + #[cfg(target_arch = "wasm32")] + { + let params = extract_query_params(); + if let (Some(code), Some(state)) = (params.get("code"), params.get("state")) { + let code = code.clone(); + let state = state.clone(); + spawn(async move { + match crate::server_fns::complete_atproto_oauth(code, state).await { + Ok(session_data) => { + session.write().did = session_data.did.clone(); + session.write().handle = session_data.handle.clone(); + session.write().pds_endpoint = session_data.pds_endpoint.clone(); + session.write().access_token = session_data.access_token.clone(); + session.write().is_authenticated = true; + + state::save_session(&session.read().clone()); + + status.set("Login successful! Redirecting...".to_string()); + done.set(true); + + let nav = navigator(); + nav.push("/"); + } + Err(e) => { + err.set(format!("Login failed: {}", e)); + } + } + }); + } else { + err.set("Missing code or state parameter in callback URL".to_string()); + } + } + }); + + if !err.read().is_empty() { + return rsx! { + div { + h1 { "Login Failed" } + p { "{err}" } + a { href: "/", "Try Again" } + } + }; + } + + rsx! { + div { + h1 { + if done() { "Welcome!" } else { "Logging in..." } + } + p { "{status}" } + } + } +} + +/// Extracts query parameters from the current browser URL. +#[allow(dead_code)] +#[cfg(target_arch = "wasm32")] +fn extract_query_params() -> std::collections::HashMap { + let window = web_sys::window().expect("no window"); + let location = window.location(); + let search = location.search().unwrap_or_default(); + if search.is_empty() { + return std::collections::HashMap::new(); + } + let query = search.trim_start_matches('?'); + url::form_urlencoded::parse(query.as_bytes()) + .into_owned() + .collect() +} + +/// Stub for non-WASM targets (SSR). +#[cfg(not(target_arch = "wasm32"))] +#[allow(dead_code)] +fn extract_query_params() -> std::collections::HashMap { + std::collections::HashMap::new() +} diff --git a/crates/atproto-oauth-dioxus/src/config.rs b/crates/atproto-oauth-dioxus/src/config.rs new file mode 100644 index 0000000..364fb85 --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/config.rs @@ -0,0 +1,43 @@ +/// Configuration for the AT Protocol OAuth Dioxus integration. +/// +/// Pass an instance to [`AtprotoOAuthProvider`](crate::components::AtprotoOAuthProvider) +/// to configure the OAuth flow. Server-side values (base URL, signing key seed) +/// are read from environment variables. +#[derive(Debug, Clone, PartialEq)] +pub struct AtprotoOAuthConfig { + /// The path for the OAuth callback route on the client. + /// + /// Must match the route where [`AtprotoOAuthCallback`](crate::components::AtprotoOAuthCallback) + /// is mounted. Defaults to `/oauth/callback`. + pub redirect_path: String, + + /// The OAuth scope to request. + /// + /// Defaults to `atproto transition:generic`. + pub scope: String, +} + +impl Default for AtprotoOAuthConfig { + fn default() -> Self { + Self { + redirect_path: "/oauth/callback".to_string(), + scope: "atproto transition:generic".to_string(), + } + } +} + +impl AtprotoOAuthConfig { + /// Creates a new configuration with default scope and the given redirect path. + pub fn new(redirect_path: impl Into) -> Self { + Self { + redirect_path: redirect_path.into(), + scope: "atproto transition:generic".to_string(), + } + } + + /// Sets the OAuth scope. + pub fn with_scope(mut self, scope: impl Into) -> Self { + self.scope = scope.into(); + self + } +} diff --git a/crates/atproto-oauth-dioxus/src/errors.rs b/crates/atproto-oauth-dioxus/src/errors.rs new file mode 100644 index 0000000..163c04a --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/errors.rs @@ -0,0 +1,55 @@ +use thiserror::Error; + +/// Error type for OAuth Dioxus integration operations. +/// +/// Follows the convention `error-atproto-oauth-dioxus-{domain}-{number}`. +#[derive(Debug, Error)] +pub enum DioxusOAuthError { + /// Failed to resolve an AT Protocol handle to a DID. + #[error("error-atproto-oauth-dioxus-resolve-1 Failed to resolve handle: {0}")] + HandleResolutionFailed(String), + + /// Failed to discover PDS OAuth resources. + #[error("error-atproto-oauth-dioxus-resolve-2 Failed to discover PDS OAuth resources: {0}")] + PdsResourceDiscoveryFailed(String), + + /// Failed to resolve DID to a PDS endpoint. + #[error("error-atproto-oauth-dioxus-resolve-3 Failed to resolve DID to PDS: {0}")] + PdsResolutionFailed(String), + + /// The OAuth authorization initiation failed. + #[error("error-atproto-oauth-dioxus-init-1 OAuth authorization initiation failed: {0}")] + OAuthInitFailed(String), + + /// Invalid or expired OAuth state during callback. + #[error("error-atproto-oauth-dioxus-callback-1 Invalid or expired OAuth state")] + InvalidOAuthState, + + /// The token exchange failed. + #[error("error-atproto-oauth-dioxus-callback-2 Token exchange failed: {0}")] + TokenExchangeFailed(String), + + /// The token response is missing the `sub` (DID) field. + #[error("error-atproto-oauth-dioxus-callback-3 Token response missing 'sub' (DID) field")] + MissingSubField, + + /// Failed to generate or load the OAuth signing key. + #[error("error-atproto-oauth-dioxus-key-1 Failed to initialize OAuth signing key: {0}")] + KeyInitializationFailed(String), + + /// The OAUTH_KEY_SEED environment variable has an invalid format. + #[error("error-atproto-oauth-dioxus-key-2 Invalid OAUTH_KEY_SEED: {0}")] + InvalidKeySeed(String), + + /// Failed to derive the public key from the private signing key. + #[error("error-atproto-oauth-dioxus-key-3 Failed to derive public key: {0}")] + PublicKeyDerivationFailed(String), + + /// Failed to generate a JWK from the signing key. + #[error("error-atproto-oauth-dioxus-key-4 Failed to generate JWK: {0}")] + JwkGenerationFailed(String), + + /// Configuration error. + #[error("error-atproto-oauth-dioxus-config-1 Configuration error: {0}")] + ConfigurationError(String), +} diff --git a/crates/atproto-oauth-dioxus/src/hooks.rs b/crates/atproto-oauth-dioxus/src/hooks.rs new file mode 100644 index 0000000..275ccdc --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/hooks.rs @@ -0,0 +1,106 @@ +use dioxus::prelude::*; + +use crate::state; +use crate::types::SessionState; + +/// Reactive handle for the AT Protocol OAuth authentication state. +/// +/// Returned by [`use_atproto_auth`]. All fields are reactive signals +/// that components can read and write. The struct is `Clone + Copy` +/// for ergonomic use in event handlers and async closures. +#[derive(Clone, Copy)] +pub struct AtprotoAuthHandle { + /// The current session state. Provided via Dioxus context. + pub session: Signal, + /// The authorization URL to redirect the user to, if a login is in progress. + pub authorization_url: Signal>, + /// An error message, if the last login attempt failed. + pub error: Signal>, + /// Whether a login request is currently in progress. + pub is_loading: Signal, +} + +/// Hook that returns the AT Protocol OAuth reactive state. +/// +/// Must be called within a component tree that has an +/// [`AtprotoOAuthProvider`](crate::components::AtprotoOAuthProvider) ancestor. +/// +/// # Panics +/// +/// Panics if no `Signal` is found in the Dioxus context. +pub fn use_atproto_auth() -> AtprotoAuthHandle { + let session = use_context::>(); + let authorization_url = use_signal(|| None::); + let error = use_signal(|| None::); + let is_loading = use_signal(|| false); + + AtprotoAuthHandle { + session, + authorization_url, + error, + is_loading, + } +} + +/// Initiates a login by calling the `init_atproto_oauth` server function. +/// +/// Updates the provided signals with the authorization URL on success +/// or an error message on failure. +pub fn do_atproto_login( + handle: String, + mut authorization_url: Signal>, + mut error: Signal>, + mut is_loading: Signal, +) { + if handle.is_empty() { + return; + } + is_loading.set(true); + error.set(None); + spawn(async move { + match crate::server_fns::init_atproto_oauth(handle).await { + Ok(resp) => { + authorization_url.set(Some(resp.authorization_url)); + is_loading.set(false); + } + Err(e) => { + error.set(Some(format!("Login failed: {}", e))); + is_loading.set(false); + } + } + }); +} + +/// Processes the OAuth callback by calling the `complete_atproto_oauth` +/// server function and updating the session state on success. +pub fn do_atproto_complete_login( + code: String, + state: String, + mut session: Signal, + mut error: Signal>, +) { + spawn(async move { + match crate::server_fns::complete_atproto_oauth(code, state).await { + Ok(session_data) => { + session.write().did = session_data.did.clone(); + session.write().handle = session_data.handle.clone(); + session.write().pds_endpoint = session_data.pds_endpoint.clone(); + session.write().access_token = session_data.access_token.clone(); + session.write().is_authenticated = true; + + state::save_session(&session.read().clone()); + + error.set(None); + } + Err(e) => { + error.set(Some(format!("Login failed: {}", e))); + } + } + }); +} + +/// Logs the user out by clearing the session state and localStorage. +pub fn do_atproto_logout(mut session: Signal) { + state::clear_session(); + session.set(SessionState::default()); +} diff --git a/crates/atproto-oauth-dioxus/src/lib.rs b/crates/atproto-oauth-dioxus/src/lib.rs new file mode 100644 index 0000000..3c3446a --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/lib.rs @@ -0,0 +1,98 @@ +//! Dioxus fullstack integration for AT Protocol OAuth authentication. +//! +//! This crate provides a turnkey OAuth PKCE + DPoP flow for Dioxus fullstack +//! applications, wrapping the [`atproto-oauth`] and [`atproto-identity`] crates +//! into ergonomic Dioxus components, hooks, and server functions. +//! +//! # Quick Start +//! +//! 1. Add the dependency to your `Cargo.toml`: +//! +//! ```toml +//! [dependencies] +//! atproto-oauth-dioxus = "0.15" +//! +//! [features] +//! server = ["atproto-oauth-dioxus/server"] +//! ``` +//! +//! 2. Define the callback route in your app's `Route` enum: +//! +//! ```rust,ignore +//! #[derive(Routable, Clone, PartialEq)] +//! enum Route { +//! #[route("/oauth/callback")] +//! OAuthCallback {}, +//! #[route("/")] +//! Home {}, +//! } +//! ``` +//! +//! 3. Wrap your app with the provider and mount the callback: +//! +//! ```rust,ignore +//! use atproto_oauth_dioxus::components::AtprotoOAuthProvider; +//! use atproto_oauth_dioxus::config::AtprotoOAuthConfig; +//! +//! fn App() -> Element { +//! rsx! { +//! AtprotoOAuthProvider { +//! config: AtprotoOAuthConfig::new("/oauth/callback"), +//! Router:: {} +//! } +//! } +//! } +//! ``` +//! +//! 4. Use the [`use_atproto_auth`] hook in your login page: +//! +//! ```rust,ignore +//! use atproto_oauth_dioxus::hooks::{use_atproto_auth, do_atproto_login}; +//! +//! fn LoginPage() -> Element { +//! let auth = use_atproto_auth(); +//! let mut handle = use_signal(String::new); +//! +//! rsx! { +//! input { oninput: move |e| handle.set(e.value()) } +//! button { +//! onclick: move |_| do_atproto_login( +//! handle(), auth.authorization_url, auth.error, auth.is_loading, +//! ), +//! "Login with AT Protocol" +//! } +//! } +//! } +//! ``` +//! +//! # Server Configuration +//! +//! Set the following environment variables for server deployments: +//! +//! - `OAUTH_KEY_SEED` — 64 hex characters (32 bytes) seed for the P-256 +//! signing key. On server restarts, the same seed regenerates the same key. +//! - `HOST_DOMAIN` or `RAILWAY_PUBLIC_DOMAIN` — The public hostname of the +//! deployment. Used to construct the `client_id` and `redirect_uri`. + +#![forbid(unsafe_code)] +#![warn(missing_docs)] + +/// Dioxus components for the AT Protocol OAuth flow. +pub mod components; +/// Configuration for the AT Protocol OAuth Dioxus integration. +pub mod config; +/// Error types for the AT Protocol OAuth Dioxus integration. +pub mod errors; +/// Reactive hooks for AT Protocol OAuth authentication state. +pub mod hooks; +/// Client-side session persistence via localStorage. +pub mod state; +/// Shared data types used across the client and server. +pub mod types; + +/// Server functions for AT Protocol OAuth flows. +pub mod server_fns; + +/// Server-side OAuth orchestration and session management. +#[cfg(feature = "server")] +pub mod server; diff --git a/crates/atproto-oauth-dioxus/src/server.rs b/crates/atproto-oauth-dioxus/src/server.rs new file mode 100644 index 0000000..2f8219d --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/server.rs @@ -0,0 +1,313 @@ +use std::collections::HashMap; +use std::sync::LazyLock; + +use atproto_identity::key::{KeyData, KeyType, generate_key, to_public}; +use atproto_identity::resolve::{HickoryDnsResolver, resolve_subject}; +use atproto_oauth::resources::{AuthorizationServer, pds_resources}; +use atproto_oauth::workflow::{ + OAuthClient, OAuthRequest, OAuthRequestState, oauth_complete, oauth_init, +}; +use p256::SecretKey; + +use crate::errors::DioxusOAuthError; +use crate::types::SessionData; + +static OAUTH_STATES: LazyLock>> = + LazyLock::new(|| tokio::sync::Mutex::new(HashMap::new())); + +pub(crate) static ACTIVE_SESSIONS: LazyLock>> = + LazyLock::new(|| tokio::sync::Mutex::new(HashMap::new())); + +static SIGNING_KEY: LazyLock = LazyLock::new(|| { + get_or_generate_signing_key() + .expect("Failed to initialize OAuth signing key; set a valid OAUTH_KEY_SEED or ensure key generation works") +}); + +#[derive(Clone)] +struct StoredOAuthState { + oauth_request: OAuthRequest, + auth_server: AuthorizationServer, + pds_url: String, + client_id: String, + redirect_uri: String, + signing_key: KeyData, + dpop_key: KeyData, + handle: String, +} + +/// An authenticated AT Protocol OAuth session. +/// +/// Stored server-side after successful token exchange. Other server functions +/// can retrieve this session to make DPoP-authenticated API calls to the +/// user's PDS on their behalf. +#[derive(Clone)] +#[allow(dead_code)] +pub struct ActiveSession { + /// The user's decentralized identifier (DID). + pub did: String, + /// The user's AT Protocol handle. + pub handle: String, + /// The endpoint URL of the user's Personal Data Server. + pub pds_endpoint: String, + /// The OAuth access token for authenticated API calls. + pub access_token: String, + /// The DPoP private key for signing proof-of-possession tokens. + pub dpop_key: KeyData, +} + +/// Retrieves an active session by DID from the session store. +/// +/// Returns `None` if no active session exists for the given DID. +#[allow(dead_code)] +pub async fn get_active_session(did: &str) -> Option { + ACTIVE_SESSIONS.lock().await.get(did).cloned() +} + +/// Returns a reference to the static OAuth signing key. +pub fn get_signing_key() -> &'static KeyData { + &SIGNING_KEY +} + +fn get_or_generate_signing_key() -> Result { + if let Ok(seed_hex) = std::env::var("OAUTH_KEY_SEED") { + let trimmed = seed_hex.trim(); + if !trimmed.is_empty() { + let seed = hex::decode(trimmed) + .map_err(|e| DioxusOAuthError::InvalidKeySeed(format!("Invalid hex: {}", e)))?; + let seed: [u8; 32] = seed.try_into().map_err(|_| { + DioxusOAuthError::InvalidKeySeed( + "OAUTH_KEY_SEED must be exactly 32 bytes (64 hex chars)".to_string(), + ) + })?; + let sk = SecretKey::from_slice(&seed).map_err(|_| { + DioxusOAuthError::InvalidKeySeed( + "OAUTH_KEY_SEED is not a valid P-256 private key".to_string(), + ) + })?; + return Ok(KeyData::new(KeyType::P256Private, sk.to_bytes().to_vec())); + } + } + generate_key(KeyType::P256Private) + .map_err(|e| DioxusOAuthError::KeyInitializationFailed(e.to_string())) +} + +/// Derives the public key JWKS for the signing key. +pub fn signing_key_jwks() -> Result { + let public_key = to_public(&SIGNING_KEY) + .map_err(|e| DioxusOAuthError::PublicKeyDerivationFailed(e.to_string()))?; + let jwk = atproto_oauth::jwk::generate(&public_key) + .map_err(|e| DioxusOAuthError::JwkGenerationFailed(e.to_string()))?; + let jwks = atproto_oauth::jwk::WrappedJsonWebKeySet { keys: vec![jwk] }; + serde_json::to_value(jwks).map_err(|e| DioxusOAuthError::JwkGenerationFailed(e.to_string())) +} + +fn generate_random_hex(len: usize) -> String { + let bytes: Vec = (0..len).map(|_| rand::random::()).collect(); + hex::encode(bytes) +} + +fn urlencode(s: &str) -> String { + form_urlencoded::byte_serialize(s.as_bytes()).collect() +} + +/// Returns the base URL of the deployment. +pub fn base_url() -> String { + let domain = std::env::var("HOST_DOMAIN") + .or_else(|_| std::env::var("RAILWAY_PUBLIC_DOMAIN")) + .unwrap_or_default(); + if domain.is_empty() { + "http://127.0.0.1:8080".to_string() + } else { + format!("https://{}", domain) + } +} + +/// Initiates the AT Protocol OAuth authorization flow. +/// +/// Resolves the user's handle to a DID, discovers their PDS OAuth endpoints, +/// and pushes an authorization request via PAR. Returns the URL the user +/// should be redirected to for authentication. +pub async fn init_oauth(handle: String) -> Result { + let http_client = reqwest::Client::new(); + let dns_resolver = HickoryDnsResolver::create_resolver(&[]); + + let did = resolve_subject(&http_client, &dns_resolver, &handle) + .await + .map_err(|e| DioxusOAuthError::HandleResolutionFailed(e.to_string()))?; + + let pds_url = resolve_did_to_pds(&did).await?; + + let (_protected, auth_server) = pds_resources(&http_client, &pds_url) + .await + .map_err(|e| DioxusOAuthError::PdsResourceDiscoveryFailed(e.to_string()))?; + + let base = base_url(); + let redirect_uri = format!("{}/oauth/callback", base); + let client_id = if base.starts_with("https://") { + format!("{}/oauth/client-metadata.json", base) + } else { + format!( + "http://localhost?redirect_uri={}&scope={}", + urlencode(&redirect_uri), + urlencode("atproto transition:generic"), + ) + }; + + let (code_verifier, code_challenge) = atproto_oauth::pkce::generate(); + + let state = generate_random_hex(16); + let nonce = generate_random_hex(16); + + let signing_key = get_signing_key().clone(); + let dpop_key = generate_key(KeyType::P256Private) + .map_err(|e| DioxusOAuthError::KeyInitializationFailed(e.to_string()))?; + + let oauth_client = OAuthClient { + redirect_uri: redirect_uri.clone(), + client_id: client_id.clone(), + private_signing_key_data: signing_key.clone(), + }; + + let oauth_request_state = OAuthRequestState { + state: state.clone(), + nonce: nonce.clone(), + code_challenge, + scope: "atproto transition:generic".to_string(), + }; + + let par_response = oauth_init( + &http_client, + &oauth_client, + &dpop_key, + Some(&handle), + &auth_server, + &oauth_request_state, + ) + .await + .map_err(|e| DioxusOAuthError::OAuthInitFailed(e.to_string()))?; + + let oauth_request = OAuthRequest { + oauth_state: state.clone(), + issuer: auth_server.issuer.clone(), + authorization_server: auth_server.pushed_authorization_request_endpoint.clone(), + nonce, + pkce_verifier: code_verifier, + signing_public_key: hex::encode(&signing_key.1), + dpop_private_key: hex::encode(&dpop_key.1), + created_at: chrono::Utc::now(), + expires_at: chrono::Utc::now() + chrono::TimeDelta::seconds(par_response.expires_in as i64), + }; + + OAUTH_STATES.lock().await.insert( + state.clone(), + StoredOAuthState { + oauth_request, + auth_server: auth_server.clone(), + pds_url, + client_id: client_id.clone(), + redirect_uri, + signing_key, + dpop_key, + handle: handle.clone(), + }, + ); + + let authorization_url = format!( + "{}?client_id={}&request_uri={}&state={}", + auth_server.authorization_endpoint, + urlencode(&client_id), + urlencode(&par_response.request_uri), + urlencode(&state), + ); + + Ok(authorization_url) +} + +/// Completes the OAuth flow by exchanging the authorization code for tokens. +/// +/// Verifies the state parameter, performs the token exchange with DPoP, +/// and stores the active session for subsequent authenticated API calls. +pub async fn complete_oauth(code: String, state: String) -> Result { + let stored = { + let mut states = OAUTH_STATES.lock().await; + states + .remove(&state) + .ok_or(DioxusOAuthError::InvalidOAuthState)? + }; + + let http_client = reqwest::Client::new(); + + let oauth_client = OAuthClient { + redirect_uri: stored.redirect_uri.clone(), + client_id: stored.client_id.clone(), + private_signing_key_data: stored.signing_key.clone(), + }; + + let token_response = oauth_complete( + &http_client, + &oauth_client, + &stored.dpop_key, + &code, + &stored.oauth_request, + &stored.auth_server, + ) + .await + .map_err(|e| DioxusOAuthError::TokenExchangeFailed(e.to_string()))?; + + let did = token_response + .sub + .ok_or(DioxusOAuthError::MissingSubField)?; + + ACTIVE_SESSIONS.lock().await.insert( + did.clone(), + ActiveSession { + did: did.clone(), + handle: stored.handle.clone(), + pds_endpoint: stored.pds_url.clone(), + access_token: token_response.access_token.clone(), + dpop_key: stored.dpop_key.clone(), + }, + ); + + Ok(SessionData { + did, + handle: stored.handle, + pds_endpoint: stored.pds_url, + access_token: token_response.access_token, + }) +} + +async fn resolve_did_to_pds(did: &str) -> Result { + let http_client = reqwest::Client::new(); + let did_doc_url = format!("https://plc.directory/{}", did); + let resp = http_client + .get(&did_doc_url) + .send() + .await + .map_err(|e| DioxusOAuthError::PdsResolutionFailed(e.to_string()))?; + + let doc: serde_json::Value = resp + .json() + .await + .map_err(|e| DioxusOAuthError::PdsResolutionFailed(e.to_string()))?; + + for svc in doc["service"] + .as_array() + .ok_or(DioxusOAuthError::PdsResolutionFailed( + "No services in DID document".to_string(), + ))? + { + if svc["id"].as_str() == Some("#atproto_pds") { + return svc["serviceEndpoint"] + .as_str() + .map(|s| s.to_string()) + .ok_or(DioxusOAuthError::PdsResolutionFailed( + "No serviceEndpoint for atproto_pds".to_string(), + )); + } + } + + Err(DioxusOAuthError::PdsResolutionFailed( + "No atproto_pds service found".to_string(), + )) +} diff --git a/crates/atproto-oauth-dioxus/src/server_fns.rs b/crates/atproto-oauth-dioxus/src/server_fns.rs new file mode 100644 index 0000000..8534cb9 --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/server_fns.rs @@ -0,0 +1,66 @@ +use dioxus::prelude::*; + +use crate::types::{ClientMetadata, OAuthInitResponse, SessionData}; + +/// Server function: initiates the AT Protocol OAuth authorization flow. +/// +/// Resolves the user's handle, discovers their PDS, and returns +/// an authorization URL for the user to visit. +/// +/// Call this from the client when the user clicks "Log in". +#[server] +pub async fn init_atproto_oauth(handle: String) -> Result { + let authorization_url = crate::server::init_oauth(handle) + .await + .map_err(|e| ServerFnError::new(e.to_string()))?; + Ok(OAuthInitResponse { authorization_url }) +} + +/// Server function: completes the OAuth flow by exchanging the +/// authorization code for tokens. +/// +/// Called automatically by the [`AtprotoOAuthCallback`] component +/// when the user is redirected back from their PDS. +#[server] +pub async fn complete_atproto_oauth( + code: String, + state: String, +) -> Result { + crate::server::complete_oauth(code, state) + .await + .map(|s| SessionData { + did: s.did, + handle: s.handle, + pds_endpoint: s.pds_endpoint, + access_token: s.access_token, + }) + .map_err(|e| ServerFnError::new(e.to_string())) +} + +/// Serves the OAuth client metadata at `GET /oauth/client-metadata.json`. +/// +/// This endpoint is used by AT Protocol authorization servers to verify +/// the client's identity and discover supported grant types, redirect URIs, +/// and the client's public signing key (JWKS). +#[get("/oauth/client-metadata.json")] +pub async fn client_metadata() -> Result { + let base = crate::server::base_url(); + let jwks = crate::server::signing_key_jwks().map_err(|e| ServerFnError::new(e.to_string()))?; + + Ok(ClientMetadata { + client_id: format!("{}/oauth/client-metadata.json", base), + dpop_bound_access_tokens: true, + application_type: "web".to_string(), + redirect_uris: vec![format!("{}/oauth/callback", base)], + grant_types: vec![ + "authorization_code".to_string(), + "refresh_token".to_string(), + ], + response_types: vec!["code".to_string()], + scope: "atproto transition:generic".to_string(), + token_endpoint_auth_method: "private_key_jwt".to_string(), + subject_type: "public".to_string(), + token_endpoint_auth_signing_alg: "ES256".to_string(), + jwks, + }) +} diff --git a/crates/atproto-oauth-dioxus/src/state.rs b/crates/atproto-oauth-dioxus/src/state.rs new file mode 100644 index 0000000..9a40c9a --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/state.rs @@ -0,0 +1,53 @@ +use crate::types::SessionState; + +/// localStorage key for persisting the AT Protocol OAuth session. +#[cfg(target_arch = "wasm32")] +const SESSION_STORAGE_KEY: &str = "atproto-oauth-session"; + +/// Attempts to load a persisted session from localStorage. +/// +/// Returns `None` if no session is stored or if deserialization fails. +#[cfg(target_arch = "wasm32")] +pub fn load_session() -> Option { + let storage = web_sys::window()?.local_storage().ok()??; + let json = storage.get_item(SESSION_STORAGE_KEY).ok()??; + serde_json::from_str(&json).ok() +} + +/// Persists the session state to localStorage. +#[cfg(target_arch = "wasm32")] +pub fn save_session(state: &SessionState) { + if let (Some(storage), Ok(json)) = ( + web_sys::window() + .and_then(|w| w.local_storage().ok()) + .flatten(), + serde_json::to_string(state), + ) { + let _ = storage.set_item(SESSION_STORAGE_KEY, &json); + } +} + +/// Removes the persisted session from localStorage. +#[cfg(target_arch = "wasm32")] +pub fn clear_session() { + if let Some(storage) = web_sys::window() + .and_then(|w| w.local_storage().ok()) + .flatten() + { + let _ = storage.remove_item(SESSION_STORAGE_KEY); + } +} + +/// Stub for non-WASM targets (SSR/server rendering). +#[cfg(not(target_arch = "wasm32"))] +pub fn load_session() -> Option { + None +} + +/// Stub for non-WASM targets. +#[cfg(not(target_arch = "wasm32"))] +pub fn save_session(_state: &SessionState) {} + +/// Stub for non-WASM targets. +#[cfg(not(target_arch = "wasm32"))] +pub fn clear_session() {} diff --git a/crates/atproto-oauth-dioxus/src/types.rs b/crates/atproto-oauth-dioxus/src/types.rs new file mode 100644 index 0000000..59314cd --- /dev/null +++ b/crates/atproto-oauth-dioxus/src/types.rs @@ -0,0 +1,75 @@ +use serde::{Deserialize, Serialize}; + +/// Response returned after initiating the OAuth authorization flow. +/// +/// Contains the URL that the user should be redirected to for +/// authenticating with their AT Protocol provider. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct OAuthInitResponse { + /// The authorization URL to redirect the user to. + pub authorization_url: String, +} + +/// Session data returned after successful OAuth token exchange. +/// +/// Contains the authenticated user's identity and access credentials +/// needed to make authorized API calls to their PDS. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct SessionData { + /// The user's decentralized identifier (DID). + pub did: String, + /// The user's AT Protocol handle. + pub handle: String, + /// The endpoint URL of the user's Personal Data Server. + pub pds_endpoint: String, + /// The OAuth access token for authenticated API calls. + pub access_token: String, +} + +/// OAuth client metadata published at `client-metadata.json`. +/// +/// Served as a well-known endpoint for the AT Protocol authorization +/// server to discover client configuration including JWKS and redirect URIs. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ClientMetadata { + /// The OAuth client identifier. + pub client_id: String, + /// Whether DPoP-bound access tokens are supported. + pub dpop_bound_access_tokens: bool, + /// The application type (always `web`). + pub application_type: String, + /// Allowed redirect URIs after authorization. + pub redirect_uris: Vec, + /// Supported OAuth grant types. + pub grant_types: Vec, + /// Supported OAuth response types. + pub response_types: Vec, + /// Requested OAuth scope. + pub scope: String, + /// Authentication method for the token endpoint. + pub token_endpoint_auth_method: String, + /// Subject type for the client. + pub subject_type: String, + /// Signing algorithm for token endpoint authentication. + pub token_endpoint_auth_signing_alg: String, + /// JSON Web Key Set containing the client's public signing key. + pub jwks: serde_json::Value, +} + +/// Reactive session state used on the client side. +/// +/// Stored in Dioxus context and persisted to localStorage so the +/// session survives page reloads. +#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] +pub struct SessionState { + /// Whether the user is currently authenticated. + pub is_authenticated: bool, + /// The user's decentralized identifier (DID). + pub did: String, + /// The user's AT Protocol handle. + pub handle: String, + /// The endpoint URL of the user's Personal Data Server. + pub pds_endpoint: String, + /// The OAuth access token. + pub access_token: String, +}