diff --git a/Cargo.lock b/Cargo.lock index 54722dcee..a91c4e777 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "crypto-common 0.1.6", + "crypto-common 0.1.7", "generic-array", ] @@ -80,9 +80,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -347,22 +347,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -628,8 +628,8 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", + "asn1-rs-derive 0.4.0", + "asn1-rs-impl 0.1.0", "displaydoc", "nom", "num-traits", @@ -638,6 +638,22 @@ dependencies = [ "time", ] +[[package]] +name = "asn1-rs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" +dependencies = [ + "asn1-rs-derive 0.6.0", + "asn1-rs-impl 0.2.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 2.0.18", + "time", +] + [[package]] name = "asn1-rs-derive" version = "0.4.0" @@ -650,6 +666,18 @@ dependencies = [ "synstructure 0.12.6", ] +[[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.114", + "synstructure 0.13.2", +] + [[package]] name = "asn1-rs-impl" version = "0.1.0" @@ -661,6 +689,17 @@ dependencies = [ "syn 1.0.109", ] +[[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.114", +] + [[package]] name = "assert_matches" version = "1.5.0" @@ -693,22 +732,21 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.32" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" +checksum = "d10e4f991a553474232bc0a31799f6d24b034a84c0971d80d2e2f78b2e576e40" dependencies = [ "compression-codecs", "compression-core", - "futures-core", "pin-project-lite", "tokio", ] [[package]] name = "async-lock" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener 5.4.1", "event-listener-strategy", @@ -734,7 +772,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -745,7 +783,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -790,7 +828,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" dependencies = [ "base64 0.22.1", - "http 1.3.1", + "http 1.4.0", "log", "url", ] @@ -812,11 +850,78 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "axum-macros", + "bytes", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.8.1", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower 0.5.3", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "backon" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" dependencies = [ "fastrand", "gloo-timers", @@ -874,9 +979,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 = "bcrypt" @@ -886,7 +991,7 @@ checksum = "2b1866ecef4f2d06a0bb77880015fdf2b89e25a1c2e5addacb87e459c86dc67e" dependencies = [ "base64 0.22.1", "blowfish", - "getrandom 0.2.16", + "getrandom 0.2.17", "subtle", "zeroize", ] @@ -914,11 +1019,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -944,15 +1049,16 @@ dependencies = [ [[package]] name = "blake3" -version = "1.8.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", - "constant_time_eq 0.3.1", + "constant_time_eq 0.4.2", + "cpufeatures", "digest 0.10.7", ] @@ -976,9 +1082,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.11.0-rc.5" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9ef36a6fcdb072aa548f3da057640ec10859eb4e91ddf526ee648d50c76a949" +checksum = "96eb4cdd6cf1b31d671e9efe75c5d1ec614776856cefbe109ca373554a6d514f" dependencies = [ "hybrid-array", ] @@ -1014,9 +1120,9 @@ dependencies = [ "futures-core", "futures-util", "hex", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-named-pipe", "hyper-util", "hyperlocal", @@ -1027,9 +1133,9 @@ dependencies = [ "serde_json", "serde_repr", "serde_urlencoded", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tower-service", "url", "winapi 0.3.9", @@ -1058,11 +1164,11 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" dependencies = [ - "borsh-derive 1.5.7", + "borsh-derive 1.6.0", "cfg_aliases", ] @@ -1081,15 +1187,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" +checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c" dependencies = [ "once_cell", "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -1167,9 +1273,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "serde", @@ -1177,9 +1283,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bv" @@ -1193,9 +1299,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" dependencies = [ "bytemuck_derive", ] @@ -1208,7 +1314,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -1219,9 +1325,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" dependencies = [ "serde", ] @@ -1254,23 +1360,22 @@ checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" [[package]] name = "caps" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" +checksum = "fd1ddba47aba30b6a889298ad0109c3b8dcb0e8fc993b459daa7067d46f865e0" dependencies = [ "libc", - "thiserror 1.0.69", ] [[package]] name = "carapace_spec_clap" -version = "1.1.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1b5afcef06ac1bd8326dd43ff932e7e8e9d7fb84c5e6ae5d318c27c54eb1c23" +checksum = "287349e1e617a16a3a3dfbdf42ec5578ef47d4a513a32304b5495aaf1a00c643" dependencies = [ "clap", "clap_complete", - "indexmap 2.11.4", + "indexmap 2.13.0", "serde", "serde_yaml_ng", ] @@ -1302,9 +1407,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.41" +version = "1.2.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" dependencies = [ "find-msvc-tools", "jobserver", @@ -1338,21 +1443,21 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[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", "num-traits", "serde", "wasm-bindgen", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -1370,15 +1475,15 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common 0.1.6", + "crypto-common 0.1.7", "inout", ] [[package]] name = "clap" -version = "4.5.49" +version = "4.5.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +checksum = "a75ca66430e33a14957acc24c5077b503e7d374151b2b4b3a10c83b4ceb4be0e" dependencies = [ "clap_builder", "clap_derive", @@ -1410,9 +1515,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.49" +version = "4.5.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +checksum = "793207c7fa6300a0608d1080b858e5fdbe713cdc1c8db9fb17777d8a13e63df0" dependencies = [ "anstream", "anstyle", @@ -1422,9 +1527,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.59" +version = "4.5.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" +checksum = "430b4dc2b5e3861848de79627b2bedc9f3342c7da5173a14eaa5d0f8dc18ae5d" dependencies = [ "clap", ] @@ -1441,9 +1546,9 @@ dependencies = [ [[package]] name = "clap_complete_nushell" -version = "4.5.9" +version = "4.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "811159f339691baacdf7d534df2946b9d217014081099e23d31d887d99521e70" +checksum = "685bc86fd34b7467e0532a4f8435ab107960d69a243785ef0275e571b35b641a" dependencies = [ "clap", "clap_complete", @@ -1451,27 +1556,27 @@ 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.106", + "syn 2.0.114", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "clap_mangen" -version = "0.2.30" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "263c8214a8e0cb8129f3c62036c50e9c6e15c7bd364c42e0437c492b9293f778" +checksum = "439ea63a92086df93893164221ad4f24142086d535b3a0957b9b9bea2dc86301" dependencies = [ "clap", "roff", @@ -1483,7 +1588,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -1537,9 +1642,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.31" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +checksum = "00828ba6fd27b45a448e57dbfe84f1029d4c9f26b368157e9a448a5f49a2ec2a" dependencies = [ "brotli 8.0.2", "compression-core", @@ -1551,9 +1656,9 @@ dependencies = [ [[package]] name = "compression-core" -version = "0.4.29" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" +checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" [[package]] name = "concurrent-queue" @@ -1605,9 +1710,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const-oid" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dabb6555f92fb9ee4140454eb5dcd14c7960e1225c6d1a6cc361f032947713e" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "const-random" @@ -1624,7 +1729,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "once_cell", "tiny-keccak", ] @@ -1663,9 +1768,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "convert_case" @@ -1812,7 +1917,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crossterm_winapi", "futures-core", "mio", @@ -1840,9 +1945,9 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -1919,7 +2024,7 @@ dependencies = [ "curve25519-dalek-derive", "digest 0.11.0-rc.3", "fiat-crypto 0.3.0", - "rand_core 0.9.3", + "rand_core 0.9.5", "rustc_version", "serde", "subtle", @@ -1934,7 +2039,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -1957,6 +2062,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" @@ -1968,7 +2083,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -1982,7 +2097,20 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.114", +] + +[[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.114", ] [[package]] @@ -1993,7 +2121,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2004,7 +2132,18 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.106", + "syn 2.0.114", +] + +[[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.114", ] [[package]] @@ -2023,9 +2162,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 = "der" @@ -2044,7 +2183,7 @@ version = "0.8.0-rc.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02c1d73e9668ea6b6a28172aa55f3ebec38507131ce179051c8033b5c6037653" dependencies = [ - "const-oid 0.10.1", + "const-oid 0.10.2", "pem-rfc7468 1.0.0", "zeroize", ] @@ -2055,7 +2194,21 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint 0.4.6", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" +dependencies = [ + "asn1-rs 0.7.1", "displaydoc", "nom", "num-bigint 0.4.6", @@ -2065,9 +2218,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", "serde_core", @@ -2108,7 +2261,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2118,7 +2271,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2140,7 +2293,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.106", + "syn 2.0.114", "unicode-xid", ] @@ -2178,7 +2331,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "crypto-common 0.1.6", + "crypto-common 0.1.7", "subtle", ] @@ -2188,7 +2341,7 @@ version = "0.11.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dac89f8a64533a9b0eaa73a68e424db0fb1fd6271c74cc0125336a05f090568d" dependencies = [ - "block-buffer 0.11.0-rc.5", + "block-buffer 0.11.0", "crypto-common 0.2.0-rc.4", ] @@ -2249,7 +2402,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "libc", "objc2", @@ -2263,7 +2416,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2295,14 +2448,14 @@ checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] name = "document-features" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] @@ -2348,13 +2501,13 @@ dependencies = [ [[package]] name = "ed25519" -version = "3.0.0-rc.1" +version = "3.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef49c0b20c0ad088893ad2a790a29c06a012b3f05bcfc66661fd22a94b32129" +checksum = "3d058004dae83c9cf58f3d81612d0296bbf0a52dd7d7b6afa30ab7228bb6119f" dependencies = [ "pkcs8 0.11.0-rc.10", "serde", - "signature 3.0.0-rc.4", + "signature 3.0.0-rc.10", ] [[package]] @@ -2378,11 +2531,11 @@ 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.1", - "rand_core 0.9.3", + "ed25519 3.0.0-rc.3", + "rand_core 0.9.5", "serde", "sha2 0.11.0-rc.2", - "signature 3.0.0-rc.4", + "signature 3.0.0-rc.10", "subtle", "zeroize", ] @@ -2453,7 +2606,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2464,7 +2617,7 @@ checksum = "3ed8956bd5c1f0415200516e78ff07ec9e16415ade83c056c230d7b7ea0d55b7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2484,7 +2637,7 @@ checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2497,7 +2650,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2611,14 +2764,14 @@ dependencies = [ [[package]] name = "fastbloom" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18c1ddb9231d8554c2d6bdf4cfaabf0c59251658c68b6c95cd52dd0c513a912a" +checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" dependencies = [ "getrandom 0.3.4", "libm", "rand 0.9.2", - "siphasher 1.0.1", + "siphasher 1.0.2", ] [[package]] @@ -2656,21 +2809,20 @@ 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.4" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "five8_const" @@ -2705,9 +2857,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" dependencies = [ "crc32fast", "miniz_oxide", @@ -2764,7 +2916,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c7e611d49285d4c4b2e1727b72cf05353558885cc5252f93707b845dfcaf3d3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "core-foundation 0.9.4", "core-graphics", @@ -2810,7 +2962,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -2897,16 +3049,14 @@ dependencies = [ [[package]] name = "futures-concurrency" -version = "7.6.3" +version = "7.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb68017df91f2e477ed4bea586c59eaecaa47ed885a770d0444e21e62572cd2" +checksum = "175cd8cca9e1d45b87f18ffa75088f2099e3c4fe5e2f83e42de112560bea8ea6" dependencies = [ "fixedbitset", - "futures-buffered", "futures-core", "futures-lite", "pin-project", - "slab", "smallvec", ] @@ -2954,7 +3104,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -3041,23 +3191,24 @@ dependencies = [ [[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 0.61.3", + "windows-link", + "windows-result 0.4.1", ] [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "serde", "typenum", @@ -3111,9 +3262,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -3152,7 +3303,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "libgit2-sys", "log", @@ -3167,9 +3318,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" dependencies = [ "aho-corasick", "bstr", @@ -3203,7 +3354,7 @@ dependencies = [ "google-cloud-token", "home", "jsonwebtoken", - "reqwest 0.12.24", + "reqwest 0.12.28", "serde", "serde_json", "thiserror 1.0.69", @@ -3219,7 +3370,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d901aeb453fd80e51d64df4ee005014f6cf39f2d736dd64f7239c132d9d39a6a" dependencies = [ - "reqwest 0.12.24", + "reqwest 0.12.28", "thiserror 1.0.69", "tokio", ] @@ -3244,7 +3395,7 @@ dependencies = [ "percent-encoding", "pkcs8 0.10.2", "regex", - "reqwest 0.12.24", + "reqwest 0.12.28", "reqwest-middleware 0.4.2", "ring", "serde", @@ -3356,29 +3507,29 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.4", + "indexmap 2.13.0", "slab", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", ] [[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", - "indexmap 2.11.4", + "http 1.4.0", + "indexmap 2.13.0", "slab", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", ] @@ -3426,9 +3577,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", @@ -3437,9 +3588,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", @@ -3535,14 +3686,14 @@ dependencies = [ "dirs 5.0.1", "futures", "hex", - "http 1.3.1", + "http 1.4.0", "indicatif", "lazy_static", "log", "num_cpus", "rand 0.8.5", "regex", - "reqwest 0.12.24", + "reqwest 0.12.28", "serde", "serde_json", "sha1", @@ -3567,15 +3718,15 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "h2 0.4.12", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "idna", "ipnet", "once_cell", "rand 0.9.2", "ring", - "rustls 0.23.35", - "thiserror 2.0.17", + "rustls 0.23.36", + "thiserror 2.0.18", "tinyvec", "tokio", "tokio-rustls 0.26.4", @@ -3598,9 +3749,9 @@ dependencies = [ "parking_lot", "rand 0.9.2", "resolv-conf", - "rustls 0.23.35", + "rustls 0.23.36", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-rustls 0.26.4", "tracing", @@ -3644,11 +3795,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3664,12 +3815,11 @@ dependencies = [ [[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", ] @@ -3691,7 +3841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http 1.4.0", ] [[package]] @@ -3702,7 +3852,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "pin-project-lite", ] @@ -3737,9 +3887,9 @@ checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hybrid-array" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f471e0a81b2f90ffc0cb2f951ae04da57de8baa46fa99112b062a5173a5088d0" +checksum = "b41fb3dc24fe72c2e3a4685eed55917c2fb228851257f4a8f2d985da9443c3e5" dependencies = [ "typenum", ] @@ -3770,16 +3920,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "h2 0.4.12", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "httparse", "httpdate", @@ -3798,7 +3948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" dependencies = [ "hex", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "pin-project-lite", "tokio", @@ -3826,16 +3976,16 @@ version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http 1.3.1", - "hyper 1.7.0", + "http 1.4.0", + "hyper 1.8.1", "hyper-util", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-native-certs", "rustls-pki-types", "tokio", "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 1.0.3", + "webpki-roots 1.0.5", ] [[package]] @@ -3846,7 +3996,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "native-tls", "tokio", @@ -3856,24 +4006,23 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", - "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", - "hyper 1.7.0", + "hyper 1.8.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.1", - "system-configuration 0.6.1", + "socket2 0.6.2", + "system-configuration 0.7.0", "tokio", "tower-service", "tracing", @@ -3888,7 +4037,7 @@ checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7" dependencies = [ "hex", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "pin-project-lite", "tokio", @@ -3897,9 +4046,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3921,9 +4070,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -3934,9 +4083,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -3947,11 +4096,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -3962,42 +4110,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -4054,9 +4198,9 @@ dependencies = [ "attohttpc", "bytes", "futures", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "log", "rand 0.9.2", @@ -4143,12 +4287,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -4168,9 +4312,12 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] [[package]] name = "inout" @@ -4192,15 +4339,15 @@ dependencies = [ [[package]] name = "instability" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" +checksum = "357b7205c6cd18dd2c86ed312d1e70add149aea98e7ef72b9fdf0270e555c11d" dependencies = [ - "darling 0.20.11", + "darling 0.23.0", "indoc", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -4229,9 +4376,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -4252,7 +4399,7 @@ dependencies = [ "futures-util", "getrandom 0.3.4", "hickory-resolver", - "http 1.3.1", + "http 1.4.0", "igd-next", "iroh-base", "iroh-metrics 0.38.1", @@ -4271,11 +4418,11 @@ dependencies = [ "pkcs8 0.11.0-rc.10", "portmapper", "rand 0.9.2", - "reqwest 0.12.24", + "reqwest 0.12.28", "rustc-hash", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", - "rustls-webpki 0.103.7", + "rustls-webpki 0.103.9", "serde", "smallvec", "strum 0.27.2", @@ -4283,11 +4430,11 @@ dependencies = [ "time", "tokio", "tokio-stream", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", "url", "wasm-bindgen-futures", - "webpki-roots 1.0.3", + "webpki-roots 1.0.5", ] [[package]] @@ -4301,7 +4448,7 @@ dependencies = [ "derive_more", "ed25519-dalek 3.0.0-pre.1", "n0-error", - "rand_core 0.9.3", + "rand_core 0.9.5", "serde", "url", "zeroize", @@ -4362,7 +4509,7 @@ dependencies = [ "futures-lite", "futures-util", "hex", - "indexmap 2.11.4", + "indexmap 2.13.0", "iroh", "iroh-base", "iroh-metrics 0.38.1", @@ -4373,7 +4520,7 @@ dependencies = [ "rand 0.9.2", "serde", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", ] @@ -4410,7 +4557,7 @@ version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5828152c482cf9d95f3039848ac2be5e6e47c41dbf3695a453e6c02739c50d2c" dependencies = [ - "iroh-metrics-derive 0.4.0", + "iroh-metrics-derive 0.4.1", "itoa", "n0-error", "postcard", @@ -4428,19 +4575,19 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] name = "iroh-metrics-derive" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e12bd0763fd16062f5cc5e8db15dd52d26e75a8af4c7fb57ccee3589b344b8" +checksum = "cab063c2bfd6c3d5a33a913d4fdb5252f140db29ec67c704f20f3da7e8f92dbf" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -4469,7 +4616,7 @@ dependencies = [ "serde", "serde_json", "strum 0.27.2", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "tracing-subscriber", @@ -4499,9 +4646,9 @@ dependencies = [ "iroh-quinn-udp 0.8.0", "pin-project-lite", "rustc-hash", - "rustls 0.23.35", - "socket2 0.6.1", - "thiserror 2.0.17", + "rustls 0.23.36", + "socket2 0.5.10", + "thiserror 2.0.18", "tokio", "tokio-stream", "tracing", @@ -4524,12 +4671,12 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "rustls-platform-verifier", "slab", "sorted-index-buffer", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -4543,7 +4690,7 @@ checksum = "a91fe9ec3db6615d7ab1b303717f3b98fc40b96955a4ea25b113b1b879f7481f" dependencies = [ "cfg_aliases", "libc", - "socket2 0.6.1", + "socket2 0.5.10", "tracing", "windows-sys 0.61.2", ] @@ -4556,7 +4703,7 @@ checksum = "f981dadd5a072a9e0efcd24bdcc388e570073f7e51b33505ceb1ef4668c80c86" dependencies = [ "cfg_aliases", "libc", - "socket2 0.6.1", + "socket2 0.5.10", "tracing", "windows-sys 0.61.2", ] @@ -4574,9 +4721,9 @@ dependencies = [ "derive_more", "getrandom 0.3.4", "hickory-resolver", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "iroh-base", "iroh-metrics 0.38.1", @@ -4590,20 +4737,20 @@ dependencies = [ "pkarr", "postcard", "rand 0.9.2", - "reqwest 0.12.24", - "rustls 0.23.35", + "reqwest 0.12.28", + "rustls 0.23.36", "rustls-pki-types", "serde", "serde_bytes", "strum 0.27.2", "tokio", "tokio-rustls 0.26.4", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tokio-websockets", "tracing", "url", "vergen-gitcl", - "webpki-roots 1.0.3", + "webpki-roots 1.0.5", "ws_stream_wasm", "z32", ] @@ -4636,11 +4783,11 @@ dependencies = [ "n0-future", "postcard", "rcgen", - "rustls 0.23.35", + "rustls 0.23.36", "serde", "smallvec", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", ] @@ -4652,7 +4799,7 @@ checksum = "58148196d2230183c9679431ac99b57e172000326d664e8456fa2cd27af6505a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -4681,9 +4828,9 @@ checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407" [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -4732,32 +4879,32 @@ 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 = "jiff" -version = "0.2.15" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" dependencies = [ "jiff-static", "log", "portable-atomic", "portable-atomic-util", - "serde", + "serde_core", ] [[package]] name = "jiff-static" -version = "0.2.15" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -4919,9 +5066,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libgit2-sys" @@ -4942,24 +5089,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link 0.2.1", + "windows-link", ] [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", - "redox_syscall", + "redox_syscall 0.7.0", ] [[package]] @@ -5012,9 +5159,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.22" +version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", "libc", @@ -5059,15 +5206,15 @@ dependencies = [ [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" -version = "0.4.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "lock_api" @@ -5080,9 +5227,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 = "logfire" @@ -5099,7 +5246,7 @@ dependencies = [ "opentelemetry_sdk", "rand 0.9.2", "regex", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "tracing-opentelemetry 0.29.0", "tracing-subscriber", @@ -5124,22 +5271,16 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.15.2", ] -[[package]] -name = "lru" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" - [[package]] name = "lru" version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" dependencies = [ - "hashbrown 0.16.0", + "hashbrown 0.16.1", ] [[package]] @@ -5207,6 +5348,12 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "matrixmultiply" version = "0.3.10" @@ -5236,7 +5383,7 @@ dependencies = [ "proc-macro-error 1.0.4", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -5256,9 +5403,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", "stable_deref_trait", @@ -5319,14 +5466,14 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "log", "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5379,9 +5526,9 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.11" +version = "0.12.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" +checksum = "b4ac832c50ced444ef6be0767a008b02c106a909ba79d1d830501e94b96f6b7e" dependencies = [ "crossbeam-channel", "crossbeam-epoch", @@ -5389,7 +5536,6 @@ dependencies = [ "equivalent", "parking_lot", "portable-atomic", - "rustc_version", "smallvec", "tagptr", "uuid", @@ -5414,7 +5560,7 @@ checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -5436,7 +5582,7 @@ checksum = "03755949235714b2b307e5ae89dd8c1c2531fb127d9b8b7b4adf9c876cd3ed18" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -5454,7 +5600,7 @@ dependencies = [ "pin-project", "send_wrapper", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "wasm-bindgen", "wasm-bindgen-futures", "web-time", @@ -5477,7 +5623,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] @@ -5489,7 +5635,7 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe", + "openssl-probe 0.1.6", "openssl-sys", "schannel", "security-framework 2.11.1", @@ -5521,7 +5667,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -5561,7 +5707,7 @@ version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ec2f5b6839be2a19d7fa5aab5bc444380f6311c2b693551cb80f45caaa7b5ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "log", "netlink-packet-core", @@ -5573,7 +5719,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ce3636fa715e988114552619582b530481fd5ef176a1e5c1bf024077c2c9445" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "log", "netlink-packet-core", @@ -5590,17 +5736,17 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "netlink-sys" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae" dependencies = [ "bytes", - "futures", + "futures-util", "libc", "log", "tokio", @@ -5631,10 +5777,10 @@ dependencies = [ "objc2-system-configuration", "pin-project-lite", "serde", - "socket2 0.6.1", + "socket2 0.6.2", "time", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", "web-sys", "windows 0.62.2", @@ -5667,10 +5813,10 @@ dependencies = [ "objc2-system-configuration", "pin-project-lite", "serde", - "socket2 0.6.1", + "socket2 0.6.2", "time", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", "web-sys", "windows 0.62.2", @@ -5684,7 +5830,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "libc", @@ -5721,9 +5867,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "ntapi" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +checksum = "c70f219e21142367c70c0b30c6a9e3a14d55b4d12a204d897fbec83a0363f081" dependencies = [ "winapi 0.3.9", ] @@ -5736,7 +5882,7 @@ checksum = "c50f94c405726d3e0095e89e72f75ce7f6587b94a8bd8dc8054b73f65c0fd68c" dependencies = [ "base32", "document-features", - "getrandom 0.2.16", + "getrandom 0.2.17", "httpdate", "js-sys", "once_cell", @@ -5822,9 +5968,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-derive" @@ -5834,7 +5980,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -5902,9 +6048,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -5912,14 +6058,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -5943,7 +6089,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d5c6c0ef9702176a570f06ad94f3198bc29c524c8b498f1b9346e1b1bdcbb3a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libloading", "nvml-wrapper-sys", "static_assertions", @@ -5975,7 +6121,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "dispatch2", "libc", @@ -5994,7 +6140,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2", "objc2-core-foundation", ] @@ -6005,7 +6151,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "libc", "objc2", @@ -6019,7 +6165,16 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", +] + +[[package]] +name = "oid-registry" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" +dependencies = [ + "asn1-rs 0.7.1", ] [[package]] @@ -6034,9 +6189,9 @@ dependencies = [ [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "onig" @@ -6044,7 +6199,7 @@ version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "336b9c63443aceef14bea841b899035ae3abe89b7c486aaf4c5bd8aafedac3f0" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "once_cell", "onig_sys", @@ -6068,11 +6223,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.74" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -6089,7 +6244,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -6098,20 +6253,26 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "openssl-src" -version = "300.5.3+3.5.4" +version = "300.5.5+3.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6bad8cd0233b63971e232cc9c5e83039375b8586d2312f31fda85db8f888c2" +checksum = "3f1787d533e03597a7934fd0a765f0d28e94ecc5fb7789f8053b1e699a56f709" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.110" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -6149,7 +6310,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] @@ -6173,9 +6334,9 @@ checksum = "a8863faf2910030d139fb48715ad5ff2f35029fc5f244f6d5f689ddcf4d26253" dependencies = [ "async-trait", "bytes", - "http 1.3.1", + "http 1.4.0", "opentelemetry 0.28.0", - "reqwest 0.12.24", + "reqwest 0.12.28", "tracing", ] @@ -6187,14 +6348,14 @@ checksum = "5bef114c6d41bea83d6dc60eb41720eedd0261a67af57b66dd2b84ac46c01d91" dependencies = [ "async-trait", "futures-core", - "http 1.3.1", + "http 1.4.0", "opentelemetry 0.28.0", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", "prost", - "reqwest 0.12.24", - "thiserror 2.0.17", + "reqwest 0.12.28", + "thiserror 2.0.18", "tracing", ] @@ -6225,7 +6386,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] @@ -6278,9 +6439,9 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.18", "smallvec", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -6442,7 +6603,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -6459,9 +6620,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkarr" -version = "5.0.0" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "792c1328860f6874e90e3b387b4929819cc7783a6bd5a4728e918706eb436a48" +checksum = "e1d346b545765a0ef58b6a7e160e17ddaa7427f439b7b9a287df6c88c9e04bf2" dependencies = [ "async-compat", "base32", @@ -6474,14 +6635,14 @@ dependencies = [ "futures-lite", "getrandom 0.3.4", "log", - "lru 0.13.0", + "lru 0.16.3", "ntimestamp", - "reqwest 0.12.24", + "reqwest 0.12.28", "self_cell", "serde", "sha1_smol", "simple-dns", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "url", @@ -6521,7 +6682,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" dependencies = [ "base64 0.22.1", - "indexmap 2.11.4", + "indexmap 2.13.0", "quick-xml", "serde", "time", @@ -6600,15 +6761,15 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" dependencies = [ "portable-atomic", ] @@ -6634,10 +6795,10 @@ dependencies = [ "rand 0.9.2", "serde", "smallvec", - "socket2 0.6.1", + "socket2 0.6.2", "time", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tower-layer", "tracing", "url", @@ -6675,14 +6836,14 @@ checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -6770,7 +6931,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.7", + "toml_edit 0.23.10+spec-1.0.0", ] [[package]] @@ -6831,9 +6992,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -6858,7 +7019,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -6885,7 +7046,7 @@ dependencies = [ "rand 0.9.2", "time", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", ] @@ -6931,7 +7092,7 @@ dependencies = [ "sha2 0.10.9", "tokio", "tokio-stream", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "toml 0.8.23", "tracing", ] @@ -6970,7 +7131,7 @@ dependencies = [ "rand 0.9.2", "test-log", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "toml 0.8.23", "tracing", ] @@ -7004,11 +7165,11 @@ dependencies = [ "serde_json", "sysinfo 0.32.1", "tch", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", "tokenizers", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", "wandb", ] @@ -7060,7 +7221,7 @@ dependencies = [ "futures", "google-cloud-storage", "hf-hub", - "memmap2 0.9.8", + "memmap2 0.9.9", "parquet", "postcard", "pretty_assertions", @@ -7072,16 +7233,16 @@ dependencies = [ "rand 0.9.2", "rand_chacha 0.9.0", "rayon", - "reqwest 0.12.24", + "reqwest 0.12.28", "serde", "serde_json", "static-web-server", "tempfile", "test-log", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokenizers", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", "ts-rs", ] @@ -7104,9 +7265,9 @@ dependencies = [ "serial_test", "tch", "test-log", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "toml 0.8.23", ] @@ -7140,7 +7301,7 @@ dependencies = [ "regex", "tch", "tokenizers", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "torch-sys", "tracing", ] @@ -7150,11 +7311,13 @@ name = "psyche-inference" version = "0.2.0" dependencies = [ "anyhow", + "iroh", "postcard", "pyo3", "serde", "serde_json", "serial_test", + "tokio", "tracing", "uuid", ] @@ -7164,20 +7327,27 @@ name = "psyche-inference-node" version = "0.2.0" dependencies = [ "anyhow", + "axum", "clap", "clap-markdown", "iroh", "iroh-blobs", "iroh-gossip", + "postcard", "psyche-core", "psyche-inference", "psyche-metrics", "psyche-network", + "pyo3", + "serde", "serde_json", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", + "tower 0.4.13", + "tower-http 0.5.2", "tracing", "tracing-subscriber", + "uuid", ] [[package]] @@ -7206,7 +7376,7 @@ dependencies = [ "clap-markdown", "flume", "itertools 0.14.0", - "memmap2 0.9.8", + "memmap2 0.9.9", "psyche-core", "psyche-data-provider", "psyche-network", @@ -7219,10 +7389,10 @@ dependencies = [ "serde", "serde_json", "tch", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokenizers", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "torch-sys", "tracing", ] @@ -7258,11 +7428,11 @@ dependencies = [ "sha2 0.10.9", "tch", "test-log", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokenizers", "tokio", "tokio-stream", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", "url", ] @@ -7286,7 +7456,7 @@ dependencies = [ "sysinfo 0.30.13", "take_mut", "tch", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "torch-sys", "tracing", ] @@ -7341,7 +7511,7 @@ dependencies = [ "serde_json", "time", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", ] @@ -7439,7 +7609,7 @@ dependencies = [ "rand 0.9.2", "ratatui", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tracing", "tracing-opentelemetry 0.29.0", "tracing-subscriber", @@ -7505,7 +7675,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -7518,7 +7688,7 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -7548,7 +7718,7 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -7587,9 +7757,9 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.35", - "socket2 0.6.1", - "thiserror 2.0.17", + "rustls 0.23.36", + "socket2 0.6.2", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -7608,11 +7778,11 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "rustls-platform-verifier", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -7627,16 +7797,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.1", + "socket2 0.6.2", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -7684,7 +7854,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]] @@ -7714,7 +7884,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -7732,14 +7902,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", ] @@ -7781,7 +7951,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdef7f9be5c0122f890d58bdf4d964349ba6a6161f705907526d891efabba57d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cassowary", "compact_str", "crossterm", @@ -7802,7 +7972,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -7862,14 +8032,15 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.14.5" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fae430c6b28f1ad601274e78b7dffa0546de0b73b4cd32f46723c0c2a16f7a5" +checksum = "10b99e0098aa4082912d4c649628623db6aba77335e4f4569ff5083a6448b32e" dependencies = [ "pem 3.0.6", "ring", "rustls-pki-types", "time", + "x509-parser 0.18.0", "yasna", ] @@ -7888,7 +8059,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", +] + +[[package]] +name = "redox_syscall" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" +dependencies = [ + "bitflags 2.10.0", ] [[package]] @@ -7897,7 +8077,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -7908,9 +8088,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]] @@ -7930,7 +8110,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -7941,7 +8121,7 @@ checksum = "23bbed272e39c47a095a5242218a67412a220006842558b03fe2935e8f3d7b92" dependencies = [ "cfg-if", "libc", - "rustix 1.1.2", + "rustix 1.1.3", "windows 0.62.2", ] @@ -8014,7 +8194,7 @@ dependencies = [ "system-configuration 0.5.1", "tokio", "tokio-rustls 0.24.1", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "tower-service", "url", "wasm-bindgen", @@ -8026,9 +8206,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", @@ -8036,11 +8216,11 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.12", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-rustls 0.27.7", "hyper-tls", "hyper-util", @@ -8052,7 +8232,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-native-certs", "rustls-pki-types", "serde", @@ -8062,16 +8242,16 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls 0.26.4", - "tokio-util 0.7.16", - "tower", - "tower-http", + "tokio-util 0.7.18", + "tower 0.5.3", + "tower-http 0.6.8", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.3", + "webpki-roots 1.0.5", ] [[package]] @@ -8097,8 +8277,8 @@ checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e" dependencies = [ "anyhow", "async-trait", - "http 1.3.1", - "reqwest 0.12.24", + "http 1.4.0", + "reqwest 0.12.28", "serde", "thiserror 1.0.69", "tower-service", @@ -8106,9 +8286,9 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "ring" @@ -8118,7 +8298,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -8156,7 +8336,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.106", + "syn 2.0.114", "unicode-ident", ] @@ -8193,9 +8373,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" @@ -8227,7 +8407,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -8236,11 +8416,11 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -8261,26 +8441,26 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.7", + "rustls-webpki 0.103.9", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe", + "openssl-probe 0.2.1", "rustls-pki-types", "schannel", "security-framework 3.5.1", @@ -8306,9 +8486,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", @@ -8316,23 +8496,23 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be59af91596cac372a6942530653ad0c3a246cdd491aaa9dcaee47f88d67d5a0" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", "jni", "log", "once_cell", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.103.7", + "rustls-webpki 0.103.9", "security-framework 3.5.1", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -8353,9 +8533,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.7" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "ring", "rustls-pki-types", @@ -8370,9 +8550,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "safetensors" @@ -8425,9 +8605,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.0.4" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", @@ -8475,7 +8655,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -8488,7 +8668,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -8517,9 +8697,9 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" +checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" [[package]] name = "semver" @@ -8605,7 +8785,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -8620,13 +8800,24 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", "serde", "serde_core", ] @@ -8639,7 +8830,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -8665,17 +8856,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.15.0" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.4", + "indexmap 2.13.0", "schemars 0.9.0", - "schemars 1.0.4", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -8684,14 +8875,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.15.0" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -8700,7 +8891,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.13.0", "itoa", "ryu", "serde", @@ -8709,11 +8900,12 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" +checksum = "0d0b343e184fc3b7bb44dff0705fffcf4b3756ba6aff420dddd8b24ca145e555" dependencies = [ - "futures", + "futures-executor", + "futures-util", "log", "once_cell", "parking_lot", @@ -8723,13 +8915,13 @@ dependencies = [ [[package]] name = "serial_test_derive" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" +checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -8835,9 +9027,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" dependencies = [ "libc", "mio", @@ -8846,10 +9038,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", ] @@ -8873,15 +9066,15 @@ checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" [[package]] name = "signature" -version = "3.0.0-rc.4" +version = "3.0.0-rc.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc280a6ff65c79fbd6622f64d7127f32b85563bca8c53cd2e9141d6744a9056d" +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" @@ -8895,7 +9088,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -8906,7 +9099,7 @@ checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint 0.4.6", "num-traits", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] @@ -8918,9 +9111,9 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "sized-chunks" @@ -8934,9 +9127,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" @@ -8965,7 +9158,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -8986,9 +9179,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", @@ -9090,7 +9283,7 @@ dependencies = [ "crossbeam-channel", "dashmap", "index_list", - "indexmap 2.11.4", + "indexmap 2.13.0", "itertools 0.12.1", "lazy_static", "log", @@ -9154,7 +9347,7 @@ version = "2.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d9e0adeffa0d491b797b30fb60e8e44b7537e6d6d38a7d629926a955b77d805" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "futures", "solana-banks-interface", "solana-program", @@ -9231,7 +9424,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ce4df354110b7a3d40b0722028eabe87e897e4a316acb76ef27e6953e8eebe" dependencies = [ "borsh 0.10.4", - "borsh 1.5.7", + "borsh 1.6.0", ] [[package]] @@ -9311,7 +9504,7 @@ dependencies = [ "dashmap", "futures", "futures-util", - "indexmap 2.11.4", + "indexmap 2.13.0", "indicatif", "log", "quinn", @@ -9389,7 +9582,7 @@ dependencies = [ "bincode", "crossbeam-channel", "futures-util", - "indexmap 2.11.4", + "indexmap 2.13.0", "log", "rand 0.8.5", "rayon", @@ -9525,7 +9718,7 @@ version = "2.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1eb018925ea07bf67ce767430fd580a52ed7406f61844ece6b53fdd0d97e8b2e" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "bs58", "bytemuck", "bytemuck_derive", @@ -9564,8 +9757,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aac2ccec24c601f939880ec3e9aa4824c689dafb8a3289987f3af6fdfb579f69" dependencies = [ "bincode", - "borsh 1.5.7", - "getrandom 0.2.16", + "borsh 1.6.0", + "getrandom 0.2.17", "js-sys", "num-traits", "serde", @@ -9704,7 +9897,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925a39e728e33a331a72737a1c90c1587951d7a5be8f9db6368ee73ea7a2c323" dependencies = [ "bincode", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg_eval", "serde", "serde_derive", @@ -9768,10 +9961,10 @@ checksum = "8318fafc6f83d0a84b29ea5db73e03abb7e8f5b797f2e14ec28eb5f50a07ee07" dependencies = [ "base64 0.22.1", "bincode", - "bitflags 2.9.4", + "bitflags 2.10.0", "blake3", "borsh 0.10.4", - "borsh 1.5.7", + "borsh 1.6.0", "bs58", "bv", "bytemuck", @@ -9780,7 +9973,7 @@ dependencies = [ "console_log", "curve25519-dalek 4.1.3", "five8_const", - "getrandom 0.2.16", + "getrandom 0.2.17", "js-sys", "lazy_static", "log", @@ -9851,7 +10044,7 @@ version = "2.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037b650450ebe2c0079319303e68cfdadda9806d0268200f08e1680a1d2b0796" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "num-traits", "serde", "serde_derive", @@ -9959,13 +10152,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75991d40b6717ad11d0357d435c494fbb2af46ffbffdec015d2abb2e5e8bd62" dependencies = [ "borsh 0.10.4", - "borsh 1.5.7", + "borsh 1.6.0", "bs58", "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", "five8_const", - "getrandom 0.2.16", + "getrandom 0.2.17", "js-sys", "num-traits", "rand 0.8.5", @@ -10018,7 +10211,7 @@ dependencies = [ "log", "quinn", "quinn-proto", - "rustls 0.23.35", + "rustls 0.23.36", "solana-connection-cache", "solana-measure", "solana-metrics", @@ -10232,8 +10425,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49364109ac57076e4722a6ef9c3cc0fafb8327a2d29cf964350fc91604b2b745" dependencies = [ "bincode", - "bitflags 2.9.4", - "borsh 1.5.7", + "bitflags 2.10.0", + "borsh 1.6.0", "bs58", "bytemuck", "bytemuck_derive", @@ -10298,7 +10491,7 @@ dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -10307,7 +10500,7 @@ version = "2.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "548f2b996441f5dbbc3b60fc9d59f20614807c5eddb2936a686036837d9b5c4e" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "libsecp256k1", "solana-define-syscall", "thiserror 1.0.69", @@ -10329,9 +10522,12 @@ dependencies = [ [[package]] name = "solana-security-txt" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" +checksum = "156bb61a96c605fa124e052d630dba2f6fb57e08c7d15b757e1e958b3ed7b3fe" +dependencies = [ + "hashbrown 0.15.2", +] [[package]] name = "solana-send-transaction-service" @@ -10470,7 +10666,7 @@ dependencies = [ "futures-util", "governor", "histogram", - "indexmap 2.11.4", + "indexmap 2.13.0", "itertools 0.12.1", "libc", "log", @@ -10480,7 +10676,7 @@ dependencies = [ "quinn", "quinn-proto", "rand 0.8.5", - "rustls 0.23.35", + "rustls 0.23.36", "smallvec", "socket2 0.5.10", "solana-measure", @@ -10490,8 +10686,8 @@ dependencies = [ "solana-transaction-metrics-tracker", "thiserror 1.0.69", "tokio", - "tokio-util 0.7.16", - "x509-parser", + "tokio-util 0.7.18", + "x509-parser 0.14.0", ] [[package]] @@ -10602,7 +10798,7 @@ dependencies = [ "async-trait", "bincode", "futures-util", - "indexmap 2.11.4", + "indexmap 2.13.0", "indicatif", "log", "rayon", @@ -10653,7 +10849,7 @@ dependencies = [ "Inflector", "base64 0.22.1", "bincode", - "borsh 1.5.7", + "borsh 1.6.0", "bs58", "lazy_static", "log", @@ -10886,7 +11082,7 @@ dependencies = [ "async-trait", "base64 0.22.1", "bincode", - "borsh 1.5.7", + "borsh 1.6.0", "bytemuck", "serde", "serde_json", @@ -10915,7 +11111,7 @@ checksum = "c87e960f4dca2788eeb86bbdde8dd246be8948790b7618d656e68f9b720a86e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -10969,7 +11165,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68034596cf4804880d265f834af1ff2f821ad5293e41fa0f8f59086c181fc38e" dependencies = [ "assert_matches", - "borsh 1.5.7", + "borsh 1.6.0", "num-derive", "num-traits", "solana-program", @@ -10984,7 +11180,7 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76fee7d65013667032d499adc3c895e286197a35a0d3a4643c80e7fd3e9969e3" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "num-derive", "num-traits", "solana-program", @@ -11035,7 +11231,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -11047,7 +11243,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.106", + "syn 2.0.114", "thiserror 1.0.69", ] @@ -11093,7 +11289,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c704c88fc457fa649ba3aabe195c79d885c3f26709efaddc453c8de352c90b87" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "bytemuck", "bytemuck_derive", "solana-program", @@ -11107,7 +11303,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41a7d5950993e1ff2680bd989df298eeb169367fb2f9deeef1f132de6e4e8016" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "bytemuck", "bytemuck_derive", "num-derive", @@ -11156,7 +11352,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -11315,7 +11511,7 @@ dependencies = [ "solana-program", "solana-zk-sdk", "spl-pod 0.5.0", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -11367,7 +11563,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6c2318ddff97e006ed9b1291ebec0750a78547f870f62a69c56fe3b46a5d8fc" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "solana-program", "spl-discriminator 0.3.0", "spl-pod 0.3.1", @@ -11381,7 +11577,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfb9c89dbc877abd735f05547dcf9e6e12c00c11d6d74d8817506cab4c99fdbb" dependencies = [ - "borsh 1.5.7", + "borsh 1.6.0", "num-derive", "num-traits", "solana-borsh", @@ -11524,7 +11720,7 @@ dependencies = [ "tikv-jemallocator", "tokio", "tokio-rustls 0.26.4", - "tokio-util 0.7.16", + "tokio-util 0.7.18", "toml 0.8.23", "tracing", "tracing-subscriber", @@ -11593,7 +11789,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -11605,7 +11801,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -11633,9 +11829,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -11688,7 +11884,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -11733,11 +11929,11 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -11793,9 +11989,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" +checksum = "b1dd07eb858a2067e2f3c7155d54e929265c264e6f37efe3ee7a8d1b5a1dd0ba" [[package]] name = "tarpc" @@ -11859,14 +12055,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom 0.3.4", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -11887,9 +12083,9 @@ checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" [[package]] name = "test-log" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e33b98a582ea0be1168eba097538ee8dd4bbe0f2b01b22ac92ea30054e5be7b" +checksum = "37d53ac171c92a39e4769491c4b4dde7022c60042254b5fc044ae409d34a24d4" dependencies = [ "env_logger 0.11.8", "test-log-macros", @@ -11898,13 +12094,13 @@ dependencies = [ [[package]] name = "test-log-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36" +checksum = "be35209fd0781c5401458ab66e4f98accf63553e8fae7425503e92fdd319783b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -11918,11 +12114,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]] @@ -11933,18 +12129,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[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.106", + "syn 2.0.114", ] [[package]] @@ -11969,9 +12165,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d" +checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" dependencies = [ "cc", "libc", @@ -11979,9 +12175,9 @@ dependencies = [ [[package]] name = "tikv-jemallocator" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cec5ff18518d81584f477e9bfdf957f5bb0979b0bac3af4ca30b5b3ae2d2865" +checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" dependencies = [ "libc", "tikv-jemalloc-sys", @@ -11989,9 +12185,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "9da98b7d9b7dad93488a84b8248efc35352b0b2657397d4167e7ad67e5d535e5" dependencies = [ "deranged", "itoa", @@ -12000,22 +12196,22 @@ dependencies = [ "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "78cc610bac2dcee56805c99642447d4c5dbde4d01f752ffea0199aee1f601dc4" dependencies = [ "num-conv", "time-core", @@ -12032,9 +12228,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -12064,7 +12260,7 @@ dependencies = [ "aho-corasick", "derive_builder", "esaxx-rs", - "getrandom 0.2.16", + "getrandom 0.2.17", "itertools 0.12.1", "lazy_static", "log", @@ -12088,9 +12284,9 @@ dependencies = [ [[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", @@ -12098,7 +12294,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", ] @@ -12111,7 +12307,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -12140,7 +12336,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.35", + "rustls 0.23.36", "tokio", ] @@ -12162,14 +12358,14 @@ dependencies = [ [[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", "tokio", - "tokio-util 0.7.16", + "tokio-util 0.7.18", ] [[package]] @@ -12204,9 +12400,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.16" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -12227,7 +12423,7 @@ dependencies = [ "futures-core", "futures-sink", "getrandom 0.3.4", - "http 1.3.1", + "http 1.4.0", "httparse", "rand 0.9.2", "ring", @@ -12235,7 +12431,7 @@ dependencies = [ "simdutf8", "tokio", "tokio-rustls 0.26.4", - "tokio-util 0.7.16", + "tokio-util 0.7.18", ] [[package]] @@ -12270,9 +12466,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] @@ -12283,7 +12479,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.13.0", "serde", "serde_spanned", "toml_datetime 0.6.11", @@ -12293,21 +12489,21 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ - "indexmap 2.11.4", - "toml_datetime 0.7.3", + "indexmap 2.13.0", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "winnow", ] [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] @@ -12327,7 +12523,7 @@ dependencies = [ "async-trait", "base64 0.22.1", "bytes", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -12352,9 +12548,20 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -12363,22 +12570,39 @@ dependencies = [ "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] name = "tower-http" -version = "0.6.6" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", + "bytes", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "pin-project-lite", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "bitflags 2.10.0", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "iri-string", "pin-project-lite", - "tower", + "tower 0.5.3", "tower-layer", "tower-service", ] @@ -12397,9 +12621,9 @@ 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", @@ -12409,20 +12633,20 @@ dependencies = [ [[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.106", + "syn 2.0.114", ] [[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", @@ -12482,9 +12706,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", @@ -12517,7 +12741,7 @@ dependencies = [ "bytemuck", "lazy_static", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", "ts-rs-macros", ] @@ -12528,7 +12752,7 @@ source = "git+https://github.com/arilotter/ts-rs.git?rev=92ce1752227fec9bb868ad8 dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", "termcolor", ] @@ -12619,24 +12843,24 @@ dependencies = [ [[package]] name = "tzdb_data" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d69ad05cd8412d9f6e7df6ac91e50ea557687cc1b734339cb6742e547704663" +checksum = "310d19de36af75a78ec83fdb325bf4e3a13ab0ab77b7b1a13fabbd059e9b525b" dependencies = [ "tz-rs", ] [[package]] name = "unicase" -version = "2.8.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-normalization-alignments" @@ -12700,7 +12924,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "crypto-common 0.1.6", + "crypto-common 0.1.7", "subtle", ] @@ -12735,7 +12959,7 @@ dependencies = [ "flate2", "log", "once_cell", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "serde", "serde_json", @@ -12756,14 +12980,15 @@ dependencies = [ [[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]] @@ -12792,13 +13017,13 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ "getrandom 0.3.4", "js-sys", - "serde", + "serde_core", "wasm-bindgen", ] @@ -12893,7 +13118,7 @@ dependencies = [ "env_logger 0.11.8", "graphql_client", "impl_from_tuple", - "reqwest 0.12.24", + "reqwest 0.12.28", "serde", "serde_json", "thiserror 1.0.69", @@ -12924,9 +13149,9 @@ 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", ] @@ -12977,7 +13202,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", "wasm-bindgen-shared", ] @@ -13025,9 +13250,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d651ec480de84b762e7be71e6efa7461699c19d9e2c272c8d93455f567786e" +checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" dependencies = [ "rustls-pki-types", ] @@ -13053,23 +13278,23 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.3", + "webpki-roots 1.0.5", ] [[package]] name = "webpki-roots" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +checksum = "12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c" dependencies = [ "rustls-pki-types", ] [[package]] name = "weezl" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "widestring" @@ -13134,38 +13359,16 @@ dependencies = [ "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 0.2.0", - "windows-core 0.61.2", - "windows-future 0.2.1", - "windows-link 0.1.3", - "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-collections", "windows-core 0.62.2", - "windows-future 0.3.2", - "windows-numerics 0.3.1", -] - -[[package]] -name = "windows-collections" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" -dependencies = [ - "windows-core 0.61.2", + "windows-future", + "windows-numerics", ] [[package]] @@ -13198,19 +13401,6 @@ dependencies = [ "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 0.60.2", - "windows-interface 0.59.3", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - [[package]] name = "windows-core" version = "0.62.2" @@ -13219,20 +13409,9 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement 0.60.2", "windows-interface 0.59.3", - "windows-link 0.2.1", + "windows-link", "windows-result 0.4.1", - "windows-strings 0.5.1", -] - -[[package]] -name = "windows-future" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", - "windows-threading 0.1.0", + "windows-strings", ] [[package]] @@ -13242,8 +13421,8 @@ 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", + "windows-link", + "windows-threading", ] [[package]] @@ -13254,7 +13433,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -13265,7 +13444,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -13276,7 +13455,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -13287,31 +13466,15 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-numerics" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", -] - [[package]] name = "windows-numerics" version = "0.3.1" @@ -13319,18 +13482,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ "windows-core 0.62.2", - "windows-link 0.2.1", + "windows-link", ] [[package]] name = "windows-registry" -version = "0.5.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-link", + "windows-result 0.4.1", + "windows-strings", ] [[package]] @@ -13342,22 +13505,13 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-result" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -13366,27 +13520,18 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d24d6bcc7f734a4091ecf8d7a64c5f7d7066f45585c1861eba06449909609c8a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "widestring", "windows-sys 0.52.0", ] -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-strings" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -13440,7 +13585,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -13495,7 +13640,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.2.1", + "windows-link", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -13506,22 +13651,13 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows-threading" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" -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", + "windows-link", ] [[package]] @@ -13706,9 +13842,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[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", ] @@ -13734,9 +13870,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "wmi" @@ -13748,7 +13884,7 @@ dependencies = [ "futures", "log", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", "windows 0.62.2", "windows-core 0.62.2", ] @@ -13762,14 +13898,14 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "ws_stream_wasm" @@ -13784,7 +13920,7 @@ dependencies = [ "pharos", "rustc_version", "send_wrapper", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -13805,18 +13941,36 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", "base64 0.13.1", "data-encoding", - "der-parser", + "der-parser 8.2.0", "lazy_static", "nom", - "oid-registry", + "oid-registry 0.6.1", "rusticata-macros", "thiserror 1.0.69", "time", ] +[[package]] +name = "x509-parser" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3e137310115a65136898d2079f003ce33331a6c4b0d51f1531d1be082b6425" +dependencies = [ + "asn1-rs 0.7.1", + "data-encoding", + "der-parser 10.0.0", + "lazy_static", + "nom", + "oid-registry 0.8.1", + "ring", + "rusticata-macros", + "thiserror 2.0.18", + "time", +] + [[package]] name = "xattr" version = "1.6.1" @@ -13824,14 +13978,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xmltree" @@ -13870,11 +14024,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -13882,13 +14035,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", "synstructure 0.13.2", ] @@ -13900,22 +14053,22 @@ checksum = "2164e798d9e3d84ee2c91139ace54638059a3b23e361f5c11781c2c6459bde0f" [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "7456cf00f0685ad319c5b1693f291a650eaf345e941d082fc4e03df8a03996ac" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "1328722bbf2115db7e19d69ebcc15e795719e2d66b60827c6a69a117365e37a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -13935,7 +14088,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", "synstructure 0.13.2", ] @@ -13950,20 +14103,20 @@ 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.106", + "syn 2.0.114", ] [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -13972,9 +14125,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -13983,13 +14136,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.114", ] [[package]] @@ -14012,6 +14165,12 @@ dependencies = [ "zstd 0.11.2+zstd.1.5.2", ] +[[package]] +name = "zmij" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" + [[package]] name = "zstd" version = "0.11.2+zstd.1.5.2" diff --git a/Cargo.toml b/Cargo.toml index 01a1653d1..ef60981ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -73,6 +73,9 @@ iroh = { version = "0.96.0", features = ["metrics"] } iroh-relay = { version = "0.96.0", features = ["metrics"] } iroh-blobs = { version = "0.98", features = ["metrics"] } iroh-gossip = { version = "0.96.0" } +axum = "0.7" +tower = "0.5" +tower-http = { version = "0.6", features = ["trace"] } flume = "0.11.1" memmap2 = { version = "0.9.3", features = ["stable_deref_trait"] } indicatif = "0.17.5" @@ -106,6 +109,10 @@ ts-rs = { git = "https://github.com/arilotter/ts-rs.git", rev = "92ce1752227fec9 ] } rayon = "1.10.0" +# with iroh update need to specify digest and crypto-common versions +digest = { version = "=0.11.0-rc.10", default-features = false } +crypto-common = "0.2" + # dev only test-log = { version = "0.2.16", features = ["trace"] } pretty_assertions = "1.4.1" diff --git a/architectures/inference-only/inference-node/Cargo.toml b/architectures/inference-only/inference-node/Cargo.toml index b1a18d74f..1a48116ed 100644 --- a/architectures/inference-only/inference-node/Cargo.toml +++ b/architectures/inference-only/inference-node/Cargo.toml @@ -11,6 +11,10 @@ path = "src/main.rs" name = "test-network" path = "src/bin/test-network.rs" +[[bin]] +name = "gateway-node" +path = "src/bin/gateway-node.rs" + [dependencies] psyche-inference.workspace = true psyche-network.workspace = true @@ -33,3 +37,11 @@ iroh-blobs.workspace = true iroh-gossip.workspace = true serde_json.workspace = true +serde.workspace = true +uuid = { version = "1", features = ["v4"] } +pyo3.workspace = true +postcard.workspace = true + +axum = { version = "0.7", features = ["macros"] } +tower = { version = "0.4" } +tower-http = { version = "0.5", features = ["cors"] } diff --git a/architectures/inference-only/inference-node/src/bin/gateway-node.rs b/architectures/inference-only/inference-node/src/bin/gateway-node.rs new file mode 100644 index 000000000..0bbe560aa --- /dev/null +++ b/architectures/inference-only/inference-node/src/bin/gateway-node.rs @@ -0,0 +1,490 @@ +//! Gateway node for inference requests +//! +//! Usage: +//! 1. Exposes HTTP API on localhost:8000 +//! 2. Discovers inference nodes via gossip +//! 3. Routes requests to available inference nodes via gossip +//! 4. Returns responses to HTTP clients +//! +//! cargo run --bin gateway-node -- --discovery-mode local + +use anyhow::{Context, Result}; +use axum::{ + Json, Router, + extract::State, + http::StatusCode, + response::{IntoResponse, Response}, + routing::post, +}; +use clap::Parser; +use psyche_inference::{ + INFERENCE_ALPN, InferenceGossipMessage, InferenceMessage, InferenceRequest, InferenceResponse, +}; +use psyche_metrics::ClientMetrics; +use psyche_network::{ + DiscoveryMode, EndpointId, NetworkConnection, NetworkEvent, RelayKind, allowlist, +}; +use std::{collections::HashMap, fs, path::PathBuf, sync::Arc, time::Duration}; +use tokio::{ + sync::{RwLock, mpsc}, + time::sleep, +}; +use tokio_util::sync::CancellationToken; +use tracing::{debug, error, info}; + +#[derive(Parser, Debug)] +struct Args { + #[arg(long, default_value = "127.0.0.1:8000")] + listen_addr: String, + + /// what discovery to use - public n0 or local + #[arg(long, env = "IROH_DISCOVERY", default_value = "n0")] + discovery_mode: DiscoveryMode, + + /// what relays to use - public n0 or the private Psyche ones + #[arg(long, env = "IROH_RELAY", default_value = "psyche")] + relay_kind: RelayKind, + + #[arg(long)] + bootstrap_peer_file: Option, + + #[arg(long)] + write_endpoint_file: Option, +} + +#[derive(Clone, Debug)] +struct InferenceNodeInfo { + peer_id: EndpointId, + model_name: String, + #[allow(dead_code)] + checkpoint_id: Option, + #[allow(dead_code)] + capabilities: Vec, +} + +struct GatewayState { + available_nodes: RwLock>, + pending_requests: RwLock>>, + network_tx: mpsc::Sender<(EndpointId, InferenceMessage)>, +} + +#[derive(serde::Deserialize, serde::Serialize, Clone, Debug)] +struct ChatMessage { + role: String, + content: String, +} + +#[derive(serde::Deserialize)] +struct ChatCompletionRequest { + model: Option, + messages: Vec, + #[serde(default = "default_max_tokens")] + max_tokens: Option, + #[serde(default = "default_temperature")] + temperature: Option, + #[serde(default = "default_top_p")] + top_p: Option, + #[serde(default)] + stream: bool, +} + +fn default_max_tokens() -> Option { + Some(100) +} +fn default_temperature() -> Option { + Some(1.0) +} +fn default_top_p() -> Option { + Some(1.0) +} + +#[derive(serde::Serialize)] +struct ChatCompletionChoice { + index: usize, + message: ChatMessage, + finish_reason: Option, +} + +#[derive(serde::Serialize)] +struct ChatCompletionResponse { + id: String, + object: String, + created: u64, + model: String, + choices: Vec, + // we're omitting usage stats for now +} + +#[axum::debug_handler] +async fn handle_inference( + State(state): State>, + Json(req): Json, +) -> Result, AppError> { + let nodes = state.available_nodes.read().await; + let node = nodes.values().next().ok_or(AppError::NoNodesAvailable)?; + + let target_peer_id = node.peer_id; + let model_name = req.model.clone().unwrap_or_else(|| node.model_name.clone()); + info!( + "Routing request to node: {} (model: {})", + node.peer_id.fmt_short(), + node.model_name + ); + drop(nodes); + + let messages: Vec = req + .messages + .iter() + .map(|m| psyche_inference::ChatMessage { + role: m.role.clone(), + content: m.content.clone(), + }) + .collect(); + + let request_id = uuid::Uuid::new_v4().to_string(); + let inference_req = InferenceRequest { + request_id: request_id.clone(), + messages, + max_tokens: req.max_tokens.unwrap_or(100), + temperature: req.temperature.unwrap_or(1.0), + top_p: req.top_p.unwrap_or(1.0), + stream: req.stream, + }; + + let (tx, mut rx) = mpsc::channel(1); + + state + .pending_requests + .write() + .await + .insert(request_id.clone(), tx); + + let msg = InferenceMessage::Request(inference_req); + if let Err(e) = state.network_tx.send((target_peer_id, msg)).await { + error!("Failed to send inference request: {:#}", e); + state.pending_requests.write().await.remove(&request_id); + return Err(AppError::InternalError); + } + + info!("Sent inference request {} to network", request_id); + + let response = tokio::time::timeout(Duration::from_secs(30), rx.recv()) + .await + .map_err(|_| AppError::Timeout)? + .ok_or(AppError::InternalError)?; + + state.pending_requests.write().await.remove(&request_id); + + let created = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs(); + + Ok(Json(ChatCompletionResponse { + id: format!("chatcmpl-{}", response.request_id), + object: "chat.completion".to_string(), + created, + model: model_name, + choices: vec![ChatCompletionChoice { + index: 0, + message: ChatMessage { + role: "assistant".to_string(), + content: response.generated_text, + }, + finish_reason: response.finish_reason, + }], + })) +} + +#[derive(Debug)] +enum AppError { + NoNodesAvailable, + Timeout, + InternalError, +} + +impl IntoResponse for AppError { + fn into_response(self) -> Response { + let (status, message) = match self { + AppError::NoNodesAvailable => ( + StatusCode::SERVICE_UNAVAILABLE, + "No inference nodes available", + ), + AppError::Timeout => (StatusCode::GATEWAY_TIMEOUT, "Inference request timed out"), + AppError::InternalError => (StatusCode::INTERNAL_SERVER_ERROR, "Internal server error"), + }; + (status, message).into_response() + } +} + +#[tokio::main] +async fn main() -> Result<()> { + run_gateway().await +} + +async fn send_inference_request( + endpoint: iroh::Endpoint, + peer_id: EndpointId, + request: InferenceRequest, +) -> Result { + info!( + "Connecting to peer {} with ALPN {:?}", + peer_id.fmt_short(), + std::str::from_utf8(INFERENCE_ALPN) + ); + + // connect to peer and open bidirectional stream + let connection = endpoint + .connect(peer_id, INFERENCE_ALPN) + .await + .context("Failed to connect to peer")?; + + info!("Connected, opening bidirectional stream"); + let (mut send, mut recv) = connection + .open_bi() + .await + .context("Failed to open bidirectional stream")?; + + let message = InferenceMessage::Request(request); + let request_bytes = + postcard::to_allocvec(&message).context("Failed to serialize inference request")?; + + info!("Sending {} bytes", request_bytes.len()); + send.write_all(&request_bytes) + .await + .context("Failed to write request")?; + + info!("Finishing send stream"); + send.finish()?; + + info!("Reading response..."); + let response_bytes = recv + .read_to_end(10 * 1024 * 1024) + .await + .context("Failed to read response")?; // 10MB max + + info!("Received {} bytes, deserializing", response_bytes.len()); + let response_message: InferenceMessage = postcard::from_bytes(&response_bytes) + .context("Failed to deserialize inference response")?; + + match response_message { + InferenceMessage::Response(response) => { + info!("Successfully received inference response"); + Ok(response) + } + _ => anyhow::bail!("Unexpected message type from inference node"), + } +} + +async fn run_gateway() -> Result<()> { + tracing_subscriber::fmt() + .with_env_filter( + tracing_subscriber::EnvFilter::try_from_default_env() + .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")), + ) + .init(); + + let args = Args::parse(); + + info!("Starting gateway node"); + info!(" HTTP API: http://{}", args.listen_addr); + info!(" Discovery mode: {:?}", args.discovery_mode); + info!(" Relay kind: {:?}", args.relay_kind); + + let bootstrap_peers = psyche_inference_node::load_bootstrap_peers( + args.bootstrap_peer_file.as_ref(), + "No bootstrap peers configured (gateway will be a bootstrap node)", + )?; + + let cancel = CancellationToken::new(); + + info!("Initializing P2P network..."); + let metrics = Arc::new(ClientMetrics::default()); + let run_id = "inference"; + + type P2PNetwork = NetworkConnection; + + let mut network = P2PNetwork::init( + run_id, + None, + None, + args.discovery_mode, + args.relay_kind, + bootstrap_peers, + None, + allowlist::AllowAll, + metrics.clone(), + Some(cancel.clone()), + ) + .await + .context("Failed to initialize P2P network")?; + + info!("P2P network initialized"); + info!(" Endpoint ID: {}", network.endpoint_id()); + + // write endpoint to file if requested + let endpoint_file = if let Ok(file_path) = std::env::var("PSYCHE_GATEWAY_ENDPOINT_FILE") { + info!("Found PSYCHE_GATEWAY_ENDPOINT_FILE env var: {}", file_path); + Some(PathBuf::from(file_path)) + } else { + info!("No PSYCHE_GATEWAY_ENDPOINT_FILE env var, checking CLI args"); + args.write_endpoint_file.clone() + }; + + if let Some(ref endpoint_file) = endpoint_file { + let endpoint_addr = network.router().endpoint().addr(); + let endpoints = vec![endpoint_addr]; + let content = + serde_json::to_string(&endpoints).context("Failed to serialize endpoint address")?; + fs::write(endpoint_file, content).context("Failed to write endpoint file")?; + info!("Wrote gateway endpoint to {:?}", endpoint_file); + info!("Other nodes can bootstrap using this file"); + } + + info!("Waiting for gossip mesh to stabilize..."); + sleep(Duration::from_secs(5)).await; + + info!("Gossip mesh should be ready"); + + let (network_tx, mut network_rx) = mpsc::channel::<(EndpointId, InferenceMessage)>(100); + let state = Arc::new(GatewayState { + available_nodes: RwLock::new(HashMap::new()), + pending_requests: RwLock::new(HashMap::new()), + network_tx, + }); + + info!("Gateway ready! Listening on http://{}", args.listen_addr); + info!("Discovering inference nodes..."); + + let network_handle = { + let state = state.clone(); + let cancel = cancel.clone(); + tokio::spawn(async move { + let mut task_set = tokio::task::JoinSet::new(); + + loop { + tokio::select! { + _ = cancel.cancelled() => { + info!("Network task shutting down"); + info!("Aborting {} active P2P request tasks", task_set.len()); + task_set.shutdown().await; + break; + } + + Some((target_peer_id, msg)) = network_rx.recv() => { + match msg { + InferenceMessage::Request(req) => { + let request_id = req.request_id.clone(); + info!("Sending inference request {} to {} via direct P2P", + request_id, target_peer_id.fmt_short()); + + let endpoint = network.router().endpoint().clone(); + let state_clone = state.clone(); + task_set.spawn(async move { + // timeout slightly longer than HTTP handler timeout (30s) to avoid race - might need to adjust + let result = tokio::time::timeout( + Duration::from_secs(35), + send_inference_request(endpoint, target_peer_id, req) + ).await; + + match result { + Ok(Ok(response)) => { + info!("Received inference response for {}", request_id); + if let Some(tx) = state_clone.pending_requests.write().await.remove(&request_id) { + let _ = tx.send(response).await; + } + } + Ok(Err(e)) => { + error!("Failed to send inference request: {:#}", e); + state_clone.pending_requests.write().await.remove(&request_id); + } + Err(_) => { + error!("Inference request {} timed out after 35s", request_id); + state_clone.pending_requests.write().await.remove(&request_id); + } + } + }); + } + _ => continue, + }; + } + + Some(_) = task_set.join_next(), if !task_set.is_empty() => { + } + + event = network.poll_next() => { + match event { + Ok(Some(NetworkEvent::MessageReceived((peer_id, msg)))) => { + info!("Received gossip message from {}", peer_id.fmt_short()); + match msg { + InferenceGossipMessage::NodeAvailable { model_name, checkpoint_id, capabilities } => { + info!("Discovered inference node!"); + info!(" Peer ID: {}", peer_id.fmt_short()); + info!(" Model: {}", model_name); + info!(" Checkpoint: {:?}", checkpoint_id); + info!(" Capabilities: {:?}", capabilities); + + let node_info = InferenceNodeInfo { + peer_id, + model_name, + checkpoint_id, + capabilities, + }; + state.available_nodes.write().await.insert(peer_id, node_info); + } + InferenceGossipMessage::NodeUnavailable => { + info!("Inference node {} went offline", peer_id.fmt_short()); + state.available_nodes.write().await.remove(&peer_id); + } + InferenceGossipMessage::ReloadCheckpoint { checkpoint_id, checkpoint_source } => { + debug!("Checkpoint reload notification: {} from {}", checkpoint_id, checkpoint_source); + } + } + } + Ok(Some(_)) => { + debug!("Other network event (ignored)"); + } + Ok(None) => {} + Err(e) => { + error!("Network error: {:#}", e); + } + } + } + } + } + }) + }; + + let app = Router::new() + .route("/v1/chat/completions", post(handle_inference)) + .with_state(state.clone()); + + let listener = tokio::net::TcpListener::bind(&args.listen_addr) + .await + .context("Failed to bind HTTP server")?; + + info!("HTTP server listening on {}", args.listen_addr); + + let server_handle = tokio::spawn(async move { + axum::serve(listener, app) + .await + .context("HTTP server error") + }); + + tokio::select! { + _ = tokio::signal::ctrl_c() => { + info!("Received shutdown signal"); + } + _ = cancel.cancelled() => { + info!("Cancellation requested"); + } + } + + info!("Shutting down..."); + cancel.cancel(); + + let _ = tokio::join!(network_handle, server_handle); + + info!("Shutdown complete"); + Ok(()) +} diff --git a/architectures/inference-only/inference-node/src/bin/test-network.rs b/architectures/inference-only/inference-node/src/bin/test-network.rs index 1b90adbc1..93d8f2d98 100644 --- a/architectures/inference-only/inference-node/src/bin/test-network.rs +++ b/architectures/inference-only/inference-node/src/bin/test-network.rs @@ -8,7 +8,6 @@ use anyhow::{Context, Result}; use clap::Parser; -use iroh::EndpointAddr; use psyche_inference::InferenceGossipMessage; use psyche_metrics::ClientMetrics; use psyche_network::{DiscoveryMode, NetworkConnection, NetworkEvent, RelayKind, allowlist}; @@ -60,24 +59,10 @@ async fn main() -> Result<()> { let cancel = CancellationToken::new(); - // Read bootstrap peer if provided - let bootstrap_peers = if let Some(ref peer_file) = args.bootstrap_peer_file { - if peer_file.exists() { - info!("Reading bootstrap peer from {:?}", peer_file); - let content = - fs::read_to_string(peer_file).context("Failed to read bootstrap peer file")?; - let endpoint_addr: EndpointAddr = serde_json::from_str(&content) - .context("Failed to parse bootstrap peer endpoint")?; - info!("Bootstrap peer: {}", endpoint_addr.id.fmt_short()); - vec![endpoint_addr] - } else { - info!("Bootstrap peer file not found yet, starting without peers"); - vec![] - } - } else { - info!("No bootstrap peer file specified"); - vec![] - }; + let bootstrap_peers = psyche_inference_node::load_bootstrap_peers( + args.bootstrap_peer_file.as_ref(), + "No bootstrap peer file specified", + )?; info!("Initializing P2P network..."); @@ -104,7 +89,7 @@ async fn main() -> Result<()> { info!("P2P network initialized"); info!(" Endpoint ID: {}", network.endpoint_id()); - // Write endpoint to file if requested + // write endpoint to file if requested if let Some(ref endpoint_file) = args.write_endpoint_file { let endpoint_addr = network.router().endpoint().addr(); let content = serde_json::to_string(&endpoint_addr) diff --git a/architectures/inference-only/inference-node/src/lib.rs b/architectures/inference-only/inference-node/src/lib.rs new file mode 100644 index 000000000..9c56c128b --- /dev/null +++ b/architectures/inference-only/inference-node/src/lib.rs @@ -0,0 +1,62 @@ +use anyhow::{Context, Result}; +use iroh::EndpointAddr; +use std::{fs, path::PathBuf}; +use tracing::info; + +pub fn load_bootstrap_peers( + bootstrap_peer_file: Option<&PathBuf>, + fallback_message: &str, +) -> Result> { + if let Ok(endpoints_json) = std::env::var("PSYCHE_GATEWAY_ENDPOINTS") { + // JSON array of gateway endpoints + info!("Reading gateway endpoints from PSYCHE_GATEWAY_ENDPOINTS env var"); + let peers: Vec = serde_json::from_str(&endpoints_json) + .context("Failed to parse PSYCHE_GATEWAY_ENDPOINTS as JSON array")?; + info!("Loaded {} gateway endpoint(s) from env var", peers.len()); + for peer in &peers { + info!(" Gateway: {}", peer.id.fmt_short()); + } + Ok(peers) + } else if let Ok(file_path) = std::env::var("PSYCHE_GATEWAY_BOOTSTRAP_FILE") { + // env var pointing to file + let peer_file = PathBuf::from(file_path); + if peer_file.exists() { + info!( + "Reading bootstrap peers from PSYCHE_GATEWAY_BOOTSTRAP_FILE: {:?}", + peer_file + ); + let content = + fs::read_to_string(&peer_file).context("Failed to read gateway bootstrap file")?; + let peers: Vec = serde_json::from_str(&content) + .context("Failed to parse gateway bootstrap file as JSON array")?; + info!("Loaded {} gateway endpoint(s) from file", peers.len()); + Ok(peers) + } else { + info!("Gateway bootstrap file not found, starting without peers"); + Ok(vec![]) + } + } else if let Some(peer_file) = bootstrap_peer_file { + // local testing: CLI argument + if peer_file.exists() { + info!("Reading bootstrap peer from {:?}", peer_file); + let content = + fs::read_to_string(peer_file).context("Failed to read bootstrap peer file")?; + // support both single endpoint and array + if let Ok(peer) = serde_json::from_str::(&content) { + info!("Bootstrap peer: {}", peer.id.fmt_short()); + Ok(vec![peer]) + } else { + let peers: Vec = serde_json::from_str(&content) + .context("Failed to parse bootstrap peer file")?; + info!("Loaded {} bootstrap peer(s)", peers.len()); + Ok(peers) + } + } else { + info!("Bootstrap peer file not found, starting without peers"); + Ok(vec![]) + } + } else { + info!("{}", fallback_message); + Ok(vec![]) + } +} diff --git a/architectures/inference-only/inference-node/src/main.rs b/architectures/inference-only/inference-node/src/main.rs index 4776458ae..968e00175 100644 --- a/architectures/inference-only/inference-node/src/main.rs +++ b/architectures/inference-only/inference-node/src/main.rs @@ -10,11 +10,13 @@ use anyhow::{Context, Result}; use clap::{Args as ClapArgs, Parser, Subcommand}; -use psyche_inference::{InferenceGossipMessage, InferenceNode}; +use psyche_inference::{INFERENCE_ALPN, InferenceGossipMessage, InferenceNode, InferenceProtocol}; use psyche_metrics::ClientMetrics; use psyche_network::{DiscoveryMode, NetworkConnection, NetworkEvent, RelayKind, allowlist}; use std::path::PathBuf; use std::sync::Arc; +use std::{fs, time::Duration}; +use tokio::sync::RwLock; use tokio_util::sync::CancellationToken; use tracing::{debug, error, info, warn}; @@ -31,7 +33,7 @@ struct Cli { #[derive(Subcommand, Debug)] enum Commands { /// Run the inference node (default) - Run(RunArgs), + Run(Box), // Prints the help, optionally as markdown. Used for docs generation. #[clap(hide = true)] @@ -55,11 +57,13 @@ struct RunArgs { #[arg(long)] checkpoint_path: Option, - #[arg(long, default_value = "n0")] - discovery_mode: String, + /// what discovery to use - public n0 or local + #[arg(long, env = "IROH_DISCOVERY", default_value = "n0")] + discovery_mode: DiscoveryMode, - #[arg(long, default_value = "n0")] - relay_kind: String, + /// what relays to use - public n0 or the private Psyche ones + #[arg(long, env = "IROH_RELAY", default_value = "psyche")] + relay_kind: RelayKind, #[arg(long)] relay_url: Option, @@ -67,6 +71,14 @@ struct RunArgs { /// node capabilities (comma-separated, e.g. "streaming,tool_use") #[arg(long, default_value = "")] capabilities: String, + + /// bootstrap peer file (JSON file with gateway endpoint address) + #[arg(long)] + bootstrap_peer_file: Option, + + /// write endpoint address to file for other nodes to bootstrap from + #[arg(long)] + write_endpoint_file: Option, } #[tokio::main] @@ -87,7 +99,7 @@ async fn main() -> Result<()> { clap_markdown::print_help_markdown::(); return Ok(()); } - Some(Commands::Run(args)) => args, + Some(Commands::Run(args)) => *args, None => cli.run_args, }; @@ -101,16 +113,6 @@ async fn main() -> Result<()> { run_args.gpu_memory_utilization ); - let discovery_mode: DiscoveryMode = run_args - .discovery_mode - .parse() - .map_err(|e| anyhow::anyhow!("Invalid discovery mode: {}", e))?; - - let relay_kind: RelayKind = run_args - .relay_kind - .parse() - .map_err(|e| anyhow::anyhow!("Invalid relay kind: {}", e))?; - let capabilities: Vec = if run_args.capabilities.is_empty() { vec![] } else { @@ -121,12 +123,21 @@ async fn main() -> Result<()> { .collect() }; - info!("Discovery mode: {:?}", discovery_mode); - info!("Relay kind: {:?}", relay_kind); + info!("Discovery mode: {:?}", run_args.discovery_mode); + info!("Relay kind: {:?}", run_args.relay_kind); info!("Capabilities: {:?}", capabilities); + let bootstrap_peers = psyche_inference_node::load_bootstrap_peers( + run_args.bootstrap_peer_file.as_ref(), + "No bootstrap peers configured (no env vars or CLI args)", + )?; + let cancel = CancellationToken::new(); + info!("Initializing Python interpreter..."); + pyo3::prepare_freethreaded_python(); + info!("Python interpreter initialized"); + info!("Initializing vLLM engine..."); let mut inference_node = InferenceNode::new( model_name.clone(), @@ -143,6 +154,8 @@ async fn main() -> Result<()> { info!("vLLM engine initialized successfully"); + let inference_node_shared = Arc::new(RwLock::new(Some(inference_node))); + info!("Initializing P2P network..."); let metrics = Arc::new(ClientMetrics::default()); @@ -150,25 +163,40 @@ async fn main() -> Result<()> { type P2PNetwork = NetworkConnection; - let mut network = P2PNetwork::init( + info!("Registering inference protocol handler..."); + let inference_protocol = InferenceProtocol::new(inference_node_shared.clone()); + + let mut network = P2PNetwork::init_with_custom_protocol( run_id, None, // port (let OS choose) None, // interface - discovery_mode, - relay_kind, - vec![], // bootstrap peers (will discover via gossip) + run_args.discovery_mode, + run_args.relay_kind, + bootstrap_peers, None, // secret key (generate new) allowlist::AllowAll, // No allowlist for inference network metrics.clone(), Some(cancel.clone()), + (INFERENCE_ALPN, inference_protocol), ) .await .context("Failed to initialize P2P network")?; - info!("✓ P2P network initialized"); + info!("P2P network initialized"); info!(" Endpoint ID: {}", network.endpoint_id()); + info!("Protocol handler registered"); + + if let Some(ref endpoint_file) = run_args.write_endpoint_file { + let endpoint_addr = network.router().endpoint().addr(); + let content = serde_json::to_string(&endpoint_addr) + .context("Failed to serialize endpoint address")?; + fs::write(endpoint_file, content).context("Failed to write endpoint file")?; + info!("Wrote endpoint to {:?}", endpoint_file); + } - // Announce availability via gossip + tokio::time::sleep(Duration::from_secs(2)).await; + + // announce availability via gossip let availability_msg = InferenceGossipMessage::NodeAvailable { model_name: model_name.clone(), checkpoint_id: None, // TODO: Track actual checkpoint when reloading - do we need this? @@ -182,6 +210,10 @@ async fn main() -> Result<()> { info!("Broadcasted availability to network"); info!("Inference node ready! Listening for requests..."); + // heartbeat for re-announcing availability + let mut heartbeat_interval = tokio::time::interval(std::time::Duration::from_secs(30)); + heartbeat_interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip); + loop { tokio::select! { _ = tokio::signal::ctrl_c() => { @@ -194,6 +226,20 @@ async fn main() -> Result<()> { break; } + _ = heartbeat_interval.tick() => { + info!("Re-broadcasting availability"); + let availability_msg = InferenceGossipMessage::NodeAvailable { + model_name: model_name.clone(), + checkpoint_id: None, + capabilities: capabilities.clone(), + }; + if let Err(e) = network.broadcast(&availability_msg) { + warn!("Failed to broadcast: {:#}", e); + } else { + info!("Broadcast successful"); + } + } + event = network.poll_next() => { match event { Ok(Some(NetworkEvent::MessageReceived((peer_id, msg)))) => { @@ -238,7 +284,9 @@ async fn main() -> Result<()> { } info!("Shutting down inference node..."); - inference_node.shutdown()?; + if let Some(mut node) = inference_node_shared.write().await.take() { + node.shutdown()?; + } info!("Shutdown complete"); Ok(()) diff --git a/justfile b/justfile index 3fc4f3afe..1831bdd29 100644 --- a/justfile +++ b/justfile @@ -193,3 +193,98 @@ run_test_infra_with_proxies_validator num_clients="1": stop_test_infra: cd docker/test && docker compose -f docker-compose.yml -f subscriptions_test/docker-compose.yml down + +# Run inference node with a local model (requires Python venv with vLLM) +inference-node model="gpt2": + RUST_LOG=info,psyche_network=debug nix run .#psyche-inference-node -- \ + --model-name {{ model }} \ + --discovery-mode n0 \ + --relay-kind n0 + +# Run gateway node (HTTP API for inference requests) +gateway-node: + RUST_LOG=info,psyche_network=debug nix run .#bin-psyche-inference-node-gateway-node -- \ + --discovery-mode n0 \ + --relay-kind n0 + +# Run full inference stack (gateway + inference node in tmux) +inference-stack model="gpt2": + #!/usr/bin/env bash + set -euo pipefail + + # Check if tmux is available + if ! command -v tmux &> /dev/null; then + echo "Error: tmux is required but not installed" + exit 1 + fi + + SESSION="psyche-inference" + GATEWAY_PEER_FILE="/tmp/psyche-gateway-peer.json" + + # Clean up old peer file + rm -f "$GATEWAY_PEER_FILE" + + # Kill existing session if it exists + tmux kill-session -t $SESSION 2>/dev/null || true + + echo "building gateway and inference node..." + nix build .#bin-psyche-inference-node-gateway-node .#psyche-inference-node + + echo "Starting gateway node (bootstrap node)..." + + # Create new session with gateway (starts first to be bootstrap node) + tmux new-session -d -s $SESSION -n gateway + tmux send-keys -t $SESSION:gateway "PSYCHE_GATEWAY_ENDPOINT_FILE=$GATEWAY_PEER_FILE RUST_LOG=info,psyche_network=debug nix run .#bin-psyche-inference-node-gateway-node -- --discovery-mode n0 --relay-kind n0" C-m + + # Wait for gateway to start and write peer file + echo "Waiting for gateway to initialize and write endpoint..." + for i in $(seq 1 30); do + if [ -f "$GATEWAY_PEER_FILE" ]; then + echo "Gateway peer file created" + break + fi + sleep 1 + done + + if [ ! -f "$GATEWAY_PEER_FILE" ]; then + echo "Error: Gateway failed to create peer file" + exit 1 + fi + + # Wait a bit more for gateway HTTP server + sleep 2 + echo "Gateway ready" + echo "" + echo "Starting inference node..." + + # Create window for inference node (bootstraps from gateway) + tmux new-window -t $SESSION -n inference + tmux send-keys -t $SESSION:inference "PSYCHE_GATEWAY_BOOTSTRAP_FILE=$GATEWAY_PEER_FILE RUST_LOG=info,psyche_network=debug nix run .#psyche-inference-node -- --model-name {{ model }} --discovery-mode n0 --relay-kind n0" C-m + + # Wait for inference node to start + sleep 3 + echo "Inference node started" + echo "" + + # Create window for testing + tmux new-window -t $SESSION -n test + tmux send-keys -t $SESSION:test "echo 'Test inference with:'; echo 'curl -X POST http://127.0.0.1:8000/v1/chat/completions -H \"Content-Type: application/json\" -d '\"'\"'{\"messages\": [{\"role\": \"user\", \"content\": \"Hello, world!\"}], \"max_tokens\": 50}'\"'\"''" C-m + + # Attach to session + echo "Starting inference stack in tmux session '$SESSION'" + echo "Windows: inference (node), gateway (HTTP API), test (for curl commands)" + echo "" + echo "To attach: tmux attach -t $SESSION" + echo "To kill: tmux kill-session -t $SESSION" + echo "" + tmux attach -t $SESSION + +# Test inference via HTTP (requires inference stack to be running) +test-inference prompt="Hello, world!" max_tokens="50": + curl -X POST http://127.0.0.1:8000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -d '{"messages": [{"role": "user", "content": "{{ prompt }}"}], "max_tokens": {{ max_tokens }}}' + +# Run end-to-end test: start nodes, send request, verify response +test-inference-e2e model="gpt2" prompt="Hello, world!": + ./scripts/test-inference-e2e.sh "{{ model }}" "{{ prompt }}" diff --git a/nix/devShell.nix b/nix/devShell.nix index 45a670c45..07f3087d2 100644 --- a/nix/devShell.nix +++ b/nix/devShell.nix @@ -40,6 +40,9 @@ packages = with pkgs; [ + # to fix weird escapes + bashInteractive + # for local-testnet tmux nvtopPackages.full @@ -82,6 +85,7 @@ ++ rustWorkspaceArgs.nativeBuildInputs; shellHook = '' + export SHELL=${pkgs.bashInteractive}/bin/bash source ${lib.getExe config.agenix-shell.installationScript} ${config.pre-commit.installationScript} '' diff --git a/python/python/psyche/vllm/rust_bridge.py b/python/python/psyche/vllm/rust_bridge.py index 8179410d4..177742de8 100644 --- a/python/python/psyche/vllm/rust_bridge.py +++ b/python/python/psyche/vllm/rust_bridge.py @@ -42,7 +42,7 @@ def create_engine( def run_inference( engine_id: str, - prompt: str, + messages: list, temperature: float = 1.0, top_p: float = 1.0, max_tokens: int = 100, @@ -55,28 +55,64 @@ def run_inference( engine = _engines[engine_id] + tokenizer = engine.get_tokenizer() + + # apply chat template if available + if hasattr(tokenizer, "chat_template") and tokenizer.chat_template: + formatted_prompt = tokenizer.apply_chat_template( + messages, tokenize=False, add_generation_prompt=True + ) + else: + # format messages manually for models without chat template + formatted_prompt = "" + for msg in messages: + role = msg.get("role", "user") + content = msg.get("content", "") + if role == "system": + formatted_prompt += f"System: {content}\n\n" + elif role == "user": + formatted_prompt += f"User: {content}\n\n" + elif role == "assistant": + formatted_prompt += f"Assistant: {content}\n\n" + formatted_prompt += "Assistant: " + + stop_token_ids = [] + if hasattr(tokenizer, "eos_token_id") and tokenizer.eos_token_id is not None: + stop_token_ids.append(tokenizer.eos_token_id) + + stop_strings = [] + if hasattr(tokenizer, "eos_token") and tokenizer.eos_token: + stop_strings.append(tokenizer.eos_token) + sampling_params = { "temperature": temperature, "top_p": top_p, "max_tokens": max_tokens, + "stop_token_ids": stop_token_ids if stop_token_ids else None, + "stop": stop_strings if stop_strings else None, } - request_id = engine.add_request(prompt, sampling_params) + logger.info(f"Adding request with sampling_params: {sampling_params}") + request_id = engine.add_request(formatted_prompt, sampling_params) - # Process until complete outputs = [] while engine.has_unfinished_requests(): batch_outputs = engine.step() outputs.extend(batch_outputs) if outputs: - output = outputs[0].outputs[0] + # Use the last output as it contains the final result + final_output = outputs[-1] + logger.info(f"Final output has {len(final_output.outputs)} completions") + output = final_output.outputs[0] + logger.info(f"Final generated text: {repr(output.text)}") + logger.info(f"Final finish reason: {output.finish_reason}") + return { "status": "success", "request_id": request_id, "generated_text": output.text, - "prompt": prompt, - "full_text": prompt + output.text, + "full_text": formatted_prompt + output.text, } else: return { diff --git a/scripts/test-inference-e2e.sh b/scripts/test-inference-e2e.sh new file mode 100755 index 000000000..60c1ccc71 --- /dev/null +++ b/scripts/test-inference-e2e.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +# End-to-end test for inference network: starts inference node + gateway, sends test request +# Note: Must be run from nix shell: nix develop .#dev-python --command ./scripts/test-inference-e2e.sh + +set -euo pipefail + +MODEL="${1:-gpt2}" +PROMPT="${2:-Hello, world! This is a test.}" + +echo "Starting inference network test..." +echo " Model: $MODEL" +echo " Prompt: $PROMPT" +echo "" + +# Cleanup function +cleanup() { + echo "" + echo "Cleaning up..." + if [ ! -z "${INFERENCE_PID:-}" ]; then + kill $INFERENCE_PID 2>/dev/null || true + fi + if [ ! -z "${GATEWAY_PID:-}" ]; then + kill $GATEWAY_PID 2>/dev/null || true + fi +} +trap cleanup EXIT + +# Start inference node +echo "Starting inference node..." +LIBTORCH_BYPASS_VERSION_CHECK=1 RUST_LOG=info nix run .#psyche-inference-node -- \ + --model-name "$MODEL" \ + --discovery-mode local \ + > /tmp/psyche-inference-node.log 2>&1 & +INFERENCE_PID=$! + +echo " Inference node PID: $INFERENCE_PID" +echo " Waiting for node to initialize..." +sleep 5 + +# Check if inference node is still running +if ! kill -0 $INFERENCE_PID 2>/dev/null; then + echo "Inference node failed to start. Check /tmp/psyche-inference-node.log" + tail -20 /tmp/psyche-inference-node.log + exit 1 +fi + +# Start gateway +echo "Starting gateway node..." +RUST_LOG=info nix run .#bin-psyche-inference-node-gateway-node -- \ + --discovery-mode local \ + > /tmp/psyche-gateway-node.log 2>&1 & +GATEWAY_PID=$! + +echo " Gateway node PID: $GATEWAY_PID" +echo " Waiting for gateway to initialize..." +sleep 3 + +# Check if gateway is still running +if ! kill -0 $GATEWAY_PID 2>/dev/null; then + echo "Gateway node failed to start. Check /tmp/psyche-gateway-node.log" + tail -20 /tmp/psyche-gateway-node.log + exit 1 +fi + +echo "" +echo "Both nodes running!" +echo "" +echo "Sending test inference request..." + +# Send test request +RESPONSE=$(curl -s -X POST http://127.0.0.1:8000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -d "{\"messages\": [{\"role\": \"user\", \"content\": \"$PROMPT\"}], \"max_tokens\": 50}" \ + -w "\nHTTP_STATUS:%{http_code}") + +HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS:" | cut -d: -f2) +BODY=$(echo "$RESPONSE" | grep -v "HTTP_STATUS:") + +echo "" +if [ "$HTTP_STATUS" = "200" ]; then + echo "Request succeeded (HTTP $HTTP_STATUS)" + echo "" + echo "Response:" + echo "$BODY" | jq . 2>/dev/null || echo "$BODY" +else + echo "Request failed (HTTP $HTTP_STATUS)" + echo "" + echo "Response:" + echo "$BODY" + echo "" + echo "Inference node log:" + tail -20 /tmp/psyche-inference-node.log + echo "" + echo "Gateway node log:" + tail -20 /tmp/psyche-gateway-node.log + exit 1 +fi + +echo "" +echo "Test completed successfully!" diff --git a/shared/inference/Cargo.toml b/shared/inference/Cargo.toml index bd0563d9b..6bdb76db7 100644 --- a/shared/inference/Cargo.toml +++ b/shared/inference/Cargo.toml @@ -13,6 +13,9 @@ serde.workspace = true serde_json.workspace = true tracing.workspace = true uuid = { version = "1.10", features = ["v4"] } + +iroh.workspace = true +tokio.workspace = true postcard.workspace = true [dev-dependencies] diff --git a/shared/inference/src/lib.rs b/shared/inference/src/lib.rs index 7ddf93dab..105c8bebf 100644 --- a/shared/inference/src/lib.rs +++ b/shared/inference/src/lib.rs @@ -2,7 +2,11 @@ pub mod node; pub mod protocol; +pub mod protocol_handler; pub mod vllm; pub use node::InferenceNode; -pub use protocol::{InferenceGossipMessage, InferenceMessage, InferenceRequest, InferenceResponse}; +pub use protocol::{ + ChatMessage, InferenceGossipMessage, InferenceMessage, InferenceRequest, InferenceResponse, +}; +pub use protocol_handler::{INFERENCE_ALPN, InferenceProtocol}; diff --git a/shared/inference/src/node.rs b/shared/inference/src/node.rs index 247d294fd..af8ae1cd8 100644 --- a/shared/inference/src/node.rs +++ b/shared/inference/src/node.rs @@ -6,6 +6,7 @@ use anyhow::{Context, Result, anyhow}; use pyo3::prelude::*; use tracing::{debug, info, warn}; +#[derive(Debug)] pub struct InferenceNode { engine_id: String, model_name: String, @@ -74,16 +75,16 @@ impl InferenceNode { } debug!( - "Running inference for request: {} with prompt: {:?}", + "Running inference for request: {} with {} messages", request.request_id, - request.prompt.chars().take(50).collect::() + request.messages.len() ); Python::with_gil(|py| { let result = vllm::run_inference( py, &self.engine_id, - &request.prompt, + request.messages.clone(), Some(request.temperature), Some(request.top_p), Some(request.max_tokens as i32), @@ -159,6 +160,7 @@ impl Drop for InferenceNode { #[cfg(test)] mod tests { use super::*; + use crate::ChatMessage; #[test] fn test_node_creation() { @@ -184,7 +186,10 @@ mod tests { let request = InferenceRequest { request_id: "test-1".to_string(), - prompt: "Hello".to_string(), + messages: vec![ChatMessage { + role: "user".to_string(), + content: "Hello".to_string(), + }], max_tokens: 10, temperature: 0.7, top_p: 0.9, diff --git a/shared/inference/src/protocol.rs b/shared/inference/src/protocol.rs index ab4d2c580..8ff85ca5a 100644 --- a/shared/inference/src/protocol.rs +++ b/shared/inference/src/protocol.rs @@ -24,10 +24,16 @@ pub enum InferenceMessage { Cancel { request_id: String }, } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ChatMessage { + pub role: String, + pub content: String, +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct InferenceRequest { pub request_id: String, - pub prompt: String, + pub messages: Vec, #[serde(default = "default_max_tokens")] pub max_tokens: usize, #[serde(default = "default_temperature")] @@ -67,7 +73,10 @@ mod tests { fn test_request_serialization() { let req = InferenceRequest { request_id: "test-123".to_string(), - prompt: "Once upon a time".to_string(), + messages: vec![ChatMessage { + role: "user".to_string(), + content: "Once upon a time".to_string(), + }], max_tokens: 50, temperature: 0.7, top_p: 0.9, @@ -78,12 +87,13 @@ mod tests { let parsed: InferenceRequest = serde_json::from_str(&json).unwrap(); assert_eq!(req.request_id, parsed.request_id); - assert_eq!(req.prompt, parsed.prompt); + assert_eq!(req.messages.len(), parsed.messages.len()); + assert_eq!(req.messages[0].content, parsed.messages[0].content); } #[test] fn test_request_defaults() { - let json = r#"{"request_id": "test", "prompt": "hello"}"#; + let json = r#"{"request_id": "test", "messages": [{"role": "user", "content": "hello"}]}"#; let req: InferenceRequest = serde_json::from_str(json).unwrap(); assert_eq!(req.max_tokens, 100); @@ -131,7 +141,7 @@ mod tests { fn test_request_with_custom_params() { let json = r#"{ "request_id": "custom-1", - "prompt": "Test prompt", + "messages": [{"role": "user", "content": "Test prompt"}], "max_tokens": 200, "temperature": 0.5, "top_p": 0.95, @@ -140,7 +150,7 @@ mod tests { let req: InferenceRequest = serde_json::from_str(json).unwrap(); assert_eq!(req.request_id, "custom-1"); - assert_eq!(req.prompt, "Test prompt"); + assert_eq!(req.messages[0].content, "Test prompt"); assert_eq!(req.max_tokens, 200); assert_eq!(req.temperature, 0.5); assert_eq!(req.top_p, 0.95); @@ -151,7 +161,10 @@ mod tests { fn test_inference_message_serialization() { let req = InferenceRequest { request_id: "test-1".to_string(), - prompt: "Hello".to_string(), + messages: vec![ChatMessage { + role: "user".to_string(), + content: "Hello".to_string(), + }], max_tokens: 10, temperature: 0.7, top_p: 0.9, @@ -165,7 +178,7 @@ mod tests { match parsed { InferenceMessage::Request(r) => { assert_eq!(r.request_id, "test-1"); - assert_eq!(r.prompt, "Hello"); + assert_eq!(r.messages[0].content, "Hello"); } _ => panic!("Expected Request variant"), } diff --git a/shared/inference/src/protocol_handler.rs b/shared/inference/src/protocol_handler.rs new file mode 100644 index 000000000..d872c407f --- /dev/null +++ b/shared/inference/src/protocol_handler.rs @@ -0,0 +1,119 @@ +//! Direct P2P protocol handler for inference requests +//! +//! This implements iroh's ProtocolHandler trait to accept incoming +//! inference requests over direct P2P connections. + +use crate::{InferenceMessage, InferenceNode, InferenceRequest, InferenceResponse}; +use anyhow::{Context, Result}; +use iroh::endpoint::Connection; +use iroh::protocol::{AcceptError, ProtocolHandler}; +use std::sync::Arc; +use tokio::sync::RwLock; +use tracing::{debug, error, info}; + +pub const INFERENCE_ALPN: &[u8] = b"/psyche/inference/1"; + +#[derive(Clone, Debug)] +pub struct InferenceProtocol { + inference_node: Arc>>, +} + +impl InferenceProtocol { + pub fn new(inference_node: Arc>>) -> Self { + Self { inference_node } + } + + async fn handle_connection(&self, connection: Connection) -> Result<()> { + let peer_id = connection.remote_id(); + debug!( + "Accepting inference connection from {}", + peer_id.fmt_short() + ); + + // bidirectional stream + let (mut send, mut recv) = connection.accept_bi().await?; + + let request_bytes = recv.read_to_end(1024 * 1024).await?; + let message: InferenceMessage = postcard::from_bytes(&request_bytes) + .context("Failed to deserialize inference message")?; + + match message { + InferenceMessage::Request(request) => { + info!( + "Received inference request {} from {}", + request.request_id, + peer_id.fmt_short() + ); + + let response = self.process_request(request).await?; + + info!("Serializing response for {}", peer_id.fmt_short()); + let response_msg = InferenceMessage::Response(response); + let response_bytes = + postcard::to_allocvec(&response_msg).context("Failed to serialize response")?; + + info!( + "Writing {} bytes to {}", + response_bytes.len(), + peer_id.fmt_short() + ); + send.write_all(&response_bytes).await?; + + info!("Finishing send stream to {}", peer_id.fmt_short()); + send.finish()?; + + // adaptive delay to ensure data is flushed before connection is dropped + // without this, the connection might close before the peer reads all bytes + // base 50ms + 10ms per MB of data + let size_mb = response_bytes.len() as f64 / (1024.0 * 1024.0); + let delay_ms = 50 + (size_mb * 10.0) as u64; + debug!( + "Waiting {}ms for {} bytes to flush", + delay_ms, + response_bytes.len() + ); + tokio::time::sleep(tokio::time::Duration::from_millis(delay_ms)).await; + + info!( + "Successfully sent inference response to {}", + peer_id.fmt_short() + ); + } + _ => { + error!("Unexpected message type from {}", peer_id.fmt_short()); + } + } + + Ok(()) + } + + async fn process_request(&self, request: InferenceRequest) -> Result { + let node = self.inference_node.read().await; + + match node.as_ref() { + Some(node) => { + info!("Processing inference request: {}", request.request_id); + node.inference(&request).context("Failed to run inference") + } + None => { + error!("Inference node not initialized"); + Ok(InferenceResponse { + request_id: request.request_id, + generated_text: String::new(), + full_text: String::new(), + finish_reason: Some("error: node not initialized".to_string()), + }) + } + } + } +} + +impl ProtocolHandler for InferenceProtocol { + async fn accept(&self, connection: Connection) -> Result<(), AcceptError> { + self.handle_connection(connection).await.map_err(|e| { + error!("Error handling inference connection: {:#}", e); + let io_error = std::io::Error::other(e.to_string()); + AcceptError::from_err(io_error) + }) + } +} diff --git a/shared/inference/src/vllm.rs b/shared/inference/src/vllm.rs index 0efbcab2f..45e38e17a 100644 --- a/shared/inference/src/vllm.rs +++ b/shared/inference/src/vllm.rs @@ -37,7 +37,6 @@ pub struct InferenceResult { pub request_id: Option, pub generated_text: Option, pub full_text: Option, - pub prompt: Option, pub error: Option, } @@ -143,7 +142,7 @@ pub fn create_engine( pub fn run_inference( py: Python, engine_id: &str, - prompt: &str, + messages: Vec, temperature: Option, top_p: Option, max_tokens: Option, @@ -152,7 +151,15 @@ pub fn run_inference( let kwargs = PyDict::new(py); kwargs.set_item("engine_id", engine_id)?; - kwargs.set_item("prompt", prompt)?; + + let py_messages = pyo3::types::PyList::empty(py); + for msg in messages { + let py_msg = pyo3::types::PyDict::new(py); + py_msg.set_item("role", msg.role)?; + py_msg.set_item("content", msg.content)?; + py_messages.append(py_msg)?; + } + kwargs.set_item("messages", py_messages)?; if let Some(temp) = temperature { kwargs.set_item("temperature", temp)?; @@ -178,7 +185,6 @@ pub fn run_inference( request_id: get_optional_string(&map, "request_id", py), generated_text: get_optional_string(&map, "generated_text", py), full_text: get_optional_string(&map, "full_text", py), - prompt: get_optional_string(&map, "prompt", py), error: get_optional_string(&map, "error", py), }) } diff --git a/shared/network/src/lib.rs b/shared/network/src/lib.rs index 334429789..d09084263 100644 --- a/shared/network/src/lib.rs +++ b/shared/network/src/lib.rs @@ -80,6 +80,7 @@ pub use download_manager::{ DownloadComplete, DownloadFailed, DownloadRetryInfo, DownloadType, MAX_DOWNLOAD_RETRIES, RetriedDownloadsHandle, TransmittableDownload, }; +pub use iroh::protocol::ProtocolHandler; pub use iroh::{Endpoint, EndpointId, PublicKey, SecretKey}; use iroh_relay::{RelayMap, RelayQuicConfig}; pub use latency_sorted::LatencySorted; @@ -230,6 +231,72 @@ where allowlist: A, metrics: Arc, cancel: Option, + ) -> Result { + Self::init_internal::( + run_id, + port, + interface, + discovery_mode, + relay_kind, + bootstrap_peers, + secret_key, + allowlist, + metrics, + cancel, + None, + ) + .await + } + + #[allow(clippy::too_many_arguments)] + pub async fn init_with_custom_protocol< + A: Allowlist + 'static + Send + std::marker::Sync, + P: ProtocolHandler + Clone, + >( + run_id: &str, + port: Option, + interface: Option, + discovery_mode: DiscoveryMode, + relay_kind: RelayKind, + bootstrap_peers: Vec, + secret_key: Option, + allowlist: A, + metrics: Arc, + cancel: Option, + additional_protocol: (&'static [u8], P), + ) -> Result { + Self::init_internal( + run_id, + port, + interface, + discovery_mode, + relay_kind, + bootstrap_peers, + secret_key, + allowlist, + metrics, + cancel, + Some(additional_protocol), + ) + .await + } + + #[allow(clippy::too_many_arguments)] + async fn init_internal< + A: Allowlist + 'static + Send + std::marker::Sync, + P: ProtocolHandler + Clone, + >( + run_id: &str, + port: Option, + interface: Option, + discovery_mode: DiscoveryMode, + relay_kind: RelayKind, + bootstrap_peers: Vec, + secret_key: Option, + allowlist: A, + metrics: Arc, + cancel: Option, + additional_protocol: Option<(&'static [u8], P)>, ) -> Result { let secret_key = match secret_key { None => SecretKey::generate(&mut rand::rng()), @@ -399,6 +466,7 @@ where allowlist.clone(), endpoint.clone(), SupportedProtocols::new(gossip.clone(), blobs_protocol, model_parameter_sharing), + additional_protocol, )?; trace!("router created!"); diff --git a/shared/network/src/router.rs b/shared/network/src/router.rs index 842ab89a5..638aaec33 100644 --- a/shared/network/src/router.rs +++ b/shared/network/src/router.rs @@ -6,7 +6,7 @@ use iroh_gossip::net::Gossip; use iroh::{ Endpoint, - protocol::{AccessLimit, Router}, + protocol::{AccessLimit, ProtocolHandler, Router}, }; use crate::{Allowlist, ModelSharing, p2p_model_sharing}; @@ -23,10 +23,14 @@ impl SupportedProtocols { } } -pub(crate) fn spawn_router_with_allowlist( +pub(crate) fn spawn_router_with_allowlist< + A: Allowlist + 'static + Send + std::marker::Sync, + P: ProtocolHandler + Clone, +>( allowlist: A, endpoint: Endpoint, protocols: SupportedProtocols, + additional_protocol: Option<(&'static [u8], P)>, ) -> Result> { let allowlist_clone = allowlist.clone(); let allowlisted_blobs = AccessLimit::new(protocols.1, move |endpoint_id| { @@ -40,13 +44,22 @@ pub(crate) fn spawn_router_with_allowlist( allowlist.clone(), endpoint.clone(), SupportedProtocols::new(gossip.clone(), blobs_protocol, p2p_model_sharing), + None, )?; assert!(!router.is_shutdown());