From 74c518f5b655443496cc0d27d09cd8a4eb02fa0c Mon Sep 17 00:00:00 2001 From: HexaField Date: Wed, 11 Mar 2026 13:40:01 +1100 Subject: [PATCH] feat: expose local_socket_addrs via HcP2p trait for WebRTC ICE Adds local_socket_addrs() to HcP2p trait with default empty vec. HolochainP2pActor implements it by calling through kitsune.transport().local_socket_addrs(). Enables kitsune2 path overrides for local development with transport changes. Consumers (e.g. AD4M executor) can call conductor.holochain_p2p().local_socket_addrs().await Part of: coasys/ad4m#719 --- Cargo.lock | 4964 +++++++++++++++-------- Cargo.toml | 34 +- crates/holochain_p2p/src/spawn/actor.rs | 2134 +++++++--- crates/holochain_p2p/src/types/actor.rs | 135 +- 4 files changed, 5034 insertions(+), 2233 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3e843e129c..d477d4bbb6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -100,7 +100,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -155,9 +155,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "app_dirs2" @@ -167,7 +167,7 @@ checksum = "a7e7b35733e3a8c1ccb90385088dd5b6eaa61325cb4d1ad56e683b5224ff352e" dependencies = [ "jni", "ndk-context", - "winapi 0.3.9", + "winapi", "xdg", ] @@ -182,9 +182,12 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" +dependencies = [ + "rustversion", +] [[package]] name = "arrayref" @@ -198,6 +201,45 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "asn1-rs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 2.0.18", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "assert2" version = "0.3.16" @@ -218,14 +260,14 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "assert_cmd" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcbb6924530aa9e0432442af08bbcafdad182db80d2e560da42a6d442535bf85" +checksum = "9c5bcfa8749ac45dd12cb11055aeeb6b27a3895560d60d71e3c23bf979e60514" dependencies = [ "anstyle", "bstr", @@ -249,10 +291,17 @@ dependencies = [ ] [[package]] -name = "async-once-cell" -version = "0.5.4" +name = "async-compat" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a" +checksum = "a1ba85bc55464dcbf728b56d97e119d673f4cf9062be330a9a26f3acf504a590" +dependencies = [ + "futures-core", + "futures-io", + "once_cell", + "pin-project-lite", + "tokio", +] [[package]] name = "async-recursion" @@ -262,7 +311,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -273,7 +322,36 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", ] [[package]] @@ -283,12 +361,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "autocfg" -version = "0.1.8" +name = "attohttpc" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" +checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" dependencies = [ - "autocfg 1.5.0", + "base64", + "http", + "log", + "url", ] [[package]] @@ -299,9 +380,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5932a7d9d28b0d2ea34c6b3779d35e3dd6f6345317c34e73438c4f1f29144151" +checksum = "d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9" dependencies = [ "aws-lc-sys", "zeroize", @@ -309,11 +390,10 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.33.0" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1826f2e4cfc2cd19ee53c42fbf68e2f81ec21108e0b7ecf6a71cf062137360fc" +checksum = "b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549" dependencies = [ - "bindgen 0.72.1", "cc", "cmake", "dunce", @@ -327,13 +407,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" dependencies = [ "axum-core", - "base64 0.22.1", + "base64", "bytes", "futures-util", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", - "hyper 1.8.1", + "hyper", "hyper-util", "itoa", "matchit", @@ -345,8 +425,8 @@ dependencies = [ "serde", "serde_json", "serde_path_to_error", - "sha1", - "sync_wrapper 1.0.2", + "sha1 0.10.6", + "sync_wrapper", "tokio", "tokio-tungstenite 0.26.2", "tower", @@ -356,18 +436,18 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", "mime", "pin-project-lite", - "sync_wrapper 1.0.2", + "sync_wrapper", "tower-layer", "tower-service", ] @@ -381,19 +461,30 @@ dependencies = [ "arc-swap", "bytes", "fs-err", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.8.1", + "http", + "http-body", + "hyper", "hyper-util", "pin-project-lite", - "rustls 0.23.35", - "rustls-pemfile 2.2.0", + "rustls", + "rustls-pemfile", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", ] +[[package]] +name = "backon" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" +dependencies = [ + "fastrand", + "gloo-timers", + "tokio", +] + [[package]] name = "backtrace" version = "0.3.76" @@ -410,10 +501,10 @@ dependencies = [ ] [[package]] -name = "base64" -version = "0.21.7" +name = "base32" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" [[package]] name = "base64" @@ -423,9 +514,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.0" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bimap" @@ -448,7 +539,7 @@ version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.10.5", @@ -459,7 +550,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -468,27 +559,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.10.0", - "cexpr", - "clang-sys", - "itertools 0.10.5", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 2.1.1", - "shlex", - "syn 2.0.110", -] - -[[package]] -name = "bindgen" -version = "0.72.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" -dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.10.5", @@ -499,7 +570,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -531,19 +602,36 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +dependencies = [ + "serde", +] [[package]] name = "blake2b_simd" -version = "1.0.3" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq 0.4.2", +] + +[[package]] +name = "blake3" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq", + "cc", + "cfg-if", + "constant_time_eq 0.4.2", + "cpufeatures", ] [[package]] @@ -555,6 +643,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96eb4cdd6cf1b31d671e9efe75c5d1ec614776856cefbe109ca373554a6d514f" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block2" version = "0.6.2" @@ -583,9 +680,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytecheck" @@ -629,7 +726,7 @@ checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -640,9 +737,9 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder" @@ -652,9 +749,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" dependencies = [ "serde", ] @@ -678,12 +775,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "c_linked_list" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" - [[package]] name = "cassowary" version = "0.3.0" @@ -707,9 +798,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.46" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97463e1064cb1b1c1384ad0a0b9c8abd0988e2a91f52606c80ef14aadb63e36" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", @@ -746,9 +837,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "js-sys", @@ -791,7 +882,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", ] @@ -808,9 +899,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.51" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -818,9 +909,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.51" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -831,49 +922,38 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "clap_lex" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" - -[[package]] -name = "cloudabi" -version = "0.0.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags 1.3.2", -] +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "cmake" -version = "0.1.54" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ "cc", ] [[package]] -name = "codespan-reporting" -version = "0.13.1" +name = "cobs" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "serde", - "termcolor", - "unicode-width 0.2.0", + "thiserror 2.0.18", ] [[package]] @@ -884,11 +964,11 @@ checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "colored" -version = "3.0.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" +checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -931,38 +1011,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "constant_time_eq" -version = "0.3.1" +name = "const-oid" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] -name = "contrafact" -version = "0.2.0-rc.1" +name = "constant_time_eq" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bfae7a2ef93841d7e9e5ef69e387b26e70f7b156434b6b95714006cc00e1f9" -dependencies = [ - "arbitrary", - "derive_more 0.99.20", - "either", - "itertools 0.10.5", - "num", - "once_cell", - "rand 0.7.3", - "tracing", -] +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] -name = "convert_case" -version = "0.4.0" +name = "constant_time_eq" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "convert_case" -version = "0.7.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" dependencies = [ "unicode-segmentation", ] @@ -996,6 +1066,16 @@ dependencies = [ "url", ] +[[package]] +name = "cordyceps" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" +dependencies = [ + "loom", + "tracing", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1033,11 +1113,11 @@ dependencies = [ [[package]] name = "corosensei" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d46a43097861058cb45affe888e40ba19b57a8210650144cdc7b50c9d87840a" +checksum = "2b2b4c7e3e97730e6b0b8c5ff5ca82c663d1a645e4f630f4fa4c24e80626787e" dependencies = [ - "autocfg 1.5.0", + "autocfg", "cfg-if", "libc", "scopeguard", @@ -1055,7 +1135,7 @@ dependencies = [ "lazy_static", "proc-macro2", "regex", - "syn 2.0.110", + "syn 2.0.117", "unicode-xid", ] @@ -1067,7 +1147,7 @@ checksum = "25fcfea2ee05889597d35e986c2ad0169694320ae5cc8f6d2640a4bb8a884560" dependencies = [ "lazy_static", "proc-macro2", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1170,9 +1250,9 @@ checksum = "56b08621c00321efcfa3eee6a3179adc009e21ea8d24ca7adc3c326184bc3f48" [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -1226,6 +1306,12 @@ dependencies = [ "itertools 0.10.5", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "cron" version = "0.15.0" @@ -1286,14 +1372,14 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "crossterm_winapi", "mio", "parking_lot", "rustix 0.38.44", "signal-hook", "signal-hook-mio", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1302,16 +1388,16 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "crossterm_winapi", - "derive_more 2.0.1", + "derive_more 2.1.1", "document-features", "mio", "parking_lot", - "rustix 1.1.2", + "rustix 1.1.4", "signal-hook", "signal-hook-mio", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1320,7 +1406,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1339,6 +1425,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +dependencies = [ + "hybrid-array", +] + [[package]] name = "ctrlc" version = "3.5.1" @@ -1359,84 +1454,40 @@ dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", - "digest", - "fiat-crypto", + "digest 0.10.7", + "fiat-crypto 0.2.9", "rustc_version", "subtle", "zeroize", ] [[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.110", -] - -[[package]] -name = "cxx" -version = "1.0.188" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ac4eaf7ebe29e92f1b091ceefec7710a53a6f6154b2460afda626c113b65b9" -dependencies = [ - "cc", - "cxx-build", - "cxxbridge-cmd", - "cxxbridge-flags", - "cxxbridge-macro", - "foldhash 0.2.0", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.188" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2abd4c3021eefbac5149f994c117b426852bca3a0aad227698527bca6d4ea657" -dependencies = [ - "cc", - "codespan-reporting", - "indexmap 2.11.1", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.110", -] - -[[package]] -name = "cxxbridge-cmd" -version = "1.0.188" +name = "curve25519-dalek" +version = "5.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f12fbc5888b2311f23e52a601e11ad7790d8f0dbb903ec26e2513bf5373ed70" +checksum = "6f9200d1d13637f15a6acb71e758f64624048d85b31a5fdbfd8eca1e2687d0b7" dependencies = [ - "clap", - "codespan-reporting", - "indexmap 2.11.1", - "proc-macro2", - "quote", - "syn 2.0.110", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.11.0-rc.10", + "fiat-crypto 0.3.0", + "rand_core 0.9.5", + "rustc_version", + "serde", + "subtle", + "zeroize", ] [[package]] -name = "cxxbridge-flags" -version = "1.0.188" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d3dd7870af06e283f3f8ce0418019c96171c9ce122cfb9c8879de3d84388fd" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.188" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26f0d82da663316786791c3d0e9f9edc7d1ee1f04bdad3d2643086a69d6256c" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "indexmap 2.11.1", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1459,6 +1510,16 @@ dependencies = [ "darling_macro 0.21.3", ] +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + [[package]] name = "darling_core" version = "0.20.11" @@ -1470,7 +1531,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1484,7 +1545,20 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.110", + "syn 2.0.117", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.117", ] [[package]] @@ -1495,7 +1569,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1506,7 +1580,18 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.110", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", + "quote", + "syn 2.0.117", ] [[package]] @@ -1531,9 +1616,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "datachannel" @@ -1542,7 +1627,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15faaf8ab2b10994dcc623bf0d1c243f210ad31112943211dd9b43df4977f6c2" dependencies = [ "datachannel-sys", - "derive_more 2.0.1", + "derive_more 2.1.1", "parking_lot", "serde", "tracing", @@ -1574,14 +1659,40 @@ version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ - "const-oid", + "const-oid 0.9.6", + "pem-rfc7468 0.7.0", "zeroize", ] [[package]] -name = "deranged" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "der" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" +dependencies = [ + "const-oid 0.10.2", + "pem-rfc7468 1.0.0", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", @@ -1596,7 +1707,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1617,7 +1728,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1627,7 +1738,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1636,35 +1747,40 @@ version = "0.99.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ - "convert_case 0.4.0", "proc-macro2", "quote", - "rustc_version", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ - "convert_case 0.7.1", + "convert_case", "proc-macro2", "quote", - "syn 2.0.110", + "rustc_version", + "syn 2.0.117", "unicode-xid", ] +[[package]] +name = "diatomic-waker" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" + [[package]] name = "diff" version = "0.1.13" @@ -1683,11 +1799,23 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "const-oid 0.9.6", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afa94b64bfc6549e6e4b5a3216f22593224174083da7a90db47e951c4fb31725" +dependencies = [ + "block-buffer 0.11.0", + "const-oid 0.10.2", + "crypto-common 0.2.1", +] + [[package]] name = "dirs" version = "6.0.0" @@ -1706,7 +1834,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1715,7 +1843,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "block2", "libc", "objc2", @@ -1729,7 +1857,18 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", +] + +[[package]] +name = "dlopen2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" +dependencies = [ + "libc", + "once_cell", + "winapi", ] [[package]] @@ -1741,6 +1880,12 @@ dependencies = [ "litrs", ] +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "downcast" version = "0.11.0" @@ -1765,8 +1910,19 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "pkcs8", - "signature", + "pkcs8 0.10.2", + "signature 2.2.0", +] + +[[package]] +name = "ed25519" +version = "3.0.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e914c7c52decb085cea910552e24c63ac019e3ab8bf001ff736da9a9d9d890" +dependencies = [ + "pkcs8 0.11.0-rc.11", + "serde", + "signature 3.0.0-rc.10", ] [[package]] @@ -1775,11 +1931,27 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ - "curve25519-dalek", - "ed25519", + "curve25519-dalek 4.1.3", + "ed25519 2.2.3", "rand_core 0.6.4", "serde", - "sha2", + "sha2 0.10.9", + "subtle", + "zeroize", +] + +[[package]] +name = "ed25519-dalek" +version = "3.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad207ed88a133091f83224265eac21109930db09bedcad05d5252f2af2de20a1" +dependencies = [ + "curve25519-dalek 5.0.0-pre.1", + "ed25519 3.0.0-rc.4", + "rand_core 0.9.5", + "serde", + "sha2 0.11.0-rc.2", + "signature 3.0.0-rc.10", "subtle", "zeroize", ] @@ -1789,6 +1961,9 @@ name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] [[package]] name = "email_address" @@ -1799,6 +1974,18 @@ dependencies = [ "serde", ] +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "encoding_rs" version = "0.8.35" @@ -1808,6 +1995,29 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "enum-assoc" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed8956bd5c1f0415200516e78ff07ec9e16415ade83c056c230d7b7ea0d55b7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "enum-iterator" version = "0.7.0" @@ -1846,14 +2056,14 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "env_filter" -version = "0.1.4" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" dependencies = [ "log", ] @@ -1866,9 +2076,9 @@ checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" [[package]] name = "env_logger" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" dependencies = [ "env_filter", "log", @@ -1887,6 +2097,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "etcetera" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c7b13d0780cb82722fd59f6f57f925e143427e4a75313a6c77243bf5326ae6" +dependencies = [ + "cfg-if", + "home", "windows-sys 0.59.0", ] @@ -1946,6 +2167,18 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "fastbloom" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" +dependencies = [ + "getrandom 0.3.4", + "libm", + "rand 0.9.2", + "siphasher", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -1958,33 +2191,32 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "fiat-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + [[package]] name = "filetime" -version = "0.2.26" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" +checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.60.2", ] [[package]] name = "find-msvc-tools" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" - -[[package]] -name = "fixedbitset" -version = "0.4.2" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fixt" -version = "0.6.0" +version = "0.7.0-dev.0" dependencies = [ "holochain_serialized_bytes", "lazy_static", @@ -2006,13 +2238,13 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", - "libz-rs-sys", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -2035,6 +2267,17 @@ dependencies = [ "serde", ] +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2053,6 +2296,21 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -2080,11 +2338,11 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "fs-err" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d91fd049c123429b018c47887d3f75a265540dd3c30ba9cb7bae9197edb03a" +checksum = "73fde052dbfc920003cfd2c8e2c6e6d4cc7c1091538c3a24226cec0665ab08c0" dependencies = [ - "autocfg 1.5.0", + "autocfg", "tokio", ] @@ -2094,17 +2352,11 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -2115,11 +2367,24 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-buffered" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4421cb78ee172b6b06080093479d3c50f058e7c81b7d577bbb8d118d551d4cd5" +dependencies = [ + "cordyceps", + "diatomic-waker", + "futures-core", + "pin-project-lite", + "spin 0.10.0", +] + [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -2127,55 +2392,79 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", "futures-util", ] +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-lite" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -2185,28 +2474,22 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] -[[package]] -name = "gcc" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" - [[package]] name = "generator" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" +checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" dependencies = [ "cc", "cfg-if", "libc", "log", "rustversion", - "windows", + "windows-link 0.2.1", + "windows-result 0.4.1", ] [[package]] @@ -2219,64 +2502,44 @@ dependencies = [ "version_check", ] -[[package]] -name = "get_if_addrs" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abddb55a898d32925f3148bd281174a68eeb68bbfd9a5938a57b18f506ee4ef7" -dependencies = [ - "c_linked_list", - "get_if_addrs-sys", - "libc", - "winapi 0.2.8", -] - -[[package]] -name = "get_if_addrs-sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04f9fb746cf36b191c00f3ede8bde9c8e64f9f4b05ae2694a9ccf5e3f5ab48" -dependencies = [ - "gcc", - "libc", -] - [[package]] name = "getrandom" -version = "0.1.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.9.0+wasi-snapshot-preview1", + "wasi", + "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.2.16" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "r-efi", + "wasip2", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi", "wasip2", - "wasm-bindgen", + "wasip3", ] [[package]] @@ -2303,36 +2566,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] -name = "h2" -version = "0.3.27" +name = "gloo-timers" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ - "bytes", - "fnv", + "futures-channel", "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.11.1", - "slab", - "tokio", - "tokio-util", - "tracing", + "js-sys", + "wasm-bindgen", ] [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.1", + "http", "indexmap 2.11.1", "slab", "tokio", @@ -2351,6 +2607,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -2388,9 +2653,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", @@ -2407,49 +2672,10 @@ dependencies = [ ] [[package]] -name = "hc_demo_cli" -version = "0.6.0-dev.1" -dependencies = [ - "cfg-if", - "clap", - "flate2", - "hdi", - "hdk", - "holochain", - "holochain_keystore", - "holochain_serialized_bytes", - "holochain_types", - "rand 0.9.2", - "rand-utf8", - "rustls 0.23.35", - "serde", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", - "wasm-opt", -] - -[[package]] -name = "hc_seed_bundle" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7fc57959f7161c8cab812df90dc06f2b9762871295bf38b9c41f9958c47d0e" -dependencies = [ - "futures", - "one_err", - "rmp-serde", - "rmpv", - "serde", - "serde_bytes", - "sodoken", - "tokio", -] - -[[package]] -name = "hc_seed_bundle" -version = "0.6.3" -source = "git+https://github.com/coasys/lair.git?branch=0.6.3-coasys#6a4c3486928104471069baa565bb55d66361ace6" +name = "hc_seed_bundle" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7fc57959f7161c8cab812df90dc06f2b9762871295bf38b9c41f9958c47d0e" dependencies = [ "futures", "one_err", @@ -2475,18 +2701,18 @@ dependencies = [ [[package]] name = "hc_service_check" -version = "0.3.0" +version = "0.4.0-dev.2" dependencies = [ "clap", "tokio", - "tx5-signal 0.7.2", - "ureq 3.1.4", + "tx5-signal", + "ureq 3.2.0", "url2", ] [[package]] name = "hcterm" -version = "0.6.0" +version = "0.7.0-dev.15" dependencies = [ "anyhow", "chrono", @@ -2508,7 +2734,7 @@ dependencies = [ [[package]] name = "hdi" -version = "0.7.0" +version = "0.8.0-dev.6" dependencies = [ "fixt", "getrandom 0.3.4", @@ -2530,7 +2756,7 @@ dependencies = [ [[package]] name = "hdk" -version = "0.6.0" +version = "0.7.0-dev.9" dependencies = [ "getrandom 0.3.4", "hdi", @@ -2548,7 +2774,7 @@ dependencies = [ [[package]] name = "hdk_derive" -version = "0.6.0" +version = "0.7.0-dev.6" dependencies = [ "darling 0.21.3", "heck 0.5.0", @@ -2557,10 +2783,24 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", "trybuild", ] +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "serde", + "spin 0.9.8", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.4.1" @@ -2587,9 +2827,71 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-literal" -version = "0.4.1" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e712f64ec3850b98572bffac52e2c6f282b29fe6c5fa6d42334b30be438d95c1" + +[[package]] +name = "hickory-proto" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +dependencies = [ + "async-trait", + "bytes", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "h2", + "http", + "idna", + "ipnet", + "once_cell", + "rand 0.9.2", + "ring", + "rustls", + "thiserror 2.0.18", + "tinyvec", + "tokio", + "tokio-rustls", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "moka", + "once_cell", + "parking_lot", + "rand 0.9.2", + "resolv-conf", + "rustls", + "smallvec", + "thiserror 2.0.18", + "tokio", + "tokio-rustls", + "tracing", +] + +[[package]] +name = "hkdf" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] [[package]] name = "hmac" @@ -2597,17 +2899,17 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] name = "holo_hash" -version = "0.6.0" +version = "0.7.0-dev.5" dependencies = [ - "base64 0.22.1", + "base64", "blake2b_simd", "bytes", - "derive_more 2.0.1", + "derive_more 2.1.1", "fixt", "futures", "holochain_serialized_bytes", @@ -2623,41 +2925,37 @@ dependencies = [ "serde", "serde_bytes", "serde_json", - "sha2", - "thiserror 2.0.17", + "sha2 0.10.9", + "thiserror 2.0.18", ] [[package]] name = "holochain" -version = "0.6.0" +version = "0.7.0-dev.15" dependencies = [ "anyhow", "assert2", "assert_cmd", - "async-once-cell", "async-trait", - "base64 0.22.1", - "bytes", + "base64", "cfg-if", "chrono", "clap", - "contrafact", "criterion", - "derive_more 2.0.1", + "derive_more 2.1.1", "diff", - "ed25519-dalek", + "ed25519-dalek 2.2.0", "either", "fixt", "futures", - "get_if_addrs", "getrandom 0.3.4", "hdk", "holo_hash", "holochain", "holochain_cascade", - "holochain_chc", "holochain_conductor_api", "holochain_conductor_config", + "holochain_data", "holochain_keystore", "holochain_metrics", "holochain_nonce", @@ -2684,8 +2982,7 @@ dependencies = [ "kitsune2_core", "kitsune2_test_utils", "lair_keystore", - "lair_keystore_api 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "maplit", + "lair_keystore_api", "matches", "mockall", "mr_bundle", @@ -2693,18 +2990,15 @@ dependencies = [ "nanoid", "once_cell", "one_err", - "opentelemetry_api", + "opentelemetry 0.31.0", "parking_lot", - "petgraph", "predicates", "pretty_assertions", "rand 0.8.5", "rand 0.9.2", "rand-utf8", - "regex", - "reqwest 0.12.24", "rusqlite", - "rustls 0.23.35", + "rustls", "schemars 0.9.0", "sd-notify", "serde", @@ -2719,7 +3013,7 @@ dependencies = [ "task-motel", "tempfile", "test-case", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-stream", "tokio-tungstenite 0.27.0", @@ -2727,7 +3021,6 @@ dependencies = [ "tracing-futures", "tracing-subscriber", "unwrap_to", - "url", "url2", "uuid 1.18.1", "wasmer", @@ -2736,14 +3029,13 @@ dependencies = [ [[package]] name = "holochain_cascade" -version = "0.6.0" +version = "0.7.0-dev.15" dependencies = [ "async-trait", "fixt", "futures", "holo_hash", "holochain_cascade", - "holochain_chc", "holochain_p2p", "holochain_serialized_bytes", "holochain_sqlite", @@ -2759,47 +3051,19 @@ dependencies = [ "parking_lot", "pretty_assertions", "test-case", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "holochain_chc" -version = "0.3.0" -dependencies = [ - "async-trait", - "derive_more 2.0.1", - "fixt", - "futures", - "getrandom 0.3.4", - "holo_hash", - "holochain_chc", - "holochain_keystore", - "holochain_nonce", - "holochain_serialized_bytes", - "holochain_types", - "must_future", - "one_err", - "parking_lot", - "pretty_assertions", - "reqwest 0.12.24", - "serde", - "serde_bytes", - "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", - "url", ] [[package]] name = "holochain_cli" -version = "0.6.0" +version = "0.7.0-dev.15" dependencies = [ "anyhow", "clap", "holochain_cli_bundle", + "holochain_cli_client", "holochain_cli_sandbox", "holochain_trace", "lazy_static", @@ -2808,7 +3072,7 @@ dependencies = [ [[package]] name = "holochain_cli_bundle" -version = "0.6.0" +version = "0.7.0-dev.14" dependencies = [ "anyhow", "assert_cmd", @@ -2823,36 +3087,53 @@ dependencies = [ "serde_json", "serde_yaml", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "walkdir", ] [[package]] -name = "holochain_cli_sandbox" -version = "0.6.0" +name = "holochain_cli_client" +version = "0.7.0-dev.15" dependencies = [ "ansi_term", "anyhow", "chrono", "clap", - "ed25519-dalek", - "fixt", - "futures", + "ed25519-dalek 2.2.0", "hc_serde_json", "holo_hash", - "holochain_chc", + "holochain", "holochain_client", "holochain_conductor_api", - "holochain_conductor_config", - "holochain_trace", "holochain_types", "holochain_util", - "holochain_websocket", "indexmap 2.11.1", "kitsune2_api", "kitsune2_core", - "kitsune2_test_utils", + "serde", + "serde_json", + "serde_yaml", + "sodoken", + "tempfile", + "tokio", +] + +[[package]] +name = "holochain_cli_sandbox" +version = "0.7.0-dev.15" +dependencies = [ + "ansi_term", + "anyhow", + "clap", + "futures", + "holochain_client", + "holochain_conductor_api", + "holochain_conductor_config", + "holochain_trace", + "holochain_types", + "holochain_util", + "holochain_websocket", "nix", "serde", "serde_json", @@ -2867,12 +3148,12 @@ dependencies = [ [[package]] name = "holochain_client" -version = "0.8.0" +version = "0.9.0-dev.15" dependencies = [ "anyhow", "async-trait", "bytes", - "ed25519-dalek", + "ed25519-dalek 2.2.0", "event-emitter-rs", "holo_hash", "holochain", @@ -2885,21 +3166,21 @@ dependencies = [ "kitsune2_api", "kitsune2_core", "kitsune2_test_utils", - "lair_keystore_api 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lair_keystore_api", "mr_bundle", "parking_lot", "rand 0.8.5", "serde", "serde_yaml", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] [[package]] name = "holochain_conductor_api" -version = "0.6.0" +version = "0.7.0-dev.14" dependencies = [ - "derive_more 2.0.1", + "derive_more 2.1.1", "holo_hash", "holochain_conductor_api", "holochain_keystore", @@ -2913,8 +3194,10 @@ dependencies = [ "kitsune2_api", "kitsune2_core", "kitsune2_gossip", + "kitsune2_transport_iroh", "kitsune2_transport_tx5", "matches", + "num_cpus", "pretty_assertions", "rmp-serde", "schemars 0.9.0", @@ -2922,14 +3205,14 @@ dependencies = [ "serde_json", "serde_yaml", "shrinkwraprs", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "url2", ] [[package]] name = "holochain_conductor_config" -version = "0.6.0" +version = "0.7.0-dev.14" dependencies = [ "ansi_term", "anyhow", @@ -2944,9 +3227,28 @@ dependencies = [ "url2", ] +[[package]] +name = "holochain_data" +version = "0.7.0-dev.4" +dependencies = [ + "base64", + "holo_hash", + "holochain_data", + "holochain_integrity_types", + "holochain_serialized_bytes", + "holochain_types", + "holochain_zome_types", + "libsqlite3-sys", + "serde_json", + "sodoken", + "sqlx", + "tempfile", + "tokio", +] + [[package]] name = "holochain_integrity_types" -version = "0.6.0" +version = "0.7.0-dev.6" dependencies = [ "derive_builder", "fixt", @@ -2969,11 +3271,11 @@ dependencies = [ [[package]] name = "holochain_keystore" -version = "0.6.0" +version = "0.7.0-dev.8" dependencies = [ "assert_cmd", - "base64 0.22.1", - "derive_more 2.0.1", + "base64", + "derive_more 2.1.1", "futures", "holo_hash", "holochain_secure_primitive", @@ -2991,7 +3293,7 @@ dependencies = [ "shrinkwraprs", "sodoken", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "url2", @@ -2999,26 +3301,30 @@ dependencies = [ [[package]] name = "holochain_metrics" -version = "0.6.0" +version = "0.7.0-dev.2" dependencies = [ - "influxive", - "opentelemetry_api", + "digest 0.10.7", + "dirs", + "flate2", + "futures", + "hex", + "hex-literal", + "influxdb", + "opentelemetry 0.31.0", + "opentelemetry_sdk 0.31.0", + "reqwest 0.12.28", + "sha2 0.10.9", + "tar", "tempfile", + "thiserror 2.0.18", "tokio", "tracing", -] - -[[package]] -name = "holochain_mock_hdi" -version = "0.0.1" -dependencies = [ - "hdi", - "mockall", + "zip 3.0.0", ] [[package]] name = "holochain_nonce" -version = "0.6.0" +version = "0.7.0-dev.1" dependencies = [ "getrandom 0.3.4", "holochain_secure_primitive", @@ -3027,16 +3333,15 @@ dependencies = [ [[package]] name = "holochain_p2p" -version = "0.6.0" +version = "0.7.0-dev.15" dependencies = [ "async-trait", - "base64 0.22.1", + "base64", "blake2b_simd", "bytes", "fixt", "futures", "holo_hash", - "holochain_chc", "holochain_keystore", "holochain_nonce", "holochain_p2p", @@ -3052,17 +3357,21 @@ dependencies = [ "kitsune2_bootstrap_srv", "kitsune2_core", "kitsune2_gossip", - "kitsune2_test_utils", - "lair_keystore_api 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "kitsune2_transport_iroh", + "kitsune2_transport_tx5", + "lair_keystore_api", "mockall", "opentelemetry_api", "parking_lot", "rand 0.9.2", "rmp-serde", + "rustls", "serde", "serde_json", + "strum 0.27.2", + "strum_macros 0.27.2", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "tracing-appender", @@ -3070,7 +3379,7 @@ dependencies = [ [[package]] name = "holochain_secure_primitive" -version = "0.6.0" +version = "0.7.0-dev.1" dependencies = [ "paste", "serde", @@ -3092,7 +3401,7 @@ dependencies = [ "serde-transcode", "serde_bytes", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -3102,18 +3411,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01865625f72d8b6a05487440dfce3c03b0fc83ae03bba7ed6bfbc2f6f8143d14" dependencies = [ "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "holochain_sqlite" -version = "0.6.0" +version = "0.7.0-dev.11" dependencies = [ "anyhow", "async-trait", - "base64 0.22.1", + "base64", "bytes", - "derive_more 2.0.1", + "derive_more 2.1.1", "fallible-iterator", "futures", "getrandom 0.3.4", @@ -3128,9 +3437,8 @@ dependencies = [ "kitsune2_api", "loom", "nanoid", - "num_cpus", "once_cell", - "opentelemetry_api", + "opentelemetry 0.31.0", "parking_lot", "pretty_assertions", "r2d2", @@ -3144,7 +3452,7 @@ dependencies = [ "sodoken", "sqlformat 0.3.5", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "walkdir", @@ -3152,18 +3460,17 @@ dependencies = [ [[package]] name = "holochain_state" -version = "0.6.0" +version = "0.7.0-dev.15" dependencies = [ "async-recursion", - "base64 0.22.1", + "base64", "chrono", - "contrafact", "cron", - "derive_more 2.0.1", + "derive_more 2.1.1", "fallible-iterator", "fixt", "holo_hash", - "holochain_chc", + "holochain_data", "holochain_keystore", "holochain_nonce", "holochain_serialized_bytes", @@ -3183,16 +3490,17 @@ dependencies = [ "serde", "serde_json", "shrinkwraprs", + "sqlx", "tempfile", "test-case", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", ] [[package]] name = "holochain_state_types" -version = "0.6.0" +version = "0.7.0-dev.6" dependencies = [ "holo_hash", "holochain_integrity_types", @@ -3201,7 +3509,7 @@ dependencies = [ [[package]] name = "holochain_test_wasm_common" -version = "0.6.0" +version = "0.7.0-dev.9" dependencies = [ "hdk", "holochain_serialized_bytes", @@ -3210,7 +3518,7 @@ dependencies = [ [[package]] name = "holochain_timestamp" -version = "0.6.0" +version = "0.7.0-dev.0" dependencies = [ "chrono", "holochain_serialized_bytes", @@ -3220,14 +3528,14 @@ dependencies = [ [[package]] name = "holochain_trace" -version = "0.6.0" +version = "0.7.0-dev.1" dependencies = [ "chrono", - "derive_more 2.0.1", + "derive_more 2.1.1", "inferno", "serde_json", "shrinkwraprs", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "tracing-core", @@ -3237,16 +3545,15 @@ dependencies = [ [[package]] name = "holochain_types" -version = "0.6.0" +version = "0.7.0-dev.14" dependencies = [ "anyhow", "async-trait", "backtrace", - "base64 0.22.1", + "base64", "bytes", - "contrafact", "derive_builder", - "derive_more 2.0.1", + "derive_more 2.1.1", "fixt", "futures", "holo_hash", @@ -3285,14 +3592,14 @@ dependencies = [ "strum_macros 0.27.2", "tempfile", "test-case", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", ] [[package]] name = "holochain_util" -version = "0.6.0" +version = "0.7.0-dev.1" dependencies = [ "backtrace", "cfg-if", @@ -3310,7 +3617,7 @@ dependencies = [ [[package]] name = "holochain_wasm_test_utils" -version = "0.6.0" +version = "0.7.0-dev.15" dependencies = [ "holochain_types", "strum 0.27.2", @@ -3328,7 +3635,7 @@ dependencies = [ "holochain_serialized_bytes", "serde", "serde_bytes", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -3357,7 +3664,7 @@ dependencies = [ "holochain_wasmer_common", "parking_lot", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "wasmer", "wasmer-middlewares", @@ -3365,7 +3672,7 @@ dependencies = [ [[package]] name = "holochain_websocket" -version = "0.6.0" +version = "0.7.0-dev.14" dependencies = [ "async-trait", "bytes", @@ -3376,7 +3683,7 @@ dependencies = [ "holochain_types", "serde", "serde_bytes", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-tungstenite 0.27.0", "tracing", @@ -3384,11 +3691,10 @@ dependencies = [ [[package]] name = "holochain_zome_types" -version = "0.6.0" +version = "0.7.0-dev.8" dependencies = [ - "contrafact", "derive_builder", - "derive_more 2.0.1", + "derive_more 2.1.1", "fixt", "holo_hash", "holochain_integrity_types", @@ -3411,55 +3717,41 @@ dependencies = [ "strum 0.27.2", "strum_macros 0.27.2", "subtle", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "uuid 1.18.1", ] [[package]] -name = "hostname" -version = "0.4.1" +name = "home" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "cfg-if", - "libc", - "windows-link 0.1.3", + "windows-sys 0.61.2", ] [[package]] -name = "http" -version = "0.2.12" +name = "hostname" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" dependencies = [ - "bytes", - "fnv", - "itoa", + "cfg-if", + "libc", + "windows-link 0.2.1", ] [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.1" @@ -3467,7 +3759,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http", ] [[package]] @@ -3478,8 +3770,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "pin-project-lite", ] @@ -3497,57 +3789,42 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "human-panic" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a07a0957cd4a3cad4a1e4ca7cd5ea07fcacef6ebe2e5d0c7935bfc95120d8" +checksum = "69c3a5eccb191563dc17c9e350fd7584292ab2910824a5750b117d9c466e1734" dependencies = [ "anstream", "anstyle", "backtrace", - "os_info", "serde", "serde_derive", + "sysinfo 0.34.2", "toml 0.9.5", "uuid 1.18.1", ] [[package]] -name = "hyper" -version = "0.14.32" +name = "hybrid-array" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +checksum = "e1b229d73f5803b562cc26e4da0396c8610a4ee209f4fac8fa4f8d709166dc45" dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", + "typenum", ] [[package]] name = "hyper" -version = "1.8.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "h2 0.4.12", - "http 1.3.1", - "http-body 1.0.1", + "h2", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -3560,64 +3837,68 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "rustls 0.21.12", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", + "tower-service", + "webpki-roots 1.0.6", ] [[package]] -name = "hyper-rustls" -version = "0.27.7" +name = "hyper-tls" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ - "http 1.3.1", - "hyper 1.8.1", + "bytes", + "http-body-util", + "hyper", "hyper-util", - "rustls 0.23.35", - "rustls-pki-types", + "native-tls", "tokio", - "tokio-rustls 0.26.4", + "tokio-native-tls", "tower-service", - "webpki-roots 1.0.4", ] [[package]] name = "hyper-util" -version = "0.1.18" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.8.1", + "http", + "http-body", + "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3625,7 +3906,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core 0.57.0", ] [[package]] @@ -3685,9 +3966,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -3699,9 +3980,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -3718,12 +3999,24 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "identity-hash" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfdd7caa900436d8f13b2346fe10257e0c05c1f1f9e351f4f5d57c03bd5f45da" + [[package]] name = "idna" version = "1.1.0" @@ -3745,13 +4038,34 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "igd-next" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" +dependencies = [ + "async-trait", + "attohttpc", + "bytes", + "futures", + "http", + "http-body-util", + "hyper", + "hyper-util", + "log", + "rand 0.9.2", + "tokio", + "url", + "xmltree", +] + [[package]] name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "autocfg 1.5.0", + "autocfg", "hashbrown 0.12.3", "serde", ] @@ -3800,143 +4114,351 @@ dependencies = [ [[package]] name = "influxdb" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601aa12a5876c044ea2a94a9443d0f086e6fc1f7bb4264bd7120e63c1462d1c8" +checksum = "dd89c62e90277619e21910689e0d4864287161f733125bac2d739238ad93e63f" dependencies = [ - "chrono", "futures-util", - "http 0.2.12", - "lazy_static", - "regex", - "reqwest 0.11.27", + "http", + "lazy-regex", + "reqwest 0.13.2", "serde", + "serde_derive", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] -name = "influxive" -version = "0.0.5" +name = "influxive-otel-atomic-obs" +version = "0.0.4-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d0b6985380cf881e6b3228a6f80cddcda367def4db1789905917625a217998" +checksum = "f4de21a259dc1a3e8c8b8621632d5c9149489a774f9a82639057e890d197dd0a" dependencies = [ - "influxive-child-svc", - "influxive-otel", - "influxive-writer", + "opentelemetry_api", ] [[package]] -name = "influxive-child-svc" -version = "0.0.5" +name = "inout" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cbd657d59c9e4ad6c37f80ac253bed584cbfe64a17802ef99724c24daa490b3" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "hex-literal", - "influxive-core", - "influxive-downloader", - "influxive-writer", - "tempfile", - "tokio", - "tracing", + "generic-array", +] + +[[package]] +name = "instability" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357b7205c6cd18dd2c86ed312d1e70add149aea98e7ef72b9fdf0270e555c11d" +dependencies = [ + "darling 0.23.0", + "indoc", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.10", + "widestring", + "windows-sys 0.48.0", + "winreg", ] [[package]] -name = "influxive-core" -version = "0.0.5" +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c055d67219b8b73dcb777fb46acb7b812ad83b9007af9b2713b21d663c21aeaa" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] [[package]] -name = "influxive-downloader" -version = "0.0.5" +name = "iroh" +version = "0.96.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db841bcd61baa5670e37b992bc3e1ad3de720f38ecc1ba68bc5e8cdaa7423817" +checksum = "5236da4d5681f317ec393c8fe2b7e3d360d31c6bb40383991d0b7429ca5ad117" dependencies = [ - "base64 0.22.1", - "digest", - "dirs", - "flate2", - "futures", - "hex", - "hex-literal", - "influxive-core", - "reqwest 0.12.24", - "sha2", - "tar", - "tempfile", + "backon", + "bytes", + "cfg_aliases", + "data-encoding", + "derive_more 2.1.1", + "ed25519-dalek 3.0.0-pre.1", + "futures-util", + "getrandom 0.3.4", + "hickory-resolver", + "http", + "igd-next", + "iroh-base", + "iroh-metrics", + "iroh-quinn", + "iroh-quinn-proto", + "iroh-quinn-udp", + "iroh-relay", + "n0-error", + "n0-future", + "n0-watcher", + "netdev", + "netwatch", + "papaya", + "pin-project", + "pkarr", + "pkcs8 0.11.0-rc.11", + "portmapper", + "rand 0.9.2", + "reqwest 0.12.28", + "rustc-hash 2.1.1", + "rustls", + "rustls-pki-types", + "rustls-webpki", + "serde", + "smallvec", + "strum 0.27.2", + "sync_wrapper", + "time", "tokio", - "zip 2.4.2", + "tokio-stream", + "tokio-util", + "tracing", + "url", + "wasm-bindgen-futures", + "webpki-roots 1.0.6", ] [[package]] -name = "influxive-otel" -version = "0.0.5" +name = "iroh-base" +version = "0.96.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93bddd13d48687fabfcb920638f7113c4b35acddcec7eeacd54b6201c9c724c8" +checksum = "20c99d836a1c99e037e98d1bf3ef209c3a4df97555a00ce9510eb78eccdf5567" dependencies = [ - "influxive-core", - "opentelemetry_api", + "curve25519-dalek 5.0.0-pre.1", + "data-encoding", + "derive_more 2.1.1", + "digest 0.11.0-rc.10", + "ed25519-dalek 3.0.0-pre.1", + "n0-error", + "rand_core 0.9.5", + "serde", + "sha2 0.11.0-rc.2", + "url", + "zeroize", + "zeroize_derive", +] + +[[package]] +name = "iroh-metrics" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5828152c482cf9d95f3039848ac2be5e6e47c41dbf3695a453e6c02739c50d2c" +dependencies = [ + "http-body-util", + "hyper", + "hyper-util", + "iroh-metrics-derive", + "itoa", + "n0-error", + "postcard", + "reqwest 0.12.28", + "ryu", + "serde", "tokio", + "tracing", ] [[package]] -name = "influxive-otel-atomic-obs" -version = "0.0.4-alpha.1" +name = "iroh-metrics-derive" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4de21a259dc1a3e8c8b8621632d5c9149489a774f9a82639057e890d197dd0a" +checksum = "cab063c2bfd6c3d5a33a913d4fdb5252f140db29ec67c704f20f3da7e8f92dbf" dependencies = [ - "opentelemetry_api", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "influxive-writer" -version = "0.0.5" +name = "iroh-quinn" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1120f1a6467ee14139cca30bc0222b3593331d58a2c1b066cc29b7aae2d2daed" +checksum = "034ed21f34c657a123d39525d948c885aacba59508805e4dd67d71f022e7151b" dependencies = [ - "influxdb", - "influxive-core", + "bytes", + "cfg_aliases", + "iroh-quinn-proto", + "iroh-quinn-udp", + "pin-project-lite", + "rustc-hash 2.1.1", + "rustls", + "socket2 0.6.2", + "thiserror 2.0.18", "tokio", + "tokio-stream", "tracing", + "web-time", ] [[package]] -name = "inout" -version = "0.1.4" +name = "iroh-quinn-proto" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "0de99ad8adc878ee0e68509ad256152ce23b8bbe45f5539d04e179630aca40a9" dependencies = [ - "generic-array", + "bytes", + "derive_more 2.1.1", + "enum-assoc", + "fastbloom", + "getrandom 0.3.4", + "identity-hash", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash 2.1.1", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "slab", + "sorted-index-buffer", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", ] [[package]] -name = "instability" -version = "0.3.9" +name = "iroh-quinn-udp" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" +checksum = "f981dadd5a072a9e0efcd24bdcc388e570073f7e51b33505ceb1ef4668c80c86" dependencies = [ - "darling 0.20.11", - "indoc", - "proc-macro2", - "quote", - "syn 2.0.110", + "cfg_aliases", + "libc", + "socket2 0.6.2", + "tracing", + "windows-sys 0.61.2", ] [[package]] -name = "ipnet" -version = "2.11.0" +name = "iroh-relay" +version = "0.96.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "cd2b63e654b9dec799a73372cdc79b529ca6c7248c0c8de7da78a02e3a46f03c" +dependencies = [ + "blake3", + "bytes", + "cfg_aliases", + "data-encoding", + "derive_more 2.1.1", + "getrandom 0.3.4", + "hickory-resolver", + "http", + "http-body-util", + "hyper", + "hyper-util", + "iroh-base", + "iroh-metrics", + "iroh-quinn", + "iroh-quinn-proto", + "lru 0.16.3", + "n0-error", + "n0-future", + "num_enum", + "pin-project", + "pkarr", + "postcard", + "rand 0.9.2", + "reqwest 0.12.28", + "rustls", + "rustls-pki-types", + "serde", + "serde_bytes", + "strum 0.27.2", + "tokio", + "tokio-rustls", + "tokio-util", + "tokio-websockets", + "tracing", + "url", + "vergen-gitcl", + "webpki-roots 1.0.6", + "ws_stream_wasm", + "z32", +] [[package]] -name = "iri-string" -version = "0.7.9" +name = "iroh-relay-holochain" +version = "0.96.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +checksum = "dd9dbc50da294d88846e620d5da5c1b477c16c1dc9648aa9422e0deb47f849c1" dependencies = [ - "memchr", + "ahash", + "blake3", + "bytes", + "cfg_aliases", + "clap", + "dashmap", + "data-encoding", + "derive_more 2.1.1", + "getrandom 0.3.4", + "hickory-resolver", + "http", + "http-body-util", + "hyper", + "hyper-util", + "iroh-base", + "iroh-metrics", + "iroh-quinn", + "iroh-quinn-proto", + "lru 0.16.3", + "n0-error", + "n0-future", + "num_enum", + "pin-project", + "pkarr", + "postcard", + "rand 0.9.2", + "rcgen 0.14.7", + "reloadable-state", + "reqwest 0.12.28", + "rustls", + "rustls-cert-file-reader", + "rustls-cert-reloadable-resolver", + "rustls-pki-types", "serde", + "serde_bytes", + "serde_json", + "sha1 0.11.0-rc.2", + "simdutf8", + "strum 0.27.2", + "time", + "tokio", + "tokio-rustls", + "tokio-rustls-acme", + "tokio-util", + "tokio-websockets", + "toml 0.9.5", + "tracing", + "tracing-subscriber", + "url", + "vergen-gitcl", + "webpki-roots 1.0.6", + "ws_stream_wasm", + "z32", ] [[package]] @@ -4002,9 +4524,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jni" @@ -4040,9 +4562,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "c7e709f3e3d22866f9c25b3aff01af289b18422cc8b4262fb19103ee80fe513d" dependencies = [ "once_cell", "wasm-bindgen", @@ -4055,7 +4577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1b46a0365a611fbf1d2143104dcf910aada96fafd295bab16c60b802bf6fa1d" dependencies = [ "ahash", - "base64 0.22.1", + "base64", "bytecount", "email_address", "fancy-regex", @@ -4069,7 +4591,7 @@ dependencies = [ "referencing", "regex", "regex-syntax", - "reqwest 0.12.24", + "reqwest 0.12.28", "serde", "serde_json", "uuid-simd", @@ -4077,68 +4599,74 @@ dependencies = [ [[package]] name = "kitsune2" -version = "0.3.2" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08507fdd9ffb11c3c1cbb4c329bcac4ea096a2a2abb5975321a191da5f58b649" +checksum = "b528af51448aed2da863356880abd22091b2db33041bbdc1596adbaa2d8f6027" dependencies = [ "bytes", "kitsune2_api", "kitsune2_core", "kitsune2_gossip", + "kitsune2_transport_iroh", "kitsune2_transport_tx5", "serde", ] [[package]] name = "kitsune2_api" -version = "0.3.2" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cba55879590ae1cf869665fc5e9422e6e03eb24e0c860538595c8fccf01da7" +checksum = "f520eb0c66a79ea8f1112ee2b062ae423e5cb9399b05eb26bb3bedcd81172664" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures", - "prost", + "prost 0.14.3", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "url", ] [[package]] name = "kitsune2_bootstrap_client" -version = "0.3.2" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45965c0af07b8448f08f54de0b56bc9029b93d155c99247a2cd0421de9f31b9" +checksum = "ec32dd2c280a7e9c3585dde2c40be62c9be396a7255fe3aaf536679267dc8c7f" dependencies = [ - "base64 0.22.1", + "base64", "kitsune2_api", "serde", "serde_json", "tracing", - "ureq 3.1.4", + "ureq 3.2.0", "url", ] [[package]] name = "kitsune2_bootstrap_srv" -version = "0.3.2" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834582f6cc920dcbb4b47855b8711476be27dbd8175f21a0aa3012af97bf73b" +checksum = "632723bf060aa977b682a343c8f4f190640af7866cee48515271322ef6082d44" dependencies = [ "async-channel", "axum", "axum-server", - "base64 0.22.1", + "base64", "bytes", "clap", "ctrlc", - "ed25519-dalek", + "ed25519-dalek 2.2.0", "futures", - "http 1.3.1", + "http", + "iroh", + "iroh-base", + "iroh-relay-holochain", "num_cpus", - "rustls 0.23.35", + "opentelemetry 0.30.0", + "rand 0.8.5", + "rustls", "sbd-server", "serde", "serde_json", @@ -4147,20 +4675,21 @@ dependencies = [ "tower-http", "tracing", "tracing-subscriber", + "ureq 3.2.0", ] [[package]] name = "kitsune2_core" -version = "0.3.2" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de548761a5cb92f4b0a357e532262780c5d1fd9cfb7b3d84ba8cd1981d09d3ab" +checksum = "99aaef93b5bcc2afc187c0c9dc76148df73cfce3e754ce3fd1e43891a2f56844" dependencies = [ "bytes", - "ed25519-dalek", + "ed25519-dalek 2.2.0", "futures", "kitsune2_api", "kitsune2_bootstrap_client", - "prost", + "prost 0.14.3", "rand 0.8.5", "schemars 0.9.0", "serde", @@ -4172,9 +4701,9 @@ dependencies = [ [[package]] name = "kitsune2_dht" -version = "0.3.2" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71eea2968e2fea1ef7da70d2e91ae8702f324ece3ba1a47b5406020e52fcee21" +checksum = "e23f47bec2401f302f779bca2dd09f8d0541f04fa6765f1496691db585f447d3" dependencies = [ "bytes", "kitsune2_api", @@ -4183,48 +4712,67 @@ dependencies = [ [[package]] name = "kitsune2_gossip" -version = "0.3.2" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30650d8f8fd24b237bc0f534fa555cd45f71885900600988f99c708df3b38324" +checksum = "6456b6951fabf32d8a7ceb78fde7d274b74c666abde3ac46c97f8c64f8947189" dependencies = [ "bytes", "futures", "kitsune2_api", "kitsune2_core", "kitsune2_dht", - "prost", + "prost 0.14.3", "rand 0.8.5", "schemars 0.9.0", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", ] [[package]] name = "kitsune2_test_utils" -version = "0.3.1" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557226137ac963d5daa1cbeb6a73cf8304bb135b381c734223493ec53001fb9c" +checksum = "af081ce641ea1e1bad868e3f46aca1169a78b6705ba5b95e772f6ab6606250fb" dependencies = [ "axum", "bytes", "futures", "kitsune2_api", "rand 0.8.5", + "serde_json", "tokio", "tracing", "tracing-subscriber", ] +[[package]] +name = "kitsune2_transport_iroh" +version = "0.4.0-dev.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2eddc8ee1602e5b94454a5026c7f25eaf32d842ec39c4109a7e27d0f3774299" +dependencies = [ + "bytes", + "iroh", + "kitsune2_api", + "kitsune2_bootstrap_client", + "n0-watcher", + "schemars 0.9.0", + "serde", + "tokio", + "tracing", + "url", +] + [[package]] name = "kitsune2_transport_tx5" -version = "0.3.2" +version = "0.4.0-dev.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e51b676d50fb0c4e125318580123c88b6adf76384fc8fd32995b54f8e0bfa33" +checksum = "636e3e218afa45c650b4331e8652529b12b5014db0fd2a5a271121730e7dcfc2" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "kitsune2_api", "schemars 0.9.0", @@ -4232,22 +4780,23 @@ dependencies = [ "tokio", "tracing", "tx5", - "tx5-core 0.8.1", + "tx5-core", "url", ] [[package]] name = "lair_keystore" version = "0.6.3" -source = "git+https://github.com/coasys/lair.git?branch=0.6.3-coasys#6a4c3486928104471069baa565bb55d66361ace6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbad37c00f223f07e078759ed6a857c47ad2c067f94b77880c36f46b593a98c7" dependencies = [ "clap", - "lair_keystore_api 0.6.3 (git+https://github.com/coasys/lair.git?branch=0.6.3-coasys)", + "lair_keystore_api", "pretty_assertions", "rpassword", "rusqlite", "sqlformat 0.4.0", - "sysinfo", + "sysinfo 0.37.2", "tracing-subscriber", ] @@ -4257,14 +4806,14 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b120af98d680f80d913b60b9324210be51c1f58748be92d53f32521f3b27e4b1" dependencies = [ - "base64 0.22.1", + "base64", "dunce", - "hc_seed_bundle 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lru 0.16.2", + "hc_seed_bundle", + "lru 0.16.3", "nanoid", "once_cell", "one_err", - "rcgen", + "rcgen 0.13.2", "serde", "serde_json", "serde_yaml", @@ -4272,32 +4821,31 @@ dependencies = [ "toml 0.9.5", "tracing", "url", - "winapi 0.3.9", + "winapi", "zeroize", ] [[package]] -name = "lair_keystore_api" -version = "0.6.3" -source = "git+https://github.com/coasys/lair.git?branch=0.6.3-coasys#6a4c3486928104471069baa565bb55d66361ace6" +name = "lazy-regex" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bae91019476d3ec7147de9aa291cadb6d870abf2f3015d2da73a90325ac1496" dependencies = [ - "base64 0.22.1", - "dunce", - "hc_seed_bundle 0.6.3 (git+https://github.com/coasys/lair.git?branch=0.6.3-coasys)", - "lru 0.16.2", - "nanoid", + "lazy-regex-proc_macros", "once_cell", - "one_err", - "rcgen", - "serde", - "serde_json", - "serde_yaml", - "tokio", - "toml 0.9.5", - "tracing", - "url", - "winapi 0.3.9", - "zeroize", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4de9c1e1439d8b7b3061b2d209809f447ca33241733d9a3c01eabf2dc8d94358" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.117", ] [[package]] @@ -4305,6 +4853,9 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] [[package]] name = "leb128" @@ -4320,9 +4871,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libflate" @@ -4344,7 +4895,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a599cb10a9cd92b1300debcef28da8f70b935ec937f44fcd1b70a7c986a11c5c" dependencies = [ "core2", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "rle-decode-fast", ] @@ -4358,22 +4909,28 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "libc", - "redox_syscall", + "redox_syscall 0.7.1", ] [[package]] name = "libsodium-sys-stable" -version = "1.22.4" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "371900aef5f23af8d4164c4b2eec129613df06888d87f34c3e9aec9f205022d2" +checksum = "2e5d23f4a051a13cf1085b2c5a050d4d890d80c754534cc4247eff525fa5283d" dependencies = [ "cc", "libc", @@ -4381,16 +4938,16 @@ dependencies = [ "minisign-verify", "pkg-config", "tar", - "ureq 3.1.4", + "ureq 3.2.0", "vcpkg", - "zip 5.1.1", + "zip 7.2.0", ] [[package]] name = "libsqlite3-sys" -version = "0.32.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb8270bb4060bd76c6e96f20c52d80620f1d82a3470885694e41e0f81ef6fe7" +checksum = "133c182a6a2c87864fe97778797e46c7e999672690dc9fa3ee8e241aa4a9c13f" dependencies = [ "cc", "openssl-sys", @@ -4404,24 +4961,6 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6639b70a7ce854b79c70d7e83f16b5dc0137cc914f3d7d03803b513ecc67ac" -[[package]] -name = "libz-rs-sys" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" -dependencies = [ - "zlib-rs", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82" -dependencies = [ - "cc", -] - [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -4430,9 +4969,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" @@ -4457,9 +4996,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "loom" @@ -4488,11 +5027,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" +checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" dependencies = [ - "hashbrown 0.16.0", + "hashbrown 0.16.1", ] [[package]] @@ -4522,6 +5061,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "mac-addr" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d25b0e0b648a86960ac23b7ad4abb9717601dec6f66c165f5b037f3f03065f" + [[package]] name = "mach2" version = "0.4.3" @@ -4537,17 +5082,11 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb4bdc8b0ce69932332cf76d24af69c3a155242af95c226b2ab6c2e371ed1149" dependencies = [ - "thiserror 2.0.17", + "thiserror 2.0.18", "zerocopy", "zerocopy-derive", ] -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - [[package]] name = "matchers" version = "0.2.0" @@ -4569,11 +5108,21 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" @@ -4590,7 +5139,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ - "autocfg 1.5.0", + "autocfg", ] [[package]] @@ -4623,13 +5172,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "log", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.61.2", ] @@ -4656,7 +5205,24 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", +] + +[[package]] +name = "moka" +version = "0.12.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac832c50ced444ef6be0767a008b02c106a909ba79d1d830501e94b96f6b7e" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "equivalent", + "parking_lot", + "portable-atomic", + "smallvec", + "tagptr", + "uuid 1.18.1", ] [[package]] @@ -4667,7 +5233,7 @@ checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" [[package]] name = "mr_bundle" -version = "0.6.0" +version = "0.7.0-dev.1" dependencies = [ "bytes", "dunce", @@ -4679,7 +5245,7 @@ dependencies = [ "serde", "serde_yaml", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] @@ -4700,7 +5266,7 @@ checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -4713,6 +5279,59 @@ dependencies = [ "pin-utils", ] +[[package]] +name = "n0-error" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4782b4baf92d686d161c15460c83d16ebcfd215918763903e9619842665cae" +dependencies = [ + "n0-error-macros", + "spez", +] + +[[package]] +name = "n0-error-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03755949235714b2b307e5ae89dd8c1c2531fb127d9b8b7b4adf9c876cd3ed18" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "n0-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2ab99dfb861450e68853d34ae665243a88b8c493d01ba957321a1e9b2312bbe" +dependencies = [ + "cfg_aliases", + "derive_more 2.1.1", + "futures-buffered", + "futures-lite", + "futures-util", + "js-sys", + "pin-project", + "send_wrapper", + "tokio", + "tokio-util", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-time", +] + +[[package]] +name = "n0-watcher" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38795f7932e6e9d1c6e989270ef5b3ff24ebb910e2c9d4bed2d28d8bae3007dc" +dependencies = [ + "derive_more 2.1.1", + "n0-error", + "n0-future", +] + [[package]] name = "nanoid" version = "0.4.0" @@ -4722,19 +5341,154 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "native-tls" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5d26952a508f321b4d3d2e80e78fc2603eaefcdf0c30783867f19586518bdc" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "ndk-context" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" +[[package]] +name = "netdev" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b0a0096d9613ee878dba89bbe595f079d373e3f1960d882e4f2f78ff9c30a0a" +dependencies = [ + "block2", + "dispatch2", + "dlopen2", + "ipnet", + "libc", + "mac-addr", + "netlink-packet-core", + "netlink-packet-route 0.29.0", + "netlink-sys", + "objc2-core-foundation", + "objc2-system-configuration", + "once_cell", + "plist", + "windows-sys 0.59.0", +] + +[[package]] +name = "netlink-packet-core" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" +dependencies = [ + "paste", +] + +[[package]] +name = "netlink-packet-route" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ce3636fa715e988114552619582b530481fd5ef176a1e5c1bf024077c2c9445" +dependencies = [ + "bitflags 2.9.4", + "libc", + "log", + "netlink-packet-core", +] + +[[package]] +name = "netlink-packet-route" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9854ea6ad14e3f4698a7f03b65bce0833dd2d81d594a0e4a984170537146b6" +dependencies = [ + "bitflags 2.9.4", + "libc", + "log", + "netlink-packet-core", +] + +[[package]] +name = "netlink-proto" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" +dependencies = [ + "bytes", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 2.0.18", +] + +[[package]] +name = "netlink-sys" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae" +dependencies = [ + "bytes", + "futures-util", + "libc", + "log", + "tokio", +] + +[[package]] +name = "netwatch" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "454b8c0759b2097581f25ed5180b4a1d14c324fde6d0734932a288e044d06232" +dependencies = [ + "atomic-waker", + "bytes", + "cfg_aliases", + "derive_more 2.1.1", + "iroh-quinn-udp", + "js-sys", + "libc", + "n0-error", + "n0-future", + "n0-watcher", + "netdev", + "netlink-packet-core", + "netlink-packet-route 0.28.0", + "netlink-proto", + "netlink-sys", + "objc2-core-foundation", + "objc2-system-configuration", + "pin-project-lite", + "serde", + "socket2 0.6.2", + "time", + "tokio", + "tokio-util", + "tracing", + "web-sys", + "windows 0.62.2", + "windows-result 0.4.1", + "wmi", +] + [[package]] name = "nix" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", @@ -4758,11 +5512,26 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "ntapi" -version = "0.4.1" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" +dependencies = [ + "winapi", +] + +[[package]] +name = "ntimestamp" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +checksum = "c50f94c405726d3e0095e89e72f75ce7f6587b94a8bd8dc8054b73f65c0fd68c" dependencies = [ - "winapi 0.3.9", + "base32", + "document-features", + "getrandom 0.2.17", + "httpdate", + "js-sys", + "once_cell", + "serde", ] [[package]] @@ -4771,7 +5540,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4798,6 +5567,22 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +dependencies = [ + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-cmp" version = "0.1.0" @@ -4844,7 +5629,7 @@ version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ - "autocfg 1.5.0", + "autocfg", "num-integer", "num-traits", ] @@ -4866,7 +5651,8 @@ version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "autocfg 1.5.0", + "autocfg", + "libm", ] [[package]] @@ -4898,37 +5684,25 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", -] - -[[package]] -name = "objc2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" -dependencies = [ - "objc2-encode", + "syn 2.0.117", ] [[package]] -name = "objc2-cloud-kit" -version = "0.3.2" +name = "num_threads" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ - "bitflags 2.10.0", - "objc2", - "objc2-foundation", + "libc", ] [[package]] -name = "objc2-core-data" -version = "0.3.2" +name = "objc2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" dependencies = [ - "objc2", - "objc2-foundation", + "objc2-encode", ] [[package]] @@ -4937,137 +5711,52 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", + "block2", "dispatch2", + "libc", "objc2", ] [[package]] -name = "objc2-core-graphics" -version = "0.3.2" +name = "objc2-encode" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" -dependencies = [ - "bitflags 2.10.0", - "dispatch2", - "objc2", - "objc2-core-foundation", - "objc2-io-surface", -] +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] -name = "objc2-core-image" +name = "objc2-io-kit" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" dependencies = [ - "objc2", - "objc2-foundation", + "libc", + "objc2-core-foundation", ] [[package]] -name = "objc2-core-location" +name = "objc2-security" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" dependencies = [ + "bitflags 2.9.4", "objc2", - "objc2-foundation", + "objc2-core-foundation", ] [[package]] -name = "objc2-core-text" +name = "objc2-system-configuration" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", + "dispatch2", + "libc", "objc2", "objc2-core-foundation", - "objc2-core-graphics", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" -dependencies = [ - "bitflags 2.10.0", - "block2", - "libc", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-io-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" -dependencies = [ - "libc", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-io-surface" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" -dependencies = [ - "bitflags 2.10.0", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" -dependencies = [ - "bitflags 2.10.0", - "objc2", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" -dependencies = [ - "bitflags 2.10.0", - "block2", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-image", - "objc2-core-location", - "objc2-core-text", - "objc2-foundation", - "objc2-quartz-core", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" -dependencies = [ - "objc2", - "objc2-foundation", + "objc2-security", ] [[package]] @@ -5093,11 +5782,24 @@ dependencies = [ "memchr", ] +[[package]] +name = "oid-registry" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" +dependencies = [ + "asn1-rs", +] + [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "critical-section", + "portable-atomic", +] [[package]] name = "once_cell_polyfill" @@ -5123,17 +5825,43 @@ version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" +[[package]] +name = "openssl" +version = "0.10.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-src" -version = "300.5.4+3.5.4" +version = "300.5.5+3.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507b3792995dae9b0df8a1c1e3771e8418b7c2d9f0baeba32e6fe8b06c7cb72" +checksum = "3f1787d533e03597a7934fd0a765f0d28e94ecc5fb7789f8053b1e699a56f709" dependencies = [ "cc", ] @@ -5151,6 +5879,80 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "opentelemetry" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf416e4cb72756655126f7dd7bb0af49c674f4c1b9903e80c009e0c37e552e6" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "pin-project-lite", + "thiserror 2.0.18", + "tracing", +] + +[[package]] +name = "opentelemetry" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84bcd6ae87133e903af7ef497404dda70c60d0ea14895fc8a5e6722754fc2a0" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "pin-project-lite", + "thiserror 2.0.18", + "tracing", +] + +[[package]] +name = "opentelemetry-http" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f6639e842a97dbea8886e3439710ae463120091e2e064518ba8e716e6ac36d" +dependencies = [ + "async-trait", + "bytes", + "http", + "opentelemetry 0.30.0", + "reqwest 0.12.28", +] + +[[package]] +name = "opentelemetry-otlp" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbee664a43e07615731afc539ca60c6d9f1a9425e25ca09c57bc36c87c55852b" +dependencies = [ + "http", + "opentelemetry 0.30.0", + "opentelemetry-http", + "opentelemetry-proto", + "opentelemetry_sdk 0.30.0", + "prost 0.13.5", + "reqwest 0.12.28", + "serde_json", + "thiserror 2.0.18", + "tracing", +] + +[[package]] +name = "opentelemetry-proto" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e046fd7660710fe5a05e8748e70d9058dc15c94ba914e7c4faa7c728f0e8ddc" +dependencies = [ + "base64", + "hex", + "opentelemetry 0.30.0", + "opentelemetry_sdk 0.30.0", + "prost 0.13.5", + "serde", + "tonic", +] + [[package]] name = "opentelemetry_api" version = "0.20.0" @@ -5168,27 +5970,42 @@ dependencies = [ ] [[package]] -name = "option-ext" -version = "0.2.0" +name = "opentelemetry_sdk" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "11f644aa9e5e31d11896e024305d7e3c98a88884d9f8919dbf37a9991bc47a4b" +dependencies = [ + "futures-channel", + "futures-executor", + "futures-util", + "opentelemetry 0.30.0", + "percent-encoding", + "rand 0.9.2", + "serde_json", + "thiserror 2.0.18", +] [[package]] -name = "os_info" -version = "3.13.0" +name = "opentelemetry_sdk" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c39b5918402d564846d5aba164c09a66cc88d232179dfd3e3c619a25a268392" +checksum = "e14ae4f5991976fd48df6d843de219ca6d31b01daaab2dad5af2badeded372bd" dependencies = [ - "android_system_properties", - "log", - "nix", - "objc2", - "objc2-foundation", - "objc2-ui-kit", - "serde", - "windows-sys 0.61.2", + "futures-channel", + "futures-executor", + "futures-util", + "opentelemetry 0.31.0", + "percent-encoding", + "rand 0.9.2", + "thiserror 2.0.18", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ouroboros" version = "0.18.5" @@ -5210,7 +6027,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -5219,6 +6036,16 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" +[[package]] +name = "papaya" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f92dd0b07c53a0a0c764db2ace8c541dc47320dad97c2200c2a637ab9dd2328f" +dependencies = [ + "equivalent", + "seize", +] + [[package]] name = "parking" version = "2.2.1" @@ -5243,7 +6070,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.18", "smallvec", "windows-link 0.2.1", ] @@ -5260,7 +6087,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest", + "digest 0.10.7", "hmac", ] @@ -5270,10 +6097,28 @@ version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" dependencies = [ - "base64 0.22.1", + "base64", "serde", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "pem-rfc7468" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -5281,14 +6126,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] -name = "petgraph" -version = "0.6.5" +name = "pharos" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" dependencies = [ - "fixedbitset", - "indexmap 2.11.1", - "quickcheck", + "futures", + "rustc_version", ] [[package]] @@ -5308,7 +6152,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -5323,14 +6167,66 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkarr" +version = "5.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d346b545765a0ef58b6a7e160e17ddaa7427f439b7b9a287df6c88c9e04bf2" +dependencies = [ + "async-compat", + "base32", + "bytes", + "cfg_aliases", + "document-features", + "dyn-clone", + "ed25519-dalek 3.0.0-pre.1", + "futures-buffered", + "futures-lite", + "getrandom 0.3.4", + "log", + "lru 0.16.3", + "ntimestamp", + "reqwest 0.12.28", + "self_cell", + "serde", + "sha1_smol", + "simple-dns", + "thiserror 2.0.18", + "tokio", + "tracing", + "url", + "wasm-bindgen-futures", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der 0.7.10", + "pkcs8 0.10.2", + "spki 0.7.3", +] + [[package]] name = "pkcs8" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der", - "spki", + "der 0.7.10", + "spki 0.7.3", +] + +[[package]] +name = "pkcs8" +version = "0.11.0-rc.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12922b6296c06eb741b02d7b5161e3aaa22864af38dfa025a1a3ba3f68c84577" +dependencies = [ + "der 0.8.0", + "spki 0.8.0-rc.4", ] [[package]] @@ -5339,6 +6235,19 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "plist" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" +dependencies = [ + "base64", + "indexmap 2.11.1", + "quick-xml", + "serde", + "time", +] + [[package]] name = "plotters" version = "0.3.7" @@ -5367,6 +6276,67 @@ dependencies = [ "plotters-backend", ] +[[package]] +name = "portable-atomic" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + +[[package]] +name = "portmapper" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d2a8825353ace3285138da3378b1e21860d60351942f7aa3b99b13b41f80318" +dependencies = [ + "base64", + "bytes", + "derive_more 2.1.1", + "futures-lite", + "futures-util", + "hyper-util", + "igd-next", + "iroh-metrics", + "libc", + "n0-error", + "netwatch", + "num_enum", + "rand 0.9.2", + "serde", + "smallvec", + "socket2 0.6.2", + "time", + "tokio", + "tokio-util", + "tower-layer", + "tracing", + "url", +] + +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless", + "postcard-derive", + "serde", +] + +[[package]] +name = "postcard-derive" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "potential_utf" version = "0.1.4" @@ -5393,9 +6363,9 @@ dependencies = [ [[package]] name = "predicates" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" dependencies = [ "anstyle", "difflib", @@ -5407,15 +6377,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] name = "predicates-tree" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" dependencies = [ "predicates-core", "termtree", @@ -5438,7 +6408,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -5493,14 +6463,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -5513,7 +6483,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", "version_check", "yansi", ] @@ -5526,11 +6496,11 @@ checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.10.0", + "bitflags 2.9.4", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", - "rand_xorshift 0.4.0", + "rand_xorshift", "regex-syntax", "rusty-fork", "tempfile", @@ -5545,30 +6515,53 @@ checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "prost" -version = "0.14.1" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive 0.13.5", +] + +[[package]] +name = "prost" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.14.3", ] [[package]] name = "prost-derive" -version = "0.14.1" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "prost-derive" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" dependencies = [ "anyhow", "itertools 0.10.5", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -5608,7 +6601,7 @@ checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -5626,16 +6619,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "quickcheck" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c35d9c36a562f37eca96e79f66d5fd56eefbc22560dacc4a864cabd2d277456" -dependencies = [ - "rand 0.6.5", - "rand_core 0.4.2", -] - [[package]] name = "quinn" version = "0.11.9" @@ -5648,9 +6631,9 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.35", - "socket2 0.5.10", - "thiserror 2.0.17", + "rustls", + "socket2 0.6.2", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -5662,16 +6645,17 @@ version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ + "aws-lc-rs", "bytes", "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring", "rustc-hash 2.1.1", - "rustls 0.23.35", + "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -5686,16 +6670,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -5719,9 +6703,9 @@ dependencies = [ [[package]] name = "r2d2_sqlite" -version = "0.27.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180da684f0a188977d3968f139eb44260192ef8d9a5b7b7cbd01d881e0353179" +checksum = "63417e83dc891797eea3ad379f52a5986da4bca0d6ef28baf4d14034dd111b0c" dependencies = [ "r2d2", "rusqlite", @@ -5737,38 +6721,6 @@ dependencies = [ "ptr_meta 0.3.1", ] -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.8", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift 0.1.1", - "winapi 0.3.9", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", -] - [[package]] name = "rand" version = "0.8.5" @@ -5787,7 +6739,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -5799,26 +6751,6 @@ dependencies = [ "rand 0.9.2", ] -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.3.1", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - [[package]] name = "rand_chacha" version = "0.3.1" @@ -5836,31 +6768,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", + "rand_core 0.9.5", ] [[package]] @@ -5869,96 +6777,25 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", ] -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi 0.3.9", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi 0.3.9", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "rand_xorshift" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -5967,7 +6804,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "cassowary", "compact_str", "crossterm 0.28.1", @@ -6017,12 +6854,17 @@ dependencies = [ ] [[package]] -name = "rdrand" -version = "0.4.0" +name = "rcgen" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +checksum = "10b99e0098aa4082912d4c649628623db6aba77335e4f4569ff5083a6448b32e" dependencies = [ - "rand_core 0.3.1", + "pem", + "ring", + "rustls-pki-types", + "time", + "x509-parser", + "yasna", ] [[package]] @@ -6031,7 +6873,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", +] + +[[package]] +name = "redox_syscall" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" +dependencies = [ + "bitflags 2.9.4", ] [[package]] @@ -6040,9 +6891,9 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6062,7 +6913,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -6094,9 +6945,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -6106,9 +6957,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -6117,9 +6968,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "region" @@ -6133,6 +6984,23 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "reloadable-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dc20ac1418988b60072d783c9f68e28a173fb63493c127952f6face3b40c6e0" + +[[package]] +name = "reloadable-state" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3853ef78d45b50f8b989896304a85239539d39b7f866a000e8846b9b72d74ce8" +dependencies = [ + "arc-swap", + "reloadable-core", + "tokio", +] + [[package]] name = "rend" version = "0.5.3" @@ -6144,87 +7012,96 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "base64 0.21.7", + "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", "js-sys", "log", "mime", - "once_cell", + "native-tls", "percent-encoding", "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "quinn", + "rustls", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", + "sync_wrapper", "tokio", - "tokio-rustls 0.24.1", + "tokio-native-tls", + "tokio-rustls", + "tokio-util", + "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", - "webpki-roots 0.25.4", - "winreg", + "webpki-roots 1.0.6", ] [[package]] name = "reqwest" -version = "0.12.24" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ - "base64 0.22.1", + "base64", "bytes", - "futures-channel", "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", + "h2", + "http", + "http-body", "http-body-util", - "hyper 1.8.1", - "hyper-rustls 0.27.7", + "hyper", + "hyper-rustls", "hyper-util", "js-sys", "log", "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.35", + "rustls", "rustls-pki-types", + "rustls-platform-verifier", "serde", - "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", - "tokio-rustls 0.26.4", - "tokio-util", + "tokio-rustls", "tower", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", - "webpki-roots 1.0.4", ] +[[package]] +name = "resolv-conf" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" + [[package]] name = "rgb" version = "0.8.52" @@ -6242,7 +7119,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -6250,13 +7127,13 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a640b26f007713818e9a9b65d34da1cf58538207b052916a83d80e43f3ffa4" +checksum = "1a30e631b7f4a03dee9056b8ef6982e8ba371dd5bedb74d3ec86df4499132c70" dependencies = [ "bytecheck 0.8.2", "bytes", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "indexmap 2.11.1", "munge", "ptr_meta 0.3.1", @@ -6269,13 +7146,13 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd83f5f173ff41e00337d97f6572e416d022ef8a19f371817259ae960324c482" +checksum = "8100bb34c0a1d0f907143db3149e6b4eea3c33b9ee8b189720168e818303986f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -6286,13 +7163,11 @@ checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" [[package]] name = "rmp" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +checksum = "4ba8be72d372b2c9b35542551678538b562e7cf86c3315773cae48dfbfe7790c" dependencies = [ - "byteorder", "num-traits", - "paste", ] [[package]] @@ -6329,6 +7204,26 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rsa" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" +dependencies = [ + "const-oid 0.9.6", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "signature 2.2.0", + "spki 0.7.3", + "subtle", + "zeroize", +] + [[package]] name = "rtoolbox" version = "0.0.3" @@ -6341,11 +7236,11 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.34.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e34486da88d8e051c7c0e23c3f15fd806ea8546260aa2fec247e97242ec143" +checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -6355,9 +7250,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" +checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc-hash" @@ -6380,13 +7275,22 @@ dependencies = [ "semver", ] +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + [[package]] name = "rustix" version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -6395,50 +7299,72 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.11.0", - "windows-sys 0.59.0", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-cert-file-reader" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb47c2a50fdfdaf95b0ac8b12620fc327da1fd4adbb30d0c56d866b005873ff" +dependencies = [ + "rustls-cert-read", + "rustls-pki-types", + "thiserror 2.0.18", + "tokio", ] [[package]] -name = "rustls" -version = "0.21.12" +name = "rustls-cert-read" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "dd46e8c5ae4de3345c4786a83f99ec7aff287209b9e26fa883c473aeb28f19d5" dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", + "rustls-pki-types", ] [[package]] -name = "rustls" -version = "0.23.35" +name = "rustls-cert-reloadable-resolver" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "fe1baa8a3a1f05eaa9fc55aed4342867f70e5c170ea3bfed1b38c51a4857c0c8" dependencies = [ - "aws-lc-rs", - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.103.8", - "subtle", - "zeroize", + "futures-util", + "reloadable-state", + "rustls", + "rustls-cert-read", + "thiserror 2.0.18", ] [[package]] name = "rustls-native-certs" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -6446,15 +7372,6 @@ dependencies = [ "security-framework", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" version = "2.2.0" @@ -6466,29 +7383,46 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", ] [[package]] -name = "rustls-webpki" -version = "0.101.7" +name = "rustls-platform-verifier" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ - "ring", - "untrusted", + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", ] +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" -version = "0.103.8" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "aws-lc-rs", "ring", @@ -6527,9 +7461,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -6540,63 +7474,27 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "sbd-client" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d00f41338c3f61eb424696882b76128052fa5dd3db5d015ead03c785e637aa6" -dependencies = [ - "base64 0.22.1", - "ed25519-dalek", - "futures", - "rand 0.8.5", - "rustls 0.23.35", - "rustls-native-certs", - "serde", - "serde_json", - "tokio", - "tokio-rustls 0.26.4", - "tokio-tungstenite 0.27.0", - "tracing", - "ureq 3.1.4", - "url", - "webpki-roots 1.0.4", -] - [[package]] name = "sbd-client" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53866d188d6267155d1730844ccfc952b73950f9d7c59e0154cfe5ff5276da62" dependencies = [ - "base64 0.22.1", - "ed25519-dalek", + "base64", + "ed25519-dalek 2.2.0", "futures", "rand 0.8.5", - "rustls 0.23.35", + "rustls", "rustls-native-certs", "serde", "serde_json", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-tungstenite 0.27.0", "tracing", - "ureq 3.1.4", + "ureq 3.2.0", "url", - "webpki-roots 1.0.4", -] - -[[package]] -name = "sbd-e2e-crypto-client" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07b8f8a29790cc6024637c67337247f586c5db0ee4f9b6db3d4b5896e2a6d64" -dependencies = [ - "bytes", - "sbd-client 0.3.3", - "sodoken", - "tokio", - "tracing", + "webpki-roots 1.0.6", ] [[package]] @@ -6606,7 +7504,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "593983043e1de5dff94b0be17c35b4f315ffa9126e527d8ac320a24abd45c116" dependencies = [ "bytes", - "sbd-client 0.4.0", + "sbd-client", "sodoken", "tokio", "tracing", @@ -6614,29 +7512,33 @@ dependencies = [ [[package]] name = "sbd-server" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d038b96c91dd571e9b83c69725e55d8440fff3112448b82e10ef58d172e6ce67" +checksum = "ecb7aead00bf2d25a1be2ea620e0b8ca01587ac8ddf7ad08f0b3f738c6e4939e" dependencies = [ "anstyle", "axum", "axum-server", - "base64 0.22.1", + "base64", "bytes", "clap", - "ed25519-dalek", + "ed25519-dalek 2.2.0", "futures", + "hyper", + "opentelemetry 0.30.0", + "opentelemetry-otlp", + "opentelemetry_sdk 0.30.0", "rand 0.8.5", - "rustls 0.23.35", - "rustls-pemfile 2.2.0", + "rustls", + "rustls-pemfile", "serde", "serde_json", "slab", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tracing", "tracing-subscriber", - "ureq 3.1.4", + "ureq 3.2.0", ] [[package]] @@ -6672,9 +7574,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", @@ -6691,7 +7593,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -6706,22 +7608,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scratch" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sd-notify" version = "0.4.5" @@ -6733,11 +7619,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.5.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -6746,19 +7632,29 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", ] +[[package]] +name = "seize" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b55fb86dfd3a2f5f76ea78310a88f96c4ea21a3031f8d212443d56123fd0521" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "self_cell" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" +checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" [[package]] name = "semver" @@ -6766,6 +7662,12 @@ version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" version = "1.0.219" @@ -6812,7 +7714,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -6823,7 +7725,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -6885,13 +7787,13 @@ version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ - "base64 0.22.1", + "base64", "chrono", "hex", "indexmap 1.9.3", "indexmap 2.11.1", "schemars 0.9.0", - "schemars 1.1.0", + "schemars 1.2.1", "serde", "serde_derive", "serde_json", @@ -6908,7 +7810,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -6932,9 +7834,26 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", +] + +[[package]] +name = "sha1" +version = "0.11.0-rc.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e046edf639aa2e7afb285589e5405de2ef7e61d4b0ac1e30256e3eab911af9" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.11.0-rc.10", ] +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + [[package]] name = "sha2" version = "0.10.9" @@ -6943,7 +7862,18 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0-rc.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1e3878ab0f98e35b2df35fe53201d088299b41a6bb63e3e34dada2ac4abd924" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.11.0-rc.10", ] [[package]] @@ -7007,10 +7937,11 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -7020,14 +7951,21 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ + "digest 0.10.7", "rand_core 0.6.4", ] +[[package]] +name = "signature" +version = "3.0.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f1880df446116126965eeec169136b2e0251dba37c6223bcc819569550edea3" + [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "simdutf8" @@ -7035,11 +7973,26 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +[[package]] +name = "simple-dns" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "siphasher" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" + [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slice-group-by" @@ -7052,6 +8005,9 @@ name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] [[package]] name = "socket2" @@ -7065,9 +8021,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", "windows-sys 0.60.2", @@ -7084,6 +8040,38 @@ dependencies = [ "zeroize", ] +[[package]] +name = "sorted-index-buffer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea06cc588e43c632923a55450401b8f25e628131571d4e1baea1bdfdb2b5ed06" + +[[package]] +name = "spez" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87e960f4dca2788eeb86bbdde8dd246be8948790b7618d656e68f9b720a86e8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spin" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" + [[package]] name = "spki" version = "0.7.3" @@ -7091,27 +8079,224 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der", + "der 0.7.10", +] + +[[package]] +name = "spki" +version = "0.8.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8baeff88f34ed0691978ec34440140e1572b68c7dd4a495fd14a3dc1944daa80" +dependencies = [ + "base64ct", + "der 0.8.0", +] + +[[package]] +name = "sqlformat" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d7b3e8a3b6f2ee93ac391a0f757c13790caa0147892e3545cd549dd5b54bc0" +dependencies = [ + "unicode_categories", + "winnow 0.6.26", +] + +[[package]] +name = "sqlformat" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9f8dee7d9a112df6e28e14f9acd8f47487131d2a9cf9117037d2fad5936a796" +dependencies = [ + "unicode_categories", + "winnow 0.7.14", +] + +[[package]] +name = "sqlx" +version = "0.9.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "decccfa5f2f3eac95eb68085cfe69a0172fa9711666c3a634cfc806d4fb74a47" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.9.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86854e8c6aba0dafcf1c04b4836b0b7fa3a20c560e3554567afefe1258fa4e60" +dependencies = [ + "base64", + "bytes", + "cfg-if", + "crc", + "crossbeam-queue", + "either", + "event-listener", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.16.1", + "hashlink", + "indexmap 2.11.1", + "log", + "memchr", + "percent-encoding", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "thiserror 2.0.18", + "tokio", + "tokio-stream", + "tracing", + "url", +] + +[[package]] +name = "sqlx-macros" +version = "0.9.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7aab9442ed1568e3aed6c368737226ee4e0e8d1deb0e0887fa6bf15282ace44" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.117", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.9.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34eb4976b8f02ac57ee98d4ce40cd1aad7ab31d9792977bc3171f787ba6ba2fb" +dependencies = [ + "cfg-if", + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.117", + "thiserror 2.0.18", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.9.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fef16f3d52a3710a672b48175b713e86476e2df85576a753c8b37ad11a483c0" +dependencies = [ + "atoi", + "base64", + "bitflags 2.9.4", + "byteorder", + "bytes", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1 0.10.6", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.18", + "tracing", + "whoami", ] [[package]] -name = "sqlformat" -version = "0.3.5" +name = "sqlx-postgres" +version = "0.9.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d7b3e8a3b6f2ee93ac391a0f757c13790caa0147892e3545cd549dd5b54bc0" +checksum = "f053cf36ecb2793a9d9bb02d01bbad1ef66481d5db6ff5ab2dfb7b070cc0d13c" dependencies = [ - "unicode_categories", - "winnow 0.6.26", + "atoi", + "base64", + "bitflags 2.9.4", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.18", + "tracing", + "whoami", ] [[package]] -name = "sqlformat" -version = "0.4.0" +name = "sqlx-sqlite" +version = "0.9.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f8dee7d9a112df6e28e14f9acd8f47487131d2a9cf9117037d2fad5936a796" +checksum = "fe2cd6cee87120b1e1dd31356b5589911995c777707e49f2750eec7c7fe43eef" dependencies = [ - "unicode_categories", - "winnow 0.7.13", + "atoi", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "thiserror 2.0.18", + "tracing", + "url", ] [[package]] @@ -7133,16 +8318,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" [[package]] -name = "strsim" -version = "0.11.1" +name = "stringprep" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] [[package]] -name = "strum" -version = "0.24.1" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" @@ -7158,18 +8348,8 @@ name = "strum" version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", + "strum_macros 0.27.2", ] [[package]] @@ -7182,7 +8362,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -7194,7 +8374,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -7225,21 +8405,15 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.110" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.2" @@ -7257,7 +8431,20 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", +] + +[[package]] +name = "sysinfo" +version = "0.34.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b93974b3d3aeaa036504b8eefd4c039dced109171c1ae973f1dc63b2c7e4b2" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "windows 0.57.0", ] [[package]] @@ -7271,30 +8458,36 @@ dependencies = [ "ntapi", "objc2-core-foundation", "objc2-io-kit", - "windows", + "windows 0.61.3", ] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.4", "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", ] +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + [[package]] name = "tar" version = "0.4.44" @@ -7332,15 +8525,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.1", "once_cell", - "rustix 1.1.2", - "windows-sys 0.59.0", + "rustix 1.1.4", + "windows-sys 0.61.2", ] [[package]] @@ -7358,7 +8551,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.4", "windows-sys 0.60.2", ] @@ -7386,7 +8579,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -7397,7 +8590,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", "test-case-core", ] @@ -7412,11 +8605,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -7427,18 +8620,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -7458,7 +8651,10 @@ checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", + "js-sys", + "libc", "num-conv", + "num_threads", "powerfmt", "serde", "time-core", @@ -7518,9 +8714,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -7528,7 +8724,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.1", + "socket2 0.6.2", "tokio-macros", "windows-sys 0.61.2", ] @@ -7541,16 +8737,16 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] -name = "tokio-rustls" -version = "0.24.1" +name = "tokio-native-tls" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ - "rustls 0.21.12", + "native-tls", "tokio", ] @@ -7560,15 +8756,43 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.35", + "rustls", + "tokio", +] + +[[package]] +name = "tokio-rustls-acme" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31fcc374ec87d754358a5d0709ed1ab7671d51e0f70ddc3b17a11ac36604cfa" +dependencies = [ + "async-trait", + "base64", + "chrono", + "futures", + "log", + "num-bigint", + "pem", + "proc-macro2", + "rcgen 0.14.7", + "reqwest 0.12.28", + "ring", + "rustls", + "serde", + "serde_json", + "thiserror 2.0.18", + "time", "tokio", + "tokio-rustls", + "webpki-roots 1.0.6", + "x509-parser", ] [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -7596,26 +8820,49 @@ checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" dependencies = [ "futures-util", "log", - "rustls 0.23.35", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tungstenite 0.27.0", ] [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", "futures-sink", + "futures-util", "pin-project-lite", "tokio", ] +[[package]] +name = "tokio-websockets" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1b6348ebfaaecd771cecb69e832961d277f59845d4220a584701f72728152b7" +dependencies = [ + "base64", + "bytes", + "futures-core", + "futures-sink", + "getrandom 0.3.4", + "http", + "httparse", + "rand 0.9.2", + "ring", + "rustls-pki-types", + "simdutf8", + "tokio", + "tokio-rustls", + "tokio-util", +] + [[package]] name = "toml" version = "0.8.23" @@ -7640,7 +8887,7 @@ dependencies = [ "toml_datetime 0.7.0", "toml_parser", "toml_writer", - "winnow 0.7.13", + "winnow 0.7.14", ] [[package]] @@ -7672,7 +8919,7 @@ dependencies = [ "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", - "winnow 0.7.13", + "winnow 0.7.14", ] [[package]] @@ -7684,16 +8931,16 @@ dependencies = [ "indexmap 2.11.1", "toml_datetime 0.7.0", "toml_parser", - "winnow 0.7.13", + "winnow 0.7.14", ] [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ - "winnow 0.7.13", + "winnow 0.7.14", ] [[package]] @@ -7704,20 +8951,41 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" + +[[package]] +name = "tonic" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" +checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" +dependencies = [ + "async-trait", + "base64", + "bytes", + "http", + "http-body", + "http-body-util", + "percent-encoding", + "pin-project", + "prost 0.13.5", + "tokio-stream", + "tower-layer", + "tower-service", + "tracing", +] [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -7725,15 +8993,15 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", "bytes", "futures-util", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "iri-string", "pin-project-lite", "tower", @@ -7755,10 +9023,11 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -7766,32 +9035,32 @@ dependencies = [ [[package]] name = "tracing-appender" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf" dependencies = [ "crossbeam-channel", - "thiserror 1.0.69", + "thiserror 2.0.18", "time", "tracing-subscriber", ] [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -7830,9 +9099,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", @@ -7858,9 +9127,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.114" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17e807bff86d2a06b52bca4276746584a78375055b6e45843925ce2802b335" +checksum = "5f614c21bd3a61bad9501d75cbb7686f00386c806d7f456778432c25cf86948a" dependencies = [ "glob", "serde", @@ -7879,12 +9148,12 @@ checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ "bytes", "data-encoding", - "http 1.3.1", + "http", "httparse", "log", "rand 0.9.2", - "sha1", - "thiserror 2.0.17", + "sha1 0.10.6", + "thiserror 2.0.18", "utf-8", ] @@ -7896,14 +9165,14 @@ checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", - "http 1.3.1", + "http", "httparse", "log", "rand 0.9.2", - "rustls 0.23.35", + "rustls", "rustls-pki-types", - "sha1", - "thiserror 2.0.17", + "sha1 0.10.6", + "thiserror 2.0.18", "utf-8", ] @@ -7923,7 +9192,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfd11c21bcb1160c38d97b0dd972dcdda12292436d023852f2dc756f994cb9ee" dependencies = [ - "base64 0.22.1", + "base64", "futures", "influxive-otel-atomic-obs", "serde", @@ -7931,7 +9200,7 @@ dependencies = [ "tokio", "tracing", "tx5-connection", - "tx5-core 0.8.1", + "tx5-core", "url", ] @@ -7949,24 +9218,9 @@ dependencies = [ "serde_json", "tokio", "tracing", - "tx5-core 0.8.1", + "tx5-core", "tx5-go-pion", - "tx5-signal 0.8.1", -] - -[[package]] -name = "tx5-core" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327b3ef047f6f9d6441193ff9f96f76199e0234fd96a2d6a5f16d43a62420a46" -dependencies = [ - "base64 0.22.1", - "once_cell", - "rand 0.9.2", - "serde", - "serde_json", - "tokio", - "tracing", + "tx5-signal", ] [[package]] @@ -7976,12 +9230,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17059ca45a5d2a2f588b9dd638840744256cf1073392c47124b4859740865009" dependencies = [ "app_dirs2", - "base64 0.22.1", + "base64", "once_cell", "rand 0.9.2", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "tempfile", "tokio", "tracing", @@ -8006,42 +9260,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f398e3aa9d32409363a74ec924c5f93511e65caa8bd3386fd4b188d27f5737f9" dependencies = [ "Inflector", - "base64 0.22.1", + "base64", "libc", "libloading", "once_cell", "ouroboros", - "sha2", + "sha2 0.10.9", "tracing", - "tx5-core 0.8.1", + "tx5-core", "zip 4.6.1", ] [[package]] name = "tx5-signal" -version = "0.7.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa5bc6b200916868cc9b2c3f44bf9e1bdc2751e47b829ca991e37e07a499a74a" +checksum = "be4b5332d5d26f095dbfdab8fe18866d343ca877a1eb095153107dbf56719744" dependencies = [ "rand 0.9.2", - "sbd-e2e-crypto-client 0.3.3", + "sbd-e2e-crypto-client", "tokio", "tracing", - "tx5-core 0.7.2", + "tx5-core", ] [[package]] -name = "tx5-signal" -version = "0.8.1" +name = "typed-path" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4b5332d5d26f095dbfdab8fe18866d343ca877a1eb095153107dbf56719744" -dependencies = [ - "rand 0.9.2", - "sbd-e2e-crypto-client 0.4.0", - "tokio", - "tracing", - "tx5-core 0.8.1", -] +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[package]] name = "typenum" @@ -8055,11 +9302,32 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-normalization" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-segmentation" @@ -8126,11 +9394,11 @@ version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" dependencies = [ - "base64 0.22.1", + "base64", "flate2", "log", "once_cell", - "rustls 0.23.35", + "rustls", "rustls-pki-types", "url", "webpki-roots 0.26.11", @@ -8138,46 +9406,47 @@ dependencies = [ [[package]] name = "ureq" -version = "3.1.4" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39cb1dbab692d82a977c0392ffac19e188bd9186a9f32806f0aaa859d75585a" +checksum = "fdc97a28575b85cfedf2a7e7d3cc64b3e11bd8ac766666318003abbacc7a21fc" dependencies = [ - "base64 0.22.1", + "base64", "cookie_store", "flate2", "log", "percent-encoding", - "rustls 0.23.35", + "rustls", "rustls-pki-types", "serde", "serde_json", "ureq-proto", "utf-8", - "webpki-roots 1.0.4", + "webpki-roots 1.0.6", ] [[package]] name = "ureq-proto" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b4531c118335662134346048ddb0e54cc86bd7e81866757873055f0e38f5d2" +checksum = "d81f9efa9df032be5934a46a068815a10a042b494b6a58cb0a1a97bb5467ed6f" dependencies = [ - "base64 0.22.1", - "http 1.3.1", + "base64", + "http", "httparse", "log", ] [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -8220,7 +9489,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] @@ -8239,11 +9508,11 @@ dependencies = [ [[package]] name = "uuid-rng-internal" -version = "1.18.1" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23426b4394875bbc29a3074f94e1b52cd0eed2c8410c21a6edbfb033daef0aa1" +checksum = "2ef224d01f8c31f8c11c90290766fd622fb0a7d7025b9589d4a34a36ccf35b28" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.1", ] [[package]] @@ -8269,6 +9538,54 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vergen" +version = "9.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", + "vergen-lib 9.1.0", +] + +[[package]] +name = "vergen-gitcl" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9dfc1de6eb2e08a4ddf152f1b179529638bedc0ea95e6d667c014506377aefe" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", + "time", + "vergen", + "vergen-lib 0.1.6", +] + +[[package]] +name = "vergen-lib" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", +] + +[[package]] +name = "vergen-lib" +version = "9.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", +] + [[package]] name = "version_check" version = "0.9.5" @@ -8309,12 +9626,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -8323,18 +9634,33 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "ec1adf1535672f5b7824f817792b1afd731d7e843d2d04ec8f27e8cb51edd8ac" dependencies = [ "cfg-if", "once_cell", @@ -8345,11 +9671,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "fe88540d1c934c4ec8e6db0afa536876c5441289d7f9f9123d4f065ac1250a6b" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -8358,9 +9685,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "19e638317c08b21663aed4d2b9a2091450548954695ff4efa75bff5fa546b3b1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8368,74 +9695,46 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "2c64760850114d03d5f65457e96fc988f11f01d38fbaa51b254e4ab5809102af" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "60eecd4fe26177cfa3339eb00b4a36445889ba3ad37080c2429879718e20ca41" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-encoder" -version = "0.241.2" +version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01164c9dda68301e34fdae536c23ed6fe90ce6d97213ccc171eebbd3d02d6b8" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" dependencies = [ "leb128fmt", - "wasmparser 0.241.2", -] - -[[package]] -name = "wasm-opt" -version = "0.116.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd87a4c135535ffed86123b6fb0f0a5a0bc89e50416c942c5f0662c645f679c" -dependencies = [ - "anyhow", - "libc", - "strum 0.24.1", - "strum_macros 0.24.3", - "tempfile", - "thiserror 1.0.69", - "wasm-opt-cxx-sys", - "wasm-opt-sys", -] - -[[package]] -name = "wasm-opt-cxx-sys" -version = "0.116.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c57b28207aa724318fcec6575fe74803c23f6f266fce10cbc9f3f116762f12e" -dependencies = [ - "anyhow", - "cxx", - "cxx-build", - "wasm-opt-sys", + "wasmparser 0.244.0", ] [[package]] -name = "wasm-opt-sys" -version = "0.116.0" +name = "wasm-metadata" +version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a1cce564dc768dacbdb718fc29df2dba80bd21cb47d8f77ae7e3d95ceb98cbe" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", - "cc", - "cxx", - "cxx-build", + "indexmap 2.11.1", + "wasm-encoder", + "wasmparser 0.244.0", ] [[package]] @@ -8461,7 +9760,7 @@ dependencies = [ "bytes", "cfg-if", "cmake", - "derive_more 2.0.1", + "derive_more 2.1.1", "indexmap 2.11.1", "js-sys", "more-asserts", @@ -8571,12 +9870,12 @@ dependencies = [ "bytecheck 0.6.12", "enum-iterator", "enumset", - "getrandom 0.2.16", + "getrandom 0.2.17", "hex", "indexmap 2.11.1", "more-asserts", "rkyv", - "sha2", + "sha2 0.10.9", "target-lexicon", "thiserror 1.0.69", "xxhash-rust", @@ -8616,25 +9915,26 @@ version = "0.224.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f17a5917c2ddd3819e84c661fae0d6ba29d7b9c1f0e96c708c65a9c4188e11" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", ] [[package]] name = "wasmparser" -version = "0.241.2" +version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d90019b1afd4b808c263e428de644f3003691f243387d30d673211ee0cb8e8" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.4", + "hashbrown 0.15.5", "indexmap 2.11.1", "semver", ] [[package]] name = "wast" -version = "241.0.2" +version = "244.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63f66e07e2ddf531fef6344dbf94d112df7c2f23ed6ffb10962e711500b8d816" +checksum = "b2e7b9f9e23311275920e3d6b56d64137c160cf8af4f84a7283b36cfecbf4acb" dependencies = [ "bumpalo", "leb128fmt", @@ -8645,18 +9945,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.241.2" +version = "1.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f923705c40830af909c5dec2352ec2821202e4a66008194585e1917458a26d" +checksum = "bbf35b87ed352f9ab6cd0732abde5a67dd6153dfd02c493e61459218b19456fa" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.82" +version = "0.3.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a" dependencies = [ "js-sys", "wasm-bindgen", @@ -8673,10 +9973,13 @@ dependencies = [ ] [[package]] -name = "webpki-roots" -version = "0.25.4" +name = "webpki-root-certs" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "webpki-roots" @@ -8684,14 +9987,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.4", + "webpki-roots 1.0.6", ] [[package]] name = "webpki-roots" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" dependencies = [ "rustls-pki-types", ] @@ -8714,15 +10017,25 @@ checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" dependencies = [ "either", "env_home", - "rustix 1.1.2", + "rustix 1.1.4", "winsafe", ] [[package]] -name = "winapi" -version = "0.2.8" +name = "whoami" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" +dependencies = [ + "libredox", + "wasite", +] + +[[package]] +name = "widestring" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -8746,7 +10059,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -8755,17 +10068,39 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-collections", + "windows-collections 0.2.0", "windows-core 0.61.2", - "windows-future", + "windows-future 0.2.1", "windows-link 0.1.3", - "windows-numerics", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", ] [[package]] @@ -8777,14 +10112,35 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core 0.62.2", +] + +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -8796,8 +10152,8 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.2.1", "windows-result 0.4.1", "windows-strings 0.5.1", @@ -8811,7 +10167,29 @@ checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", "windows-link 0.1.3", - "windows-threading", + "windows-threading 0.1.0", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", +] + +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -8822,7 +10200,18 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -8833,7 +10222,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -8858,6 +10247,36 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-registry" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bab093bdd303a1240bb99b8aba8ea8a69ee19d34c9e2ef9594e708a4878820" +dependencies = [ + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -9020,6 +10439,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -9211,9 +10639,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -9236,9 +10664,106 @@ checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.11.1", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.9.4", + "indexmap 2.11.1", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser 0.244.0", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.11.1", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.244.0", +] + +[[package]] +name = "wmi" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "003e65f4934cf9449b9ce913ad822cd054a5af669d24f93db101fdb02856bb23" +dependencies = [ + "chrono", + "futures", + "log", + "serde", + "thiserror 2.0.18", + "windows 0.61.3", + "windows-core 0.61.2", +] [[package]] name = "writeable" @@ -9246,6 +10771,43 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +[[package]] +name = "ws_stream_wasm" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c173014acad22e83f16403ee360115b38846fe754e735c5d9d3803fe70c6abc" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version", + "send_wrapper", + "thiserror 2.0.18", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "x509-parser" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202" +dependencies = [ + "asn1-rs", + "data-encoding", + "der-parser", + "lazy_static", + "nom", + "oid-registry", + "ring", + "rusticata-macros", + "thiserror 2.0.18", + "time", +] + [[package]] name = "xattr" version = "1.6.1" @@ -9253,7 +10815,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.2", + "rustix 1.1.4", ] [[package]] @@ -9262,6 +10824,21 @@ version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" +[[package]] +name = "xml-rs" +version = "0.8.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + [[package]] name = "xxhash-rust" version = "0.8.15" @@ -9311,28 +10888,34 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", "synstructure", ] +[[package]] +name = "z32" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2164e798d9e3d84ee2c91139ace54638059a3b23e361f5c11781c2c6459bde0f" + [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -9352,7 +10935,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", "synstructure", ] @@ -9367,13 +10950,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -9406,7 +10989,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -9418,7 +11001,7 @@ dependencies = [ "aes", "arbitrary", "bzip2", - "constant_time_eq", + "constant_time_eq 0.3.1", "crc32fast", "crossbeam-utils", "deflate64", @@ -9430,8 +11013,35 @@ dependencies = [ "lzma-rs", "memchr", "pbkdf2", - "sha1", - "thiserror 2.0.17", + "sha1 0.10.6", + "thiserror 2.0.18", + "time", + "xz2", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zip" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12598812502ed0105f607f941c386f43d441e00148fce9dec3ca5ffb0bde9308" +dependencies = [ + "aes", + "arbitrary", + "bzip2", + "constant_time_eq 0.3.1", + "crc32fast", + "deflate64", + "flate2", + "getrandom 0.3.4", + "hmac", + "indexmap 2.11.1", + "lzma-rs", + "memchr", + "pbkdf2", + "sha1 0.10.6", "time", "xz2", "zeroize", @@ -9455,23 +11065,23 @@ dependencies = [ [[package]] name = "zip" -version = "5.1.1" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f852905151ac8d4d06fdca66520a661c09730a74c6d4e2b0f27b436b382e532" +checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0" dependencies = [ - "arbitrary", "crc32fast", "flate2", "indexmap 2.11.1", "memchr", + "typed-path", "zopfli", ] [[package]] name = "zlib-rs" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" +checksum = "c745c48e1007337ed136dc99df34128b9faa6ed542d80a1c673cf55a6d7236c8" [[package]] name = "zopfli" diff --git a/Cargo.toml b/Cargo.toml index 652bc53c9c..db092fbc56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,42 +2,38 @@ members = [ "crates/fixt", "crates/fixt/test", + "crates/hdi", "crates/hdk", "crates/hdk_derive", "crates/holo_hash", - "crates/hdi", - "crates/mock_hdi", - "crates/mr_bundle", - - "crates/holochain_integrity_types", - "crates/holochain_zome_types", - "crates/holochain_types", "crates/holochain", "crates/holochain_cascade", - "crates/holochain_chc", "crates/holochain_conductor_api", - "crates/holochain_p2p", + "crates/holochain_conductor_config", + "crates/holochain_data", + "crates/holochain_integrity_types", "crates/holochain_keystore", + "crates/holochain_metrics", + "crates/holochain_nonce", + "crates/holochain_p2p", + "crates/holochain_secure_primitive", + "crates/holochain_sqlite", "crates/holochain_state", "crates/holochain_state_types", - "crates/holochain_sqlite", "crates/holochain_trace", - "crates/holochain_websocket", + "crates/holochain_types", "crates/holochain_util", - "crates/holochain_metrics", - "crates/holochain_nonce", - "crates/holochain_secure_primitive", - "crates/holochain_conductor_config", + "crates/holochain_websocket", + "crates/holochain_zome_types", + "crates/mr_bundle", "crates/timestamp", - "crates/client", + "crates/hc_client", "crates/hc", "crates/hc_bundle", "crates/hc_sandbox", - "crates/hc_demo_cli", "crates/hc_service_check", "crates/holochain_terminal", - "crates/test_utils/wasm", "crates/test_utils/wasm_common", ] @@ -94,6 +90,8 @@ lto = true # kitsune2_gossip = { path = "../kitsune2/crates/gossip" } # kitsune2_bootstrap_srv = { path = "../kitsune2/crates/bootstrap_srv" } # kitsune2_bootstrap_client = { path = "../kitsune2/crates/bootstrap_client" } +# kitsune2_test_utils = { path = "../kitsune2/crates/test_utils" } +# kitsune2_transport_tx5 = { path = "../kitsune2/crates/transport_tx5" } # sbd-server = { path = "../sbd/rust/sbd-server" } # sbd-client = { path = "../sbd/rust/sbd-client" } # sbd-e2e-crypto-client = { path = "../sbd/rust/sbd-e2e-crypto-client" } diff --git a/crates/holochain_p2p/src/spawn/actor.rs b/crates/holochain_p2p/src/spawn/actor.rs index 7dc4a57040..11fa322ceb 100644 --- a/crates/holochain_p2p/src/spawn/actor.rs +++ b/crates/holochain_p2p/src/spawn/actor.rs @@ -1,7 +1,9 @@ #![allow(clippy::too_many_arguments)] +use crate::actor::{GetLinksRequestOptions, NetworkRequestOptions}; use crate::metrics::{ - create_p2p_handle_incoming_request_duration_metric, create_p2p_outgoing_request_duration_metric, + create_p2p_handle_incoming_request_duration_metric, + create_p2p_handle_incoming_request_ignored_metric, create_p2p_outgoing_request_duration_metric, }; use crate::*; use holochain_sqlite::error::{DatabaseError, DatabaseResult}; @@ -9,6 +11,7 @@ use holochain_sqlite::helpers::BytesSql; use holochain_sqlite::rusqlite::types::Value; use holochain_sqlite::sql::sql_peer_meta_store; use holochain_state::prelude::named_params; +use holochain_types::cell_config_overrides::CellConfigOverrides; use kitsune2_api::*; use kitsune2_core::get_responsive_remote_agents_near_location; use rand::prelude::IndexedRandom; @@ -17,11 +20,9 @@ use std::future::Future; use std::rc::Rc; use std::sync::{Mutex, Weak}; use std::time::Duration; +use tokio::sync::{OwnedSemaphorePermit, Semaphore}; use tokio::task::AbortHandle; -/// Hard-code for now. -const PARALLEL_GET_AGENTS_COUNT: usize = 3; - macro_rules! timing_trace { ($netaudit:literal, $code:block $($rest:tt)*) => {{ let __start = std::time::Instant::now(); @@ -242,12 +243,15 @@ pub(crate) struct HolochainP2pActor { evt_sender: Arc>, lair_client: holochain_keystore::MetaLairClient, kitsune: DynKitsune, + kitsune2_config: Config, blocks_db_getter: GetDbConductor, pending: Arc>, outgoing_request_duration_metric: metrics::P2pRequestDurationMetric, incoming_request_duration_metric: metrics::P2pRequestDurationMetric, + incoming_request_ignored_metric: metrics::P2pRequestIgnoredMetric, pruning_task_abort_handle: AbortHandle, request_timeout: Duration, + incoming_request_concurrency_limit_semaphore: Arc, } impl std::fmt::Debug for HolochainP2pActor { @@ -263,386 +267,52 @@ impl SpaceHandler for HolochainP2pActor { for msg in WireMessage::decode_batch(&data).map_err(|err| { K2Error::other_src("decode incoming holochain_p2p wire message batch", err) })? { - // NOTE: spawning a task here could lead to memory issues - // in the case of DoS messaging, consider some kind - // of queue or semaphore. - let from_peer = from_peer.clone(); - let space_id = space.clone(); - let evt_sender = self.evt_sender.clone(); - let kitsune = self.kitsune.clone(); - let pending = self.pending.clone(); - let this = self.this.clone(); - let duration_metric = self.incoming_request_duration_metric.clone(); - tokio::task::spawn(async move { - use crate::event::HcP2pHandler; - use crate::wire::WireMessage::*; - let start = std::time::Instant::now(); - let dna_hash = DnaHash::from_k2_space(&space_id); - let dna_hash_cloned = dna_hash.clone(); - let record_metric = - |message_type: String, - additional_attributes: &[opentelemetry_api::KeyValue]| { - let mut attributes = Vec::with_capacity(additional_attributes.len() + 2); - attributes.push(opentelemetry_api::KeyValue::new( - "message_type", - message_type, - )); - attributes.push(opentelemetry_api::KeyValue::new( - "dna_hash", - format!("{dna_hash_cloned:?}"), - )); - attributes.extend_from_slice(additional_attributes); - duration_metric.record(start.elapsed().as_secs_f64(), &attributes); - }; - match msg { - ErrorRes { msg_id, .. } - | CallRemoteRes { msg_id, .. } - | GetRes { msg_id, .. } - | GetLinksRes { msg_id, .. } - | CountLinksRes { msg_id, .. } - | GetAgentActivityRes { msg_id, .. } - | MustGetAgentActivityRes { msg_id, .. } - | SendValidationReceiptsRes { msg_id } => { - if let Some(resp) = pending.lock().unwrap().respond(msg_id) { - let _ = resp.send(msg); - } - record_metric("response".into(), &[]); - } - CallRemoteReq { - msg_id, - to_agent, - zome_call_params_serialized, - signature, - } => { - let resp = match evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_call_remote( - dna_hash, - to_agent.clone(), - zome_call_params_serialized, - signature, - ) - .await - { - Ok(response) => CallRemoteRes { msg_id, response }, - Err(err) => ErrorRes { - msg_id, - error: format!("{err:?}"), - }, - }; + // Check if received message type should be concurrency limited + let is_incoming_request_concurrency_limited = matches!( + msg, + WireMessage::GetReq { .. } + | WireMessage::GetLinksReq { .. } + | WireMessage::CountLinksReq { .. } + | WireMessage::GetAgentActivityReq { .. } + | WireMessage::MustGetAgentActivityReq { .. } + ); - if let Some(this) = this.upgrade() { - if let Err(err) = this - .send_notify_response(space_id, from_peer, msg_id, resp) - .await - { - tracing::debug!(?err, "Error sending call remote response"); - } - } else { - tracing::debug!("HolochainP2pActor has been dropped"); - } - record_metric( - "call_remote".into(), - &[opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - )], - ); - } - GetReq { - msg_id, - to_agent, - dht_hash, - } => { - let resp = match evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_get(dna_hash, to_agent.clone(), dht_hash) - .await - { - Ok(response) => GetRes { msg_id, response }, - Err(err) => ErrorRes { - msg_id, - error: format!("{err:?}"), - }, - }; - let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; - if let Err(err) = kitsune - .space_if_exists(space_id) - .await - .ok_or_else(|| HolochainP2pError::other("no such space"))? - .send_notify(from_peer, resp) - .await - { - tracing::debug!(?err, "Error sending get response"); - } - record_metric( - "get".into(), - &[opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - )], - ); - } - GetLinksReq { - msg_id, - to_agent, - link_key, - options, - } => { - let resp = match evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_get_links(dna_hash, to_agent.clone(), link_key, options) - .await - { - Ok(response) => GetLinksRes { msg_id, response }, - Err(err) => ErrorRes { - msg_id, - error: format!("{err:?}"), - }, - }; - let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; - if let Err(err) = kitsune - .space_if_exists(space_id) - .await - .ok_or_else(|| HolochainP2pError::other("no such space"))? - .send_notify(from_peer, resp) - .await - { - tracing::debug!(?err, "Error sending get_links response"); - } - record_metric( - "get_links".into(), - &[opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - )], - ); - } - CountLinksReq { - msg_id, - to_agent, - query, - } => { - let resp = match evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_count_links(dna_hash, to_agent.clone(), query) - .await - { - Ok(response) => CountLinksRes { msg_id, response }, - Err(err) => ErrorRes { - msg_id, - error: format!("{err:?}"), - }, - }; - let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; - if let Err(err) = kitsune - .space_if_exists(space_id) - .await - .ok_or_else(|| HolochainP2pError::other("no such space"))? - .send_notify(from_peer, resp) - .await - { - tracing::debug!(?err, "Error sending count_links response"); - } - record_metric( - "count_links".into(), - &[opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - )], - ); - } - GetAgentActivityReq { - msg_id, - to_agent, - agent, - query, - options, - } => { - let resp = match evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_get_agent_activity( - dna_hash, - to_agent.clone(), - agent.clone(), - query, - options, - ) - .await - { - Ok(response) => GetAgentActivityRes { msg_id, response }, - Err(err) => ErrorRes { - msg_id, - error: format!("{err:?}"), - }, - }; - let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; - if let Err(err) = kitsune - .space_if_exists(space_id) - .await - .ok_or_else(|| HolochainP2pError::other("no such space"))? - .send_notify(from_peer, resp) - .await - { - tracing::debug!(?err, "Error sending get_agent_activity response"); - } - record_metric( - "get_agent_activity".into(), - &[ - opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - ), - opentelemetry_api::KeyValue::new("agent", format!("{agent:?}")), - ], - ); - } - MustGetAgentActivityReq { - msg_id, - to_agent, - agent, - filter, - } => { - let resp = match evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_must_get_agent_activity( - dna_hash, - to_agent.clone(), - agent.clone(), - filter, - ) - .await - { - Ok(response) => MustGetAgentActivityRes { msg_id, response }, - Err(err) => ErrorRes { - msg_id, - error: format!("{err:?}"), - }, - }; - let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; - if let Err(err) = kitsune - .space_if_exists(space_id) - .await - .ok_or_else(|| HolochainP2pError::other("no such space"))? - .send_notify(from_peer, resp) - .await - { - tracing::debug!(?err, "Error sending must_get_agent_activity response"); - } - record_metric( - "must_get_agent_activity".into(), - &[ - opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - ), - opentelemetry_api::KeyValue::new("agent", format!("{agent:?}")), - ], - ); - } - SendValidationReceiptsReq { - msg_id, - to_agent, - receipts, - } => { - let resp = match evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_validation_receipts_received( - dna_hash, - to_agent.clone(), - receipts, - ) - .await - { - Ok(_) => SendValidationReceiptsRes { msg_id }, - Err(err) => ErrorRes { - msg_id, - error: format!("{err:?}"), - }, - }; - let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; - if let Err(err) = kitsune - .space_if_exists(space_id) - .await - .ok_or_else(|| HolochainP2pError::other("no such space"))? - .send_notify(from_peer, resp) - .await - { - tracing::debug!( - ?err, - "Error sending send_validation_receipts response" - ); - } - record_metric( - "send_validation_receipts".into(), - &[opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - )], - ); - } - RemoteSignalEvt { - to_agent, - zome_call_params_serialized, - signature, - } => { - // remote signals are fire-and-forget - // so it's safe to ignore the response - let _response = evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_call_remote( - dna_hash, - to_agent.clone(), - zome_call_params_serialized, - signature, - ) - .await; - record_metric( - "remote_signal".into(), - &[opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - )], - ); - } - PublishCountersignEvt { op } => { - evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_publish_countersign(dna_hash, op) - .await?; - record_metric("publish_counter_sign".into(), &[]); - } - CountersigningSessionNegotiationEvt { to_agent, message } => { - evt_sender - .get() - .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? - .handle_countersigning_session_negotiation( - dna_hash, - to_agent.clone(), - message, - ) - .await?; - record_metric( - "countersigning_session_negotiation".into(), - &[opentelemetry_api::KeyValue::new( - "to_agent", - format!("{to_agent:?}"), - )], - ); - } - } - HolochainP2pResult::Ok(()) - }); + if is_incoming_request_concurrency_limited { + let Ok(permit) = self + .incoming_request_concurrency_limit_semaphore + .clone() + .try_acquire_owned() + else { + // We have already reached our limit of concurrently handled authority requests, drop the incoming message. + tracing::debug!(?from_peer, ?space, "An incoming authority request message was received but we have already reached the limit of concurrently handled authority requests. The message will be ignored."); + + // Record opentelemetry metric that request was ignored. + let dna_hash = DnaHash::from_k2_space(&space); + let attributes = vec![ + opentelemetry_api::KeyValue::new("message_type", msg.as_ref().to_string()), + opentelemetry_api::KeyValue::new("dna_hash", format!("{dna_hash:?}")), + ]; + self.incoming_request_ignored_metric.add(1, &attributes); + + continue; + }; + + self.handle_space_wire_message_received( + msg, + space.clone(), + from_peer.clone(), + Some(permit), + ); + } else { + self.handle_space_wire_message_received( + msg, + space.clone(), + from_peer.clone(), + None, + ); + } } + Ok(()) } } @@ -651,6 +321,7 @@ impl kitsune2_api::KitsuneHandler for HolochainP2pActor { fn create_space( &self, _space: kitsune2_api::SpaceId, + _config: Option<&Config>, ) -> BoxFut<'_, kitsune2_api::K2Result> { Box::pin(async move { let this: Weak = self.this.clone(); @@ -833,40 +504,24 @@ impl HolochainP2pActor { ) -> HolochainP2pResult { check_k2_init(); - #[cfg(feature = "test_utils")] - let mut builder = if config.k2_test_builder { - let mut builder = kitsune2_core::default_test_builder(); + let mut builder = kitsune2::default_builder(); + // The following are flags only used in tests + #[cfg(feature = "test_utils")] + { if config.disable_bootstrap { + tracing::info!("Running with bootstrap disabled"); builder.bootstrap = Arc::new(test::NoopBootstrapFactory); } - - // Make it possible to disable the gossip module for testing. - if !config.disable_gossip { - // Still want the real gossip module to be used. The test builder comes with a stub - // gossip module fur use in K2 testing. - builder.gossip = kitsune2_gossip::K2GossipFactory::create(); - } else { + if config.disable_gossip { tracing::info!("Running with gossip disabled"); + builder.gossip = Arc::new(test::NoopGossipFactory); } - if config.disable_publish { tracing::info!("Running with publish disabled"); builder.publish = Arc::new(test::NoopPublishFactory); } - - if !config.mem_bootstrap { - tracing::info!("Running with core bootstrap"); - builder.bootstrap = kitsune2_core::factories::CoreBootstrapFactory::create(); - } - - builder - } else { - kitsune2::default_builder() - }; - - #[cfg(not(feature = "test_utils"))] - let mut builder = kitsune2::default_builder(); + } builder.auth_material = config.auth_material; @@ -883,6 +538,7 @@ impl HolochainP2pActor { }); builder.op_store = Arc::new(HolochainOpStoreFactory { getter: config.get_db_op_store.clone(), + cache_getter: config.get_db_cache.clone(), handler: evt_sender.clone(), }); let preflight = Arc::new(Mutex::new( @@ -904,15 +560,49 @@ impl HolochainP2pActor { // Load default configuration provided by the module factories. let builder = builder.with_default_config()?; + #[cfg(feature = "test_utils")] + { + #[cfg(feature = "transport-tx5-backend-go-pion")] + builder + .config + .set_module_config(&kitsune2_transport_tx5::Tx5TransportModConfig { + tx5_transport: kitsune2_transport_tx5::Tx5TransportConfig { + signal_allow_plain_text: true, + timeout_s: 20, + webrtc_connect_timeout_s: 15, + ..Default::default() + }, + })?; + #[cfg(feature = "transport-iroh")] + builder + .config + .set_module_config(&kitsune2_transport_iroh::IrohTransportModConfig { + iroh_transport: kitsune2_transport_iroh::IrohTransportConfig { + relay_allow_plain_text: true, + ..Default::default() + }, + })?; + builder.config.set_module_config( + &kitsune2_core::factories::CoreBootstrapModConfig { + core_bootstrap: kitsune2_core::factories::CoreBootstrapConfig { + backoff_min_ms: 1_000, + ..Default::default() + }, + }, + )?; + } + if let ReportConfig::JsonLines(hc_report) = config.report { builder .config .set_module_config(&hc_report::HcReportModConfig { hc_report })?; } - // Then override any configuration values provided by the user. + // Then override any configuration values provided by the user and set kitsune2_config if `network_config` is `Some`. + let mut kitsune2_config = Config::default(); if let Some(network_config) = config.network_config { builder.config.set_module_config(&network_config)?; + kitsune2_config = Self::kitsune2_params_from_value(network_config)?; } let pending = Arc::new_cyclic(|this| { @@ -942,13 +632,40 @@ impl HolochainP2pActor { kitsune, blocks_db_getter: config.get_conductor_db.clone(), pending, + kitsune2_config, outgoing_request_duration_metric: create_p2p_outgoing_request_duration_metric(), incoming_request_duration_metric: create_p2p_handle_incoming_request_duration_metric(), + incoming_request_ignored_metric: create_p2p_handle_incoming_request_ignored_metric(), pruning_task_abort_handle, request_timeout: config.request_timeout, + incoming_request_concurrency_limit_semaphore: Arc::new(Semaphore::new( + config.incoming_request_concurrency_limit as usize, + )), })) } + /// Extract Kitsune2 [`Config`] from a [`serde_json::Value`]. + fn kitsune2_params_from_value(value: serde_json::Value) -> HolochainP2pResult { + let config = Config::default(); + // get `core_bootstrap` from config + if let Ok(core_bootstrap_config) = serde_json::from_value::< + kitsune2_core::factories::CoreBootstrapModConfig, + >(value.clone()) + { + config.set_module_config(&core_bootstrap_config)?; + } + + // get `tx5_transport` from config + #[cfg(feature = "transport-tx5-backend-go-pion")] + if let Ok(tx5_transport_config) = + serde_json::from_value::(value) + { + config.set_module_config(&tx5_transport_config)?; + } + + Ok(config) + } + // Prunes expired URLs at an interval and checks the peer store for agent infos of unresponsive // URLs. If there is an updated agent info since the URL was marked unresponsive, the URL will // be pruned. @@ -967,7 +684,11 @@ impl HolochainP2pActor { let db_getter = db_getter.clone(); let kitsune2 = kitsune2.clone(); async move { - let space = kitsune2.clone().space(space_id.clone()).await?; + let Some(space) = kitsune2.clone().space_if_exists(space_id.clone()).await else { + tracing::warn!("Cannot prune expired URLs from peer meta store for k2 space that does not exist with space id {space_id}"); + return Ok::<_, HolochainP2pError>(()); + }; + let peer_store = space.peer_store().clone(); let db = db_getter(DnaHash::from_k2_space(&space_id)).await?; // Prune any expired entries. @@ -1075,6 +796,7 @@ impl HolochainP2pActor { tag: &'static str, space: &DynSpace, loc: u32, + options: &NetworkRequestOptions, ) -> HolochainP2pResult> { let agents = self.get_peers_for_location(space, loc).await?; if agents.is_empty() { @@ -1085,7 +807,7 @@ impl HolochainP2pActor { } Ok(agents - .choose_multiple(&mut rand::rng(), PARALLEL_GET_AGENTS_COUNT) + .choose_multiple(&mut rand::rng(), options.remote_agent_count as usize) .cloned() .collect()) } @@ -1145,6 +867,7 @@ impl HolochainP2pActor { msg_id: u64, req: WireMessage, dna_hash: DnaHash, + options: NetworkRequestOptions, cb: C, ) -> HolochainP2pResult where @@ -1152,11 +875,13 @@ impl HolochainP2pActor { { let req = WireMessage::encode_batch(&[&req])?; + let timeout = match options.timeout_ms { + Some(ms) => Duration::from_millis(ms), + None => self.request_timeout, + }; + let (s, r) = tokio::sync::oneshot::channel(); - self.pending - .lock() - .unwrap() - .register(msg_id, s, self.request_timeout); + self.pending.lock().unwrap().register(msg_id, s, timeout); let start = std::time::Instant::now(); @@ -1207,12 +932,397 @@ impl HolochainP2pActor { ops: Vec, ) -> HolochainP2pResult<()> { self.kitsune - .space(space_id) - .await? + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))? .inform_ops_stored(ops) .await .map_err(HolochainP2pError::K2Error) } + + /// Apply [`CellConfigOverrides`] to the current Kitsune2 [`Config`], returning + /// a new [`Config`] with the overrides applied, if any overrides were needed. + fn space_config_override( + &self, + space_overrides: CellConfigOverrides, + ) -> HolochainP2pResult> { + let mut override_needed = false; + let config = self.kitsune2_config.clone(); + if let Some(bootstrap_url) = space_overrides.bootstrap_url.as_ref() { + // get current bootstrap config and override server_url + let mut core_bootstrap_config: kitsune2_core::factories::CoreBootstrapModConfig = + config.get_module_config().unwrap_or_default(); + core_bootstrap_config.core_bootstrap.server_url = Some(bootstrap_url.clone()); + config.set_module_config(&core_bootstrap_config)?; + override_needed = true; + } + #[cfg(feature = "transport-tx5-backend-go-pion")] + if let Some(signal_url) = space_overrides.signal_url.as_ref() { + // get current tx5 transport config and override server_url + let mut tx5_transport_config: kitsune2_transport_tx5::Tx5TransportModConfig = + config.get_module_config().unwrap_or_default(); + tx5_transport_config.tx5_transport.server_url = signal_url.clone(); + config.set_module_config(&tx5_transport_config)?; + override_needed = true; + } + if override_needed { + Ok(Some(config)) + } else { + Ok(None) + } + } + + /// Handling incoming wire message for space + fn handle_space_wire_message_received( + &self, + msg: WireMessage, + space_id: SpaceId, + from_peer: Url, + permit: Option, + ) { + // NOTE: spawning a task here could lead to memory issues + // in the case of DoS messaging, consider some kind + // of queue or semaphore. + + let evt_sender = self.evt_sender.clone(); + let kitsune = self.kitsune.clone(); + let pending = self.pending.clone(); + let this = self.this.clone(); + let duration_metric = self.incoming_request_duration_metric.clone(); + tokio::task::spawn(async move { + use crate::event::HcP2pHandler; + use crate::wire::WireMessage::*; + + // Ensure permit is dropped when this thread is dropped. + let _permit = permit; + + let start = std::time::Instant::now(); + let dna_hash = DnaHash::from_k2_space(&space_id); + let dna_hash_cloned = dna_hash.clone(); + let message_type = msg.as_ref().to_string(); + let record_metric = |additional_attributes: &[opentelemetry_api::KeyValue]| { + let mut attributes = Vec::with_capacity(additional_attributes.len() + 2); + attributes.push(opentelemetry_api::KeyValue::new( + "message_type", + message_type, + )); + attributes.push(opentelemetry_api::KeyValue::new( + "dna_hash", + format!("{dna_hash_cloned:?}"), + )); + attributes.extend_from_slice(additional_attributes); + duration_metric.record(start.elapsed().as_secs_f64(), &attributes); + }; + match msg { + ErrorRes { msg_id, .. } + | CallRemoteRes { msg_id, .. } + | GetRes { msg_id, .. } + | GetLinksRes { msg_id, .. } + | CountLinksRes { msg_id, .. } + | GetAgentActivityRes { msg_id, .. } + | MustGetAgentActivityRes { msg_id, .. } + | SendValidationReceiptsRes { msg_id } => { + if let Some(resp) = pending.lock().unwrap().respond(msg_id) { + let _ = resp.send(msg); + } + record_metric(&[]); + } + CallRemoteReq { + msg_id, + to_agent, + zome_call_params_serialized, + signature, + } => { + let resp = match evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_call_remote( + dna_hash, + to_agent.clone(), + zome_call_params_serialized, + signature, + ) + .await + { + Ok(response) => CallRemoteRes { msg_id, response }, + Err(err) => ErrorRes { + msg_id, + error: format!("{err:?}"), + }, + }; + + if let Some(this) = this.upgrade() { + if let Err(err) = this + .send_notify_response(space_id, from_peer, msg_id, resp) + .await + { + tracing::debug!(?err, "Error sending call remote response"); + } + } else { + tracing::debug!("HolochainP2pActor has been dropped"); + } + record_metric(&[opentelemetry_api::KeyValue::new( + "to_agent", + format!("{to_agent:?}"), + )]); + } + GetReq { + msg_id, + to_agent, + dht_hash, + } => { + let resp = match evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_get(dna_hash, to_agent.clone(), dht_hash) + .await + { + Ok(response) => GetRes { msg_id, response }, + Err(err) => ErrorRes { + msg_id, + error: format!("{err:?}"), + }, + }; + let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; + if let Err(err) = kitsune + .space_if_exists(space_id) + .await + .ok_or_else(|| HolochainP2pError::other("no such space"))? + .send_notify(from_peer, resp) + .await + { + tracing::debug!(?err, "Error sending get response"); + } + record_metric(&[opentelemetry_api::KeyValue::new( + "to_agent", + format!("{to_agent:?}"), + )]); + } + GetLinksReq { + msg_id, + to_agent, + link_key, + options, + } => { + let resp = match evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_get_links(dna_hash, to_agent.clone(), link_key, options) + .await + { + Ok(response) => GetLinksRes { msg_id, response }, + Err(err) => ErrorRes { + msg_id, + error: format!("{err:?}"), + }, + }; + let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; + if let Err(err) = kitsune + .space_if_exists(space_id) + .await + .ok_or_else(|| HolochainP2pError::other("no such space"))? + .send_notify(from_peer, resp) + .await + { + tracing::debug!(?err, "Error sending get_links response"); + } + record_metric(&[opentelemetry_api::KeyValue::new( + "to_agent", + format!("{to_agent:?}"), + )]); + } + CountLinksReq { + msg_id, + to_agent, + query, + } => { + let resp = match evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_count_links(dna_hash, to_agent.clone(), query) + .await + { + Ok(response) => CountLinksRes { msg_id, response }, + Err(err) => ErrorRes { + msg_id, + error: format!("{err:?}"), + }, + }; + let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; + if let Err(err) = kitsune + .space_if_exists(space_id) + .await + .ok_or_else(|| HolochainP2pError::other("no such space"))? + .send_notify(from_peer, resp) + .await + { + tracing::debug!(?err, "Error sending count_links response"); + } + record_metric(&[opentelemetry_api::KeyValue::new( + "to_agent", + format!("{to_agent:?}"), + )]); + } + GetAgentActivityReq { + msg_id, + to_agent, + agent, + query, + options, + } => { + let resp = match evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_get_agent_activity( + dna_hash, + to_agent.clone(), + agent.clone(), + query, + options, + ) + .await + { + Ok(response) => GetAgentActivityRes { msg_id, response }, + Err(err) => ErrorRes { + msg_id, + error: format!("{err:?}"), + }, + }; + let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; + if let Err(err) = kitsune + .space_if_exists(space_id) + .await + .ok_or_else(|| HolochainP2pError::other("no such space"))? + .send_notify(from_peer, resp) + .await + { + tracing::debug!(?err, "Error sending get_agent_activity response"); + } + record_metric(&[ + opentelemetry_api::KeyValue::new("to_agent", format!("{to_agent:?}")), + opentelemetry_api::KeyValue::new("agent", format!("{agent:?}")), + ]); + } + MustGetAgentActivityReq { + msg_id, + to_agent, + agent, + filter, + } => { + let resp = match evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_must_get_agent_activity( + dna_hash, + to_agent.clone(), + agent.clone(), + filter, + ) + .await + { + Ok(response) => MustGetAgentActivityRes { msg_id, response }, + Err(err) => ErrorRes { + msg_id, + error: format!("{err:?}"), + }, + }; + let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; + if let Err(err) = kitsune + .space_if_exists(space_id) + .await + .ok_or_else(|| HolochainP2pError::other("no such space"))? + .send_notify(from_peer, resp) + .await + { + tracing::debug!(?err, "Error sending must_get_agent_activity response"); + } + record_metric(&[ + opentelemetry_api::KeyValue::new("to_agent", format!("{to_agent:?}")), + opentelemetry_api::KeyValue::new("agent", format!("{agent:?}")), + ]); + } + SendValidationReceiptsReq { + msg_id, + to_agent, + receipts, + } => { + let resp = match evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_validation_receipts_received(dna_hash, to_agent.clone(), receipts) + .await + { + Ok(_) => SendValidationReceiptsRes { msg_id }, + Err(err) => ErrorRes { + msg_id, + error: format!("{err:?}"), + }, + }; + let resp = crate::wire::WireMessage::encode_batch(&[&resp])?; + if let Err(err) = kitsune + .space_if_exists(space_id) + .await + .ok_or_else(|| HolochainP2pError::other("no such space"))? + .send_notify(from_peer, resp) + .await + { + tracing::debug!(?err, "Error sending send_validation_receipts response"); + } + record_metric(&[opentelemetry_api::KeyValue::new( + "to_agent", + format!("{to_agent:?}"), + )]); + } + RemoteSignalEvt { + to_agent, + zome_call_params_serialized, + signature, + } => { + // remote signals are fire-and-forget + // so it's safe to ignore the response + let _response = evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_call_remote( + dna_hash, + to_agent.clone(), + zome_call_params_serialized, + signature, + ) + .await; + record_metric(&[opentelemetry_api::KeyValue::new( + "to_agent", + format!("{to_agent:?}"), + )]); + } + PublishCountersignEvt { op } => { + evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_publish_countersign(dna_hash, op) + .await?; + record_metric(&[]); + } + CountersigningSessionNegotiationEvt { to_agent, message } => { + evt_sender + .get() + .ok_or_else(|| HolochainP2pError::other(EVT_REG_ERR))? + .handle_countersigning_session_negotiation( + dna_hash, + to_agent.clone(), + message, + ) + .await?; + record_metric(&[opentelemetry_api::KeyValue::new( + "to_agent", + format!("{to_agent:?}"), + )]); + } + } + + HolochainP2pResult::Ok(()) + }); + } } macro_rules! timing_trace_out { @@ -1292,10 +1402,12 @@ impl actor::HcP2p for HolochainP2pActor { fn peer_store(&self, dna_hash: DnaHash) -> BoxFut<'_, HolochainP2pResult> { Box::pin(async move { + let space_id = dna_hash.to_k2_space(); Ok(self .kitsune - .space(dna_hash.to_k2_space()) - .await? + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))? .peer_store() .clone()) }) @@ -1327,9 +1439,22 @@ impl actor::HcP2p for HolochainP2pActor { dna_hash: DnaHash, agent_pub_key: AgentPubKey, _maybe_agent_info: Option, + config_override: Option, ) -> BoxFut<'_, HolochainP2pResult<()>> { Box::pin(async move { - let space = self.kitsune.space(dna_hash.to_k2_space()).await?; + let config_override = match config_override { + Some(overrides) => self.space_config_override(overrides)?, + None => None, + }; + + // Create k2 space with config override. + // + // This is the only time the space is created, + // all other calls to get a space should use `space_if_exists`. + let space = self + .kitsune + .space(dna_hash.to_k2_space(), config_override) + .await?; let local_agent: DynLocalAgent = Arc::new(HolochainP2pLocalAgent::new( agent_pub_key, @@ -1350,21 +1475,23 @@ impl actor::HcP2p for HolochainP2pActor { ) -> BoxFut<'_, HolochainP2pResult<()>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + if let Some(space) = self.kitsune.space_if_exists(space_id.clone()).await { + space.local_agent_leave(agent_pub_key.to_k2_agent()).await; - space.local_agent_leave(agent_pub_key.to_k2_agent()).await; - - // If there are no more local agents in this space, then the space can be removed. - if space - .local_agent_store() - .get_all() - .await - .is_ok_and(|agents| agents.is_empty()) - { - drop(space); - if let Err(err) = self.kitsune.remove_space(space_id).await { - tracing::warn!(?err, "Failed to remove space after last agent left"); + // If there are no more local agents in this space, then the space can be removed. + if space + .local_agent_store() + .get_all() + .await + .is_ok_and(|agents| agents.is_empty()) + { + drop(space); + if let Err(err) = self.kitsune.remove_space(space_id).await { + tracing::warn!(?err, "Failed to remove space after last agent left"); + } } + } else { + tracing::warn!("Cannot leave space that does not exist with space id {space_id}."); } Ok(()) @@ -1388,7 +1515,11 @@ impl actor::HcP2p for HolochainP2pActor { ) -> BoxFut<'_, HolochainP2pResult> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; let byte_count = zome_call_params_serialized.0.len(); @@ -1412,6 +1543,7 @@ impl actor::HcP2p for HolochainP2pActor { msg_id, req, dna_hash, + NetworkRequestOptions::default(), |res| match res { crate::wire::WireMessage::CallRemoteRes { response, .. } => Ok(response), _ => Err(HolochainP2pError::other(format!( @@ -1434,7 +1566,11 @@ impl actor::HcP2p for HolochainP2pActor { ) -> BoxFut<'_, HolochainP2pResult<()>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id.clone()))?; let byte_count: usize = target_payload_list.iter().map(|(_, p, _)| p.0.len()).sum(); @@ -1504,9 +1640,13 @@ impl actor::HcP2p for HolochainP2pActor { .await?; } - let space = dna_hash.to_k2_space(); + let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; // -- actually publish the op hashes -- // @@ -1551,7 +1691,11 @@ impl actor::HcP2p for HolochainP2pActor { ) -> BoxFut<'_, HolochainP2pResult<()>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; let peers = self .get_peers_for_location(&space, basis_hash.get_loc()) @@ -1597,14 +1741,20 @@ impl actor::HcP2p for HolochainP2pActor { fn get( &self, dna_hash: DnaHash, - dht_hash: holo_hash::AnyDhtHash, + dht_hash: AnyDhtHash, + options: NetworkRequestOptions, ) -> BoxFut<'_, HolochainP2pResult>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id.clone()))?; + let loc = dht_hash.get_loc(); let agents = self - .get_random_peers_for_location("get", &space, loc) + .get_random_peers_for_location("get", &space, loc, &options) .await?; let start = std::time::Instant::now(); @@ -1612,8 +1762,7 @@ impl actor::HcP2p for HolochainP2pActor { let out = select_ok_non_empty( agents.into_iter().map(|(to_agent, to_url)| { Box::pin(async { - let (msg_id, req) = - crate::wire::WireMessage::get_req(to_agent, dht_hash.clone()); + let (msg_id, req) = WireMessage::get_req(to_agent, dht_hash.clone()); self.send_request( "get", @@ -1622,8 +1771,9 @@ impl actor::HcP2p for HolochainP2pActor { msg_id, req, dna_hash.clone(), + options.clone(), |res| match res { - crate::wire::WireMessage::GetRes { response, .. } => Ok(response), + WireMessage::GetRes { response, .. } => Ok(response), _ => Err(HolochainP2pError::other(format!( "invalid response to get: {res:?}" ))), @@ -1671,14 +1821,23 @@ impl actor::HcP2p for HolochainP2pActor { &self, dna_hash: DnaHash, link_key: WireLinkKey, - options: actor::GetLinksOptions, + options: GetLinksRequestOptions, ) -> BoxFut<'_, HolochainP2pResult>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; let loc = link_key.base.get_loc(); let agents = self - .get_random_peers_for_location("get_links", &space, loc) + .get_random_peers_for_location( + "get_links", + &space, + loc, + &options.network_req_options, + ) .await?; let start = std::time::Instant::now(); @@ -1701,6 +1860,7 @@ impl actor::HcP2p for HolochainP2pActor { msg_id, req, dna_hash.clone(), + options.network_req_options.clone(), |res| match res { crate::wire::WireMessage::GetLinksRes { response, .. } => { Ok(response) @@ -1727,13 +1887,18 @@ impl actor::HcP2p for HolochainP2pActor { &self, dna_hash: DnaHash, query: WireLinkQuery, + options: NetworkRequestOptions, ) -> BoxFut<'_, HolochainP2pResult> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; let loc = query.base.get_loc(); let agents = self - .get_random_peers_for_location("count_links", &space, loc) + .get_random_peers_for_location("count_links", &space, loc, &options) .await?; let start = std::time::Instant::now(); @@ -1741,8 +1906,7 @@ impl actor::HcP2p for HolochainP2pActor { let out = select_ok_non_empty( agents.into_iter().map(|(to_agent, to_url)| { Box::pin(async { - let (msg_id, req) = - crate::wire::WireMessage::count_links_req(to_agent, query.clone()); + let (msg_id, req) = WireMessage::count_links_req(to_agent, query.clone()); self.send_request( "count_links", @@ -1751,6 +1915,7 @@ impl actor::HcP2p for HolochainP2pActor { msg_id, req, dna_hash.clone(), + options.clone(), |res| match res { crate::wire::WireMessage::CountLinksRes { response, .. } => { Ok(response) @@ -1782,10 +1947,19 @@ impl actor::HcP2p for HolochainP2pActor { ) -> BoxFut<'_, HolochainP2pResult>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; let loc = agent.get_loc(); let agents = self - .get_random_peers_for_location("get_agent_activity", &space, loc) + .get_random_peers_for_location( + "get_agent_activity", + &space, + loc, + &options.network_req_options, + ) .await?; let start = std::time::Instant::now(); @@ -1795,7 +1969,7 @@ impl actor::HcP2p for HolochainP2pActor { Box::pin(async { let r_options: event::GetActivityOptions = (&options).into(); - let (msg_id, req) = crate::wire::WireMessage::get_agent_activity_req( + let (msg_id, req) = WireMessage::get_agent_activity_req( to_agent, agent.clone(), query.clone(), @@ -1809,10 +1983,9 @@ impl actor::HcP2p for HolochainP2pActor { msg_id, req, dna_hash.clone(), + options.network_req_options.clone(), |res| match res { - crate::wire::WireMessage::GetAgentActivityRes { - response, .. - } => Ok(response), + WireMessage::GetAgentActivityRes { response, .. } => Ok(response), _ => Err(HolochainP2pError::other(format!( "invalid response to get_agent_activity: {res:?}" ))), @@ -1847,14 +2020,19 @@ impl actor::HcP2p for HolochainP2pActor { &self, dna_hash: DnaHash, author: AgentPubKey, - filter: holochain_zome_types::chain::ChainFilter, + filter: ChainFilter, + options: NetworkRequestOptions, ) -> BoxFut<'_, HolochainP2pResult>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; let loc = author.get_loc(); let agents = self - .get_random_peers_for_location("must_get_agent_activity", &space, loc) + .get_random_peers_for_location("must_get_agent_activity", &space, loc, &options) .await?; let start = std::time::Instant::now(); @@ -1875,6 +2053,7 @@ impl actor::HcP2p for HolochainP2pActor { msg_id, req, dna_hash.clone(), + options.clone(), |res| match res { crate::wire::WireMessage::MustGetAgentActivityRes { response, @@ -1906,7 +2085,11 @@ impl actor::HcP2p for HolochainP2pActor { ) -> BoxFut<'_, HolochainP2pResult<()>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; let agent_id = to_agent.to_k2_agent(); @@ -1944,6 +2127,7 @@ impl actor::HcP2p for HolochainP2pActor { msg_id, req, dna_hash, + NetworkRequestOptions::default(), |res| match res { WireMessage::SendValidationReceiptsRes { .. } => Ok(()), _ => Err(HolochainP2pError::other(format!( @@ -1967,7 +2151,11 @@ impl actor::HcP2p for HolochainP2pActor { Box::pin(async move { let loc = basis.get_loc(); let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; for agent in space.local_agent_store().get_all().await? { if agent.get_cur_storage_arc().contains(loc) { @@ -1987,7 +2175,11 @@ impl actor::HcP2p for HolochainP2pActor { ) -> BoxFut<'_, HolochainP2pResult<()>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id.clone()).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id.clone()))?; let mut peer_urls = Vec::with_capacity(agents.len()); for agent in agents { @@ -2077,7 +2269,13 @@ impl actor::HcP2p for HolochainP2pActor { let all_space_ids = self.kitsune.list_spaces(); let mut spaces = Vec::with_capacity(all_space_ids.len()); for space_id in all_space_ids { - spaces.push((space_id.clone(), self.kitsune.space(space_id).await?)); + let Some(space) = self.kitsune.space_if_exists(space_id.clone()).await + else { + tracing::debug!("Cannot dump network metrics for space that does not exist with space id {space_id}."); + continue; + }; + + spaces.push((space_id.clone(), space)); } spaces @@ -2134,7 +2332,11 @@ impl actor::HcP2p for HolochainP2pActor { ) -> BoxFut<'_, HolochainP2pResult>> { Box::pin(async move { let space_id = dna_hash.to_k2_space(); - let space = self.kitsune.space(space_id).await?; + let space = self + .kitsune + .space_if_exists(space_id.clone()) + .await + .ok_or(HolochainP2pError::K2SpaceNotFound(space_id))?; Ok(space .local_agent_store() @@ -2146,6 +2348,13 @@ impl actor::HcP2p for HolochainP2pActor { }) } + fn local_socket_addrs(&self) -> BoxFut<'_, HolochainP2pResult>> { + let kitsune = self.kitsune.clone(); + Box::pin(async move { + Ok(kitsune.transport().await?.local_socket_addrs().await?) + }) + } + fn conductor_db_getter(&self) -> GetDbConductor { self.blocks_db_getter.clone() } @@ -2215,6 +2424,13 @@ impl actor::HcP2p for HolochainP2pActor { #[cfg(test)] mod tests { use super::*; + use crate::{ + actor::HcP2p, + event::{ + CountersigningSessionNegotiationMessage, GetActivityOptions, GetLinksOptions, + HcP2pHandler, + }, + }; #[tokio::test(flavor = "multi_thread")] async fn correct_id_loc_calc() { @@ -2263,4 +2479,996 @@ mod tests { assert_eq!(h_op.to_string(), k_op.to_string()); } + + #[tokio::test(flavor = "multi_thread")] + #[cfg(feature = "kitsune2_transport_tx5")] + async fn should_set_kitsune2_config() { + let actor = test_p2p_actor().await; + + let actor_p2p: Arc = + Arc::downcast(actor).expect("failed to downcast actor"); + + // convert back to kitsune config + let retrieved_kitsune_config = actor_p2p.kitsune2_config.clone(); + let bootstrap_config: kitsune2_core::factories::CoreBootstrapModConfig = + retrieved_kitsune_config + .get_module_config() + .expect("failed to get bootstrap config"); + assert_eq!( + bootstrap_config.core_bootstrap.backoff_max_ms, 5_000, + "backoff_max_ms should match" + ); + assert_eq!( + bootstrap_config.core_bootstrap.backoff_min_ms, 100, + "backoff_min_ms should match" + ); + // get tx5 transport module config + let tx5_transport_config: kitsune2_transport_tx5::Tx5TransportModConfig = + retrieved_kitsune_config + .get_module_config() + .expect("failed to get tx5 transport config"); + assert_eq!( + tx5_transport_config.tx5_transport.server_url, "wss://localhost:9999", + "server_url should match" + ); + assert_eq!( + tx5_transport_config.tx5_transport.timeout_s, 300, + "timeout_s should match" + ); + } + + #[tokio::test(flavor = "multi_thread")] + #[cfg(feature = "kitsune2_transport_tx5")] + async fn should_get_no_overrides_for_space_if_default() { + let actor = test_p2p_actor().await; + let actor_p2p: Arc = + Arc::downcast(actor).expect("failed to downcast actor"); + + // should not override if default + let space_overrides = CellConfigOverrides::default(); + let overrides = actor_p2p + .space_config_override(space_overrides) + .expect("failed to get overrides"); + assert!(overrides.is_none(), "overrides should be none"); + } + + #[tokio::test(flavor = "multi_thread")] + #[cfg(feature = "kitsune2_transport_tx5")] + async fn should_get_overrides_for_space_if_provided() { + let actor = test_p2p_actor().await; + let actor_p2p: Arc = + Arc::downcast(actor).expect("failed to downcast actor"); + // should not override if default + let space_overrides = CellConfigOverrides { + bootstrap_url: Some("http://override:1234".to_string()), + signal_url: Some("wss://override:5678".to_string()), + }; + let overrides = actor_p2p + .space_config_override(space_overrides) + .expect("failed to get overrides") + .expect("overrides should be some"); + + // convert back to kitsune config to check values + let bootstrap_config: kitsune2_core::factories::CoreBootstrapModConfig = overrides + .get_module_config() + .expect("failed to get bootstrap config"); + assert_eq!( + bootstrap_config.core_bootstrap.server_url, + Some("http://override:1234".to_string()), + "bootstrap_url should match" + ); + let tx5_transport_config: kitsune2_transport_tx5::Tx5TransportModConfig = overrides + .get_module_config() + .expect("failed to get tx5 transport config"); + assert_eq!( + tx5_transport_config.tx5_transport.server_url, "wss://override:5678", + "signal_url should match" + ); + } + + #[cfg(feature = "kitsune2_transport_tx5")] + async fn test_p2p_actor() -> Arc { + use kitsune2_core::factories::{CoreBootstrapConfig, CoreBootstrapModConfig}; + + // prepare a kitsune config json + let bootstrap = CoreBootstrapModConfig { + core_bootstrap: CoreBootstrapConfig { + server_url: None, + backoff_max_ms: 5_000, + backoff_min_ms: 100, + }, + }; + let tx_config = kitsune2_transport_tx5::Tx5TransportModConfig { + tx5_transport: kitsune2_transport_tx5::Tx5TransportConfig { + server_url: "wss://localhost:9999".to_string(), + timeout_s: 300, + ..Default::default() + }, + }; + let kitsune_config = Config::default(); + kitsune_config + .set_module_config(&bootstrap) + .expect("failed to set config"); + kitsune_config + .set_module_config(&tx_config) + .expect("failed to set config"); + + let kitsune_config_json = + serde_json::to_value(&kitsune_config).expect("failed to serialize kitsune config"); + + let config = HolochainP2pConfig { + network_config: Some(kitsune_config_json), + ..Default::default() + }; + + HolochainP2pActor::create(config, holochain_keystore::test_keystore()) + .await + .expect("failed to create actor") + } + + struct TestP2pActorHarness { + pub actor: Arc, + pub event_handler: Arc, + } + + #[derive(Clone, Debug)] + struct BlockingEventHandler { + pub handle_call_remote_count: Arc>, + pub handle_publish_count: Arc>, + pub handle_get_count: Arc>, + pub handle_get_links_count: Arc>, + pub handle_count_links_count: Arc>, + pub handle_get_agent_activity_count: Arc>, + pub handle_must_get_agent_activity_count: Arc>, + pub handle_validation_receipts_received_count: Arc>, + pub handle_publish_countersign_count: Arc>, + pub handle_countersigning_session_negotiation_count: Arc>, + } + + impl BlockingEventHandler { + fn new() -> Self { + Self { + handle_call_remote_count: Arc::new(Mutex::new(0)), + handle_publish_count: Arc::new(Mutex::new(0)), + handle_get_count: Arc::new(Mutex::new(0)), + handle_get_links_count: Arc::new(Mutex::new(0)), + handle_count_links_count: Arc::new(Mutex::new(0)), + handle_get_agent_activity_count: Arc::new(Mutex::new(0)), + handle_must_get_agent_activity_count: Arc::new(Mutex::new(0)), + handle_validation_receipts_received_count: Arc::new(Mutex::new(0)), + handle_publish_countersign_count: Arc::new(Mutex::new(0)), + handle_countersigning_session_negotiation_count: Arc::new(Mutex::new(0)), + } + } + } + + // All handlers return a future that never resolves + impl HcP2pHandler for BlockingEventHandler { + fn handle_call_remote( + &self, + _dna_hash: DnaHash, + _to_agent: AgentPubKey, + _zome_call_params_serialized: ExternIO, + _signature: holochain_types::prelude::Signature, + ) -> BoxFut<'_, HolochainP2pResult> { + // Increment counter + let mut count = self.handle_call_remote_count.lock().unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_publish( + &self, + _dna_hash: DnaHash, + _ops: Vec, + ) -> BoxFut<'_, HolochainP2pResult<()>> { + // Increment counter + let mut count = self.handle_publish_count.lock().unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_get( + &self, + _dna_hash: DnaHash, + _to_agent: AgentPubKey, + _dht_hash: holo_hash::AnyDhtHash, + ) -> BoxFut<'_, HolochainP2pResult> { + // Increment counter + let mut count = self.handle_get_count.lock().unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_get_links( + &self, + _dna_hash: DnaHash, + _to_agent: AgentPubKey, + _link_key: WireLinkKey, + _options: GetLinksOptions, + ) -> BoxFut<'_, HolochainP2pResult> { + // Increment counter + let mut count = self.handle_get_links_count.lock().unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_count_links( + &self, + _dna_hash: DnaHash, + _to_agent: AgentPubKey, + _query: WireLinkQuery, + ) -> BoxFut<'_, HolochainP2pResult> { + // Increment counter + let mut count = self.handle_count_links_count.lock().unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_get_agent_activity( + &self, + _dna_hash: DnaHash, + _to_agent: AgentPubKey, + _agent: AgentPubKey, + _query: ChainQueryFilter, + _options: GetActivityOptions, + ) -> BoxFut<'_, HolochainP2pResult> { + // Increment counter + let mut count = self.handle_get_agent_activity_count.lock().unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_must_get_agent_activity( + &self, + _dna_hash: DnaHash, + _to_agent: AgentPubKey, + _author: AgentPubKey, + _filter: holochain_zome_types::chain::ChainFilter, + ) -> BoxFut<'_, HolochainP2pResult> { + // Increment counter + let mut count = self.handle_must_get_agent_activity_count.lock().unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_validation_receipts_received( + &self, + _dna_hash: DnaHash, + _to_agent: AgentPubKey, + _receipts: holochain_types::prelude::ValidationReceiptBundle, + ) -> BoxFut<'_, HolochainP2pResult<()>> { + // Increment counter + let mut count = self + .handle_validation_receipts_received_count + .lock() + .unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_publish_countersign( + &self, + _dna_hash: DnaHash, + _op: holochain_types::dht_op::ChainOp, + ) -> BoxFut<'_, HolochainP2pResult<()>> { + // Increment counter + let mut count = self.handle_publish_countersign_count.lock().unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + + fn handle_countersigning_session_negotiation( + &self, + _dna_hash: DnaHash, + _to_agent: AgentPubKey, + _message: CountersigningSessionNegotiationMessage, + ) -> BoxFut<'_, HolochainP2pResult<()>> { + // Increment counter + let mut count = self + .handle_countersigning_session_negotiation_count + .lock() + .unwrap(); + *count += 1; + + // Block indefinitely + Box::pin(std::future::pending()) + } + } + + impl TestP2pActorHarness { + async fn new(concurrency_limit: u16) -> Self { + let config = HolochainP2pConfig { + incoming_request_concurrency_limit: concurrency_limit, + network_config: Some(serde_json::json!({ + "coreBootstrap": { + "serverUrl": "https://not_a_host" + }, + "tx5Transport": { + "serverUrl": "wss://not_a_host", + "timeoutS": 30, + "webrtcConnectTimeoutS": 25, + } + })), + ..Default::default() + }; + let actor = HolochainP2pActor::create(config, holochain_keystore::test_keystore()) + .await + .unwrap(); + let actor: Arc = Arc::downcast(actor).unwrap(); + let event_handler = Arc::new(BlockingEventHandler::new()); + actor.register_handler(event_handler.clone()).await.unwrap(); + + Self { + actor, + event_handler, + } + } + + fn recv_notify( + &self, + from_peer: Url, + space_id: SpaceId, + data: bytes::Bytes, + ) -> K2Result<()> { + self.actor.recv_notify(from_peer, space_id, data) + } + + fn register_pending_message_response_handler( + &self, + msg_id: u64, + ) -> tokio::sync::oneshot::Receiver { + let (s, r) = tokio::sync::oneshot::channel(); + self.actor + .pending + .lock() + .unwrap() + .register(msg_id, s, Duration::from_secs(60)); + r + } + } + + fn create_encode_wire_message_get_req(msg_id: u64) -> bytes::Bytes { + let msg = WireMessage::GetReq { + msg_id, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + dht_hash: ActionHash::from_raw_32(vec![2; 32]).into(), + }; + WireMessage::encode_batch(&[&msg]).unwrap() + } + + #[tokio::test(flavor = "multi_thread")] + async fn incoming_authority_requests_are_concurrency_limited() { + let dna_hash = DnaHash::from_raw_32(vec![0; 32]); + let space_id = dna_hash.to_k2_space(); + let from_peer = kitsune2_api::Url::from_str("ws://test:80/1").unwrap(); + + let concurrency_limit = 15; + let harness = TestP2pActorHarness::new(concurrency_limit).await; + + // Receive concurrency-limited messages up to limit + for i in 0..concurrency_limit { + let msg_data = create_encode_wire_message_get_req(i as u64); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + } + + // Messages were all handled + let all_handled = retry_fn_until_timeout( + async || { + let handled_count = harness.event_handler.handle_get_count.lock().unwrap(); + *handled_count == concurrency_limit as u32 + }, + None, + None, + ) + .await; + assert!(all_handled.is_ok()); + + // Concurrency limit permits were claimed + assert_eq!( + harness + .actor + .incoming_request_concurrency_limit_semaphore + .available_permits(), + 0 + ); + + // Receive another message that is concurrency-limited + let msg_data = create_encode_wire_message_get_req(3); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message beyond limit is not handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness.event_handler.handle_get_count.lock().unwrap(); + *handled_count == concurrency_limit as u32 + 1 + }, + None, + None, + ) + .await; + assert!(is_handled.is_err()); + } + + #[tokio::test(flavor = "multi_thread")] + async fn authority_request_wire_messages_are_concurrency_limited() { + let dna_hash = DnaHash::from_raw_32(vec![0; 32]); + let space_id = dna_hash.to_k2_space(); + let from_peer = kitsune2_api::Url::from_str("ws://test:80/1").unwrap(); + + let concurrency_limit = 2; + let harness = TestP2pActorHarness::new(concurrency_limit).await; + + // Initially all permits should be available + assert_eq!( + harness + .actor + .incoming_request_concurrency_limit_semaphore + .available_permits(), + concurrency_limit as usize + ); + + // Receive concurrency-limited messages up to limit + for i in 0..concurrency_limit { + let msg_data = create_encode_wire_message_get_req(i as u64); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + } + + // GetReq is limited + let msg = WireMessage::GetReq { + msg_id: 1, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + dht_hash: ActionHash::from_raw_32(vec![2; 32]).into(), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was not handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness.event_handler.handle_get_count.lock().unwrap(); + *handled_count == concurrency_limit as u32 + 1 + }, + Some(1000), + None, + ) + .await; + assert!(is_handled.is_err()); + + // GetLinksReq is limited + let msg = WireMessage::GetLinksReq { + msg_id: 2, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + options: GetLinksOptions {}, + link_key: WireLinkKey { + base: ActionHash::from_raw_32(vec![2; 32]).into(), + type_query: LinkTypeFilter::Types(Vec::new()), + tag: None, + after: None, + before: None, + author: None, + }, + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was not handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness.event_handler.handle_get_links_count.lock().unwrap(); + *handled_count == 1 + }, + Some(1000), + None, + ) + .await; + assert!(is_handled.is_err()); + + // CountLinksReq is limited + let msg = WireMessage::CountLinksReq { + msg_id: 3, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + query: WireLinkQuery { + base: ActionHash::from_raw_32(vec![2; 32]).into(), + link_type: LinkTypeFilter::Types(Vec::new()), + tag_prefix: None, + before: None, + after: None, + author: None, + }, + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was not handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness + .event_handler + .handle_count_links_count + .lock() + .unwrap(); + *handled_count == 1 + }, + Some(1000), + None, + ) + .await; + assert!(is_handled.is_err()); + + // GetAgentActivityReq is limited + let msg = WireMessage::GetAgentActivityReq { + msg_id: 4, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + agent: AgentPubKey::from_raw_32(vec![2; 32]), + query: ChainQueryFilter::new(), + options: GetActivityOptions { + include_valid_activity: true, + include_rejected_activity: true, + include_warrants: true, + include_full_records: true, + }, + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was not handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness + .event_handler + .handle_get_agent_activity_count + .lock() + .unwrap(); + *handled_count == 1 + }, + Some(1000), + None, + ) + .await; + assert!(is_handled.is_err()); + + // MustGetAgentActivityReq is limited + let msg = WireMessage::MustGetAgentActivityReq { + msg_id: 5, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + agent: AgentPubKey::from_raw_32(vec![2; 32]), + filter: ChainFilter::new(ActionHash::from_raw_32(vec![3; 32])), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was not handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness + .event_handler + .handle_must_get_agent_activity_count + .lock() + .unwrap(); + *handled_count == 1 + }, + Some(1000), + None, + ) + .await; + assert!(is_handled.is_err()); + } + + #[tokio::test(flavor = "multi_thread")] + async fn other_wire_messages_are_not_concurrency_limited() { + let dna_hash = DnaHash::from_raw_32(vec![0; 32]); + let space_id = dna_hash.to_k2_space(); + let from_peer = kitsune2_api::Url::from_str("ws://test:80/1").unwrap(); + + let concurrency_limit = 2; + let harness = TestP2pActorHarness::new(concurrency_limit).await; + + // Initially all permits should be available + assert_eq!( + harness + .actor + .incoming_request_concurrency_limit_semaphore + .available_permits(), + concurrency_limit as usize + ); + + // Receive concurrency-limited messages up to limit + for i in 0..concurrency_limit { + let msg_data = create_encode_wire_message_get_req(i as u64); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + } + + // ErrorRes is not limited + let msg = WireMessage::ErrorRes { + msg_id: 1, + error: "test error".to_string(), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + + let msg_receiver = harness.register_pending_message_response_handler(1); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + assert!(msg_receiver.await.is_ok()); + + // CallRemoteRes is not limited + let msg = WireMessage::CallRemoteRes { + msg_id: 2, + response: SerializedBytes::try_from(()).unwrap(), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + + let msg_receiver = harness.register_pending_message_response_handler(2); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + assert!(msg_receiver.await.is_ok()); + + // GetRes is not limited + let msg = WireMessage::GetRes { + msg_id: 3, + response: WireOps::Record(WireRecordOps::new()), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + + let msg_receiver = harness.register_pending_message_response_handler(3); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + assert!(msg_receiver.await.is_ok()); + + // GetLinksRes is not limited + let msg = WireMessage::GetLinksRes { + msg_id: 4, + response: WireLinkOps::default(), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + + let msg_receiver = harness.register_pending_message_response_handler(4); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + assert!(msg_receiver.await.is_ok()); + + // CountLinksRes is not limited + let msg = WireMessage::CountLinksRes { + msg_id: 5, + response: CountLinksResponse::new(Vec::new()), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + + let msg_receiver = harness.register_pending_message_response_handler(5); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + assert!(msg_receiver.await.is_ok()); + + // GetAgentActivityRes is not limited + let msg = WireMessage::GetAgentActivityRes { + msg_id: 6, + response: AgentActivityResponse { + agent: AgentPubKey::from_raw_32(vec![1; 32]), + valid_activity: ChainItems::NotRequested, + rejected_activity: ChainItems::NotRequested, + status: ChainStatus::Valid(ChainHead { + action_seq: 0, + hash: ActionHash::from_raw_32(vec![2; 32]), + }), + highest_observed: None, + warrants: Vec::new(), + }, + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + + let msg_receiver = harness.register_pending_message_response_handler(6); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + assert!(msg_receiver.await.is_ok()); + + // MustGetAgentActivityRes is not limited + let msg = WireMessage::MustGetAgentActivityRes { + msg_id: 7, + response: MustGetAgentActivityResponse::EmptyRange, + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + + let msg_receiver = harness.register_pending_message_response_handler(7); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + assert!(msg_receiver.await.is_ok()); + + // SendValidationReceiptsRes is not limited + let msg = WireMessage::SendValidationReceiptsRes { msg_id: 8 }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + + let msg_receiver = harness.register_pending_message_response_handler(8); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + assert!(msg_receiver.await.is_ok()); + + // CallRemoteReq is not limited + let msg = WireMessage::CallRemoteReq { + msg_id: 9, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + zome_call_params_serialized: ExternIO::encode(()).unwrap(), + signature: Signature([0; 64]), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness + .event_handler + .handle_call_remote_count + .lock() + .unwrap(); + *handled_count == 1 + }, + None, + None, + ) + .await; + assert!(is_handled.is_ok()); + + // SendValidationReceiptsReq is not limited + let msg = WireMessage::SendValidationReceiptsReq { + msg_id: 10, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + receipts: Vec::new().into(), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness + .event_handler + .handle_validation_receipts_received_count + .lock() + .unwrap(); + *handled_count == 1 + }, + None, + None, + ) + .await; + assert!(is_handled.is_ok()); + + // RemoteSignalEvt is not limited + let msg = WireMessage::RemoteSignalEvt { + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + zome_call_params_serialized: ExternIO::encode(()).unwrap(), + signature: Signature([0; 64]), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness + .event_handler + .handle_call_remote_count + .lock() + .unwrap(); + *handled_count == 2 // Should be 2 now (CallRemoteReq + RemoteSignalEvt) + }, + None, + None, + ) + .await; + assert!(is_handled.is_ok()); + + // PublishCountersignEvt is not limited + let msg = WireMessage::PublishCountersignEvt { + op: holochain_types::dht_op::ChainOp::RegisterAgentActivity( + Signature([0; 64]), + Action::InitZomesComplete(InitZomesComplete { + author: AgentPubKey::from_raw_32(vec![1; 32]), + timestamp: holochain_types::prelude::Timestamp::now(), + action_seq: 0, + prev_action: ActionHash::from_raw_32(vec![2; 32]), + }), + ), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness + .event_handler + .handle_publish_countersign_count + .lock() + .unwrap(); + *handled_count == 1 // Should be 2 now (CallRemoteReq + RemoteSignalEvt) + }, + None, + None, + ) + .await; + assert!(is_handled.is_ok()); + + // CountersigningSessionNegotiationEvt is not limited + let msg = WireMessage::CountersigningSessionNegotiationEvt { + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + message: CountersigningSessionNegotiationMessage::AuthorityResponse(Vec::new()), + }; + let msg_data = WireMessage::encode_batch(&[&msg]).unwrap(); + harness + .recv_notify(from_peer.clone(), space_id.clone(), msg_data) + .unwrap(); + + // Message was handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness + .event_handler + .handle_countersigning_session_negotiation_count + .lock() + .unwrap(); + *handled_count == 1 // Should be 2 now (CallRemoteReq + RemoteSignalEvt) + }, + None, + None, + ) + .await; + assert!(is_handled.is_ok()); + } + + #[tokio::test(flavor = "multi_thread")] + async fn batch_wire_messages_apply_concurrency_limit_only_to_authority_requests() { + let dna_hash = DnaHash::from_raw_32(vec![0; 32]); + let space_id = dna_hash.to_k2_space(); + let from_peer = kitsune2_api::Url::from_str("ws://test:80/1").unwrap(); + + let concurrency_limit = 2; + let harness = TestP2pActorHarness::new(concurrency_limit).await; + + // Initially all permits should be available + assert_eq!( + harness + .actor + .incoming_request_concurrency_limit_semaphore + .available_permits(), + concurrency_limit as usize + ); + + // The batch of messages contains concurrency-limited messages up to limit + let mut wire_messages_batch = vec![]; + + for i in 0..concurrency_limit { + let msg = WireMessage::GetReq { + msg_id: i as u64, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + dht_hash: ActionHash::from_raw_32(vec![2; 32]).into(), + }; + wire_messages_batch.push(msg); + } + + // The batch of messages contains an ErrorRes which is is not limited + let msg_id = 888; + let unlimited_message_reciever = harness.register_pending_message_response_handler(msg_id); + let msg = WireMessage::ErrorRes { + msg_id, + error: "test error".to_string(), + }; + wire_messages_batch.push(msg); + + // The batch of messages contains an additional concurrency-limited message + let msg = WireMessage::GetReq { + msg_id: 999, + to_agent: AgentPubKey::from_raw_32(vec![1; 32]), + dht_hash: ActionHash::from_raw_32(vec![2; 32]).into(), + }; + wire_messages_batch.push(msg); + + // The batch is received in one payload + let wire_message_batch: Vec<&WireMessage> = wire_messages_batch.iter().collect(); + let wire_message_batch_slice: &[&WireMessage] = &wire_message_batch; + let wire_messages_batch_bytes = + WireMessage::encode_batch(wire_message_batch_slice).unwrap(); + harness + .recv_notify( + from_peer.clone(), + space_id.clone(), + wire_messages_batch_bytes, + ) + .unwrap(); + + // The concurrency-limited messages within the limit are handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness.event_handler.handle_get_count.lock().unwrap(); + *handled_count == concurrency_limit as u32 + }, + None, + None, + ) + .await; + assert!(is_handled.is_ok()); + + // The additional concurrency-limited message is not handled + let is_handled = retry_fn_until_timeout( + async || { + let handled_count = harness.event_handler.handle_get_count.lock().unwrap(); + *handled_count == concurrency_limit as u32 + 1 + }, + None, + None, + ) + .await; + assert!(is_handled.is_err()); + + // The non limited message is handled + assert!(unlimited_message_reciever.await.is_ok()); + } } diff --git a/crates/holochain_p2p/src/types/actor.rs b/crates/holochain_p2p/src/types/actor.rs index dca9471b25..dad05c4c76 100644 --- a/crates/holochain_p2p/src/types/actor.rs +++ b/crates/holochain_p2p/src/types/actor.rs @@ -2,106 +2,79 @@ #![allow(clippy::too_many_arguments)] use crate::*; -use holochain_types::activity::AgentActivityResponse; use holochain_types::prelude::ValidationReceiptBundle; -use kitsune2_api::{DhtArc, SpaceId, StoredOp}; +use holochain_types::{ + activity::AgentActivityResponse, cell_config_overrides::CellConfigOverrides, +}; +use kitsune2_api::{SpaceId, StoredOp}; +use std::any::Any; use std::collections::HashMap; -/// Get options help control how the get is processed at various levels. -/// Fields tagged with `[Network]` are network-level controls. -/// Fields tagged with `[Remote]` are controls that will be forwarded to the -/// remote agent processing this `Get` request. +/// Get options used to control how data fetching over the network is performed. #[derive(Clone, Debug)] -pub struct GetOptions { - /// `[Network]` - /// How many remote nodes should we make requests of / aggregate. - /// Set to `None` for a default "best-effort". - pub remote_agent_count: Option, - - /// `[Network]` - /// Timeout to await responses for aggregation. - /// Set to `None` for a default "best-effort". - /// Note - if all requests time-out you will receive an empty result, - /// not a timeout error. +pub struct NetworkRequestOptions { + /// Make requests to this number of remote agents in parallel. + /// + /// When `GetOptions::as_race` is `true`, the first response received will be returned. + /// When `GetOptions::as_race` is `false`, responses will be aggregated until the timeout is + /// reached. This is not implemented. + /// + /// Defaults to `3`. + pub remote_agent_count: u8, + + /// Timeout within which responses must arrive. + /// + /// When `None` is specified, the conductor settings will be used to determine the timeout. pub timeout_ms: Option, - /// `[Network]` - /// We are interested in speed. If `true` and we have any results - /// when `race_timeout_ms` is expired, those results will be returned. - /// After `race_timeout_ms` and before `timeout_ms` the first result - /// received will be returned. + /// Whether to treat the get as a race, returning the first response received. + /// + /// Defaults to `true`. pub as_race: bool, - - /// `[Network]` - /// See `as_race` for details. - /// Set to `None` for a default "best-effort" race. - pub race_timeout_ms: Option, } -impl Default for GetOptions { +impl Default for NetworkRequestOptions { fn default() -> Self { Self { - remote_agent_count: None, + remote_agent_count: 3, timeout_ms: None, as_race: true, - race_timeout_ms: None, } } } -impl GetOptions { +impl NetworkRequestOptions { /// Using defaults is dangerous in a must_get as it can undermine determinism. /// We want refactors to explicitly consider this. pub fn must_get_options() -> Self { Self { - remote_agent_count: None, + remote_agent_count: 1, timeout_ms: None, as_race: true, - race_timeout_ms: None, } } } -impl From for GetOptions { - fn from(_: holochain_zome_types::entry::GetOptions) -> Self { - Self::default() - } -} - -/// Get links from the DHT. -/// Fields tagged with `[Network]` are network-level controls. -/// Fields tagged with `[Remote]` are controls that will be forwarded to the -/// remote agent processing this `GetLinks` request. +/// Options for getting links from the network. #[derive(Debug, Clone, Default)] -pub struct GetLinksOptions { - /// `[Network]` - /// Timeout to await responses for aggregation. - /// Set to `None` for a default "best-effort". - /// Note - if all requests time-out you will receive an empty result, - /// not a timeout error. - pub timeout_ms: Option, +pub struct GetLinksRequestOptions { + /// The base network options to use for this call. + pub network_req_options: NetworkRequestOptions, + /// Whether to fetch links from the network or return only /// locally available links. Defaults to fetching links from network. pub get_options: holochain_zome_types::entry::GetOptions, } /// Get agent activity from the DHT. +/// /// Fields tagged with `[Network]` are network-level controls. /// Fields tagged with `[Remote]` are controls that will be forwarded to the /// remote agent processing this `GetLinks` request. #[derive(Debug, Clone)] pub struct GetActivityOptions { - /// `[Network]` - /// Timeout to await responses for aggregation. - /// Set to `None` for a default "best-effort". - /// Note - if all requests time-out you will receive an empty result, - /// not a timeout error. - pub timeout_ms: Option, - /// Number of times to retry getting records in parallel. - /// For a small dht a large parallel get can overwhelm a single - /// agent and it can be worth retrying the records that didn't - /// get found. - pub retry_gets: u8, + /// The base network options to use for this call. + pub network_req_options: NetworkRequestOptions, /// `[Remote]` /// Include the all valid activity actions in the response. /// If this is false the call becomes a lightweight response with @@ -116,14 +89,13 @@ pub struct GetActivityOptions { /// Include the full signed records in the response, instead of just the hashes. pub include_full_records: bool, /// Configure how the data should be fetched. - pub get_options: holochain_zome_types::entry::GetOptions, + pub get_options: GetOptions, } impl Default for GetActivityOptions { fn default() -> Self { Self { - timeout_ms: None, - retry_gets: 0, + network_req_options: NetworkRequestOptions::default(), include_valid_activity: true, include_rejected_activity: false, include_warrants: true, @@ -135,19 +107,19 @@ impl Default for GetActivityOptions { /// Trait defining the main holochain_p2p interface. #[cfg_attr(feature = "test_utils", automock)] -pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { +pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug + Any { /// Test access to underlying kitsune instance. #[cfg(feature = "test_utils")] fn test_kitsune(&self) -> &kitsune2_api::DynKitsune; /// Test utility to force local agents to report full storage arcs. #[cfg(feature = "test_utils")] - fn test_set_full_arcs(&self, space: kitsune2_api::SpaceId) -> BoxFut<'_, ()> { + fn test_set_full_arcs(&self, space: SpaceId) -> BoxFut<'_, ()> { Box::pin(async move { let mut updated_agents = Vec::new(); for agent in self .test_kitsune() - .space(space.clone()) + .space(space.clone(), None) .await .unwrap() .local_agent_store() @@ -169,7 +141,7 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { async move { let all_agents_in_peer_store = self .test_kitsune() - .space(space.clone()) + .space_if_exists(space.clone()) .await .unwrap() .peer_store() @@ -178,16 +150,17 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { .unwrap(); updated_agents.into_iter().all(|updated_agent| { all_agents_in_peer_store.iter().any(|a| { - a.agent == *updated_agent.agent() && a.storage_arc == DhtArc::FULL + a.agent == *updated_agent.agent() + && a.storage_arc == kitsune2_api::DhtArc::FULL }) }) } }, - None, + Some(20_000), None, ) .await - .unwrap(); + .expect("peer store not updated after declaring full arc"); }) } @@ -210,6 +183,7 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { dna_hash: DnaHash, agent_pub_key: AgentPubKey, maybe_agent_info: Option, + config_override: Option, ) -> BoxFut<'_, HolochainP2pResult<()>>; /// If a cell is disabled, we'll need to \"leave\" the network module as well. @@ -250,7 +224,7 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { fn publish( &self, dna_hash: DnaHash, - basis_hash: holo_hash::OpBasis, + basis_hash: OpBasis, source: AgentPubKey, op_hash_list: Vec, timeout_ms: Option, @@ -261,7 +235,7 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { fn publish_countersign( &self, dna_hash: DnaHash, - basis_hash: holo_hash::OpBasis, + basis_hash: OpBasis, op: ChainOp, ) -> BoxFut<'_, HolochainP2pResult<()>>; @@ -269,7 +243,8 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { fn get( &self, dna_hash: DnaHash, - dht_hash: holo_hash::AnyDhtHash, + dht_hash: AnyDhtHash, + options: NetworkRequestOptions, ) -> BoxFut<'_, HolochainP2pResult>>; /// Get links from the DHT. @@ -277,7 +252,7 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { &self, dna_hash: DnaHash, link_key: WireLinkKey, - options: GetLinksOptions, + options: GetLinksRequestOptions, ) -> BoxFut<'_, HolochainP2pResult>>; /// Get a count of links from the DHT. @@ -285,6 +260,7 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { &self, dna_hash: DnaHash, query: WireLinkQuery, + options: NetworkRequestOptions, ) -> BoxFut<'_, HolochainP2pResult>; /// Get agent activity from the DHT. @@ -302,6 +278,7 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { dna_hash: DnaHash, author: AgentPubKey, filter: holochain_zome_types::chain::ChainFilter, + options: NetworkRequestOptions, ) -> BoxFut<'_, HolochainP2pResult>>; /// Send a validation receipt to a remote node. @@ -351,6 +328,14 @@ pub trait HcP2p: 'static + Send + Sync + std::fmt::Debug { /// Query if an agent is blocked. fn is_blocked(&self, target: BlockTargetId) -> BoxFut<'_, HolochainP2pResult>; + /// Get the local and reflexive socket addresses discovered by the transport. + /// Returns addresses that can be used as WebRTC ICE candidates. + /// An empty list may mean either that no addresses have been discovered yet + /// or that the underlying transport does not expose socket addresses. + fn local_socket_addrs(&self) -> BoxFut<'_, HolochainP2pResult>> { + Box::pin(async { Ok(Vec::new()) }) + } + /// Get the conductor database getter. fn conductor_db_getter(&self) -> crate::GetDbConductor; }