diff --git a/Cargo.lock b/Cargo.lock index ce121aa0..6fd25451 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,41 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common 0.1.7", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.8.12" @@ -56,9 +91,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -71,15 +106,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] @@ -182,19 +217,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-compat" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ba85bc55464dcbf728b56d97e119d673f4cf9062be330a9a26f3acf504a590" -dependencies = [ - "futures-core", - "futures-io", - "once_cell", - "pin-project-lite", - "tokio", -] - [[package]] name = "async-trait" version = "0.1.89" @@ -478,9 +500,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.56" +version = "1.2.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" dependencies = [ "find-msvc-tools", "shlex", @@ -518,11 +540,21 @@ dependencies = [ "windows-link", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common 0.1.7", + "inout", +] + [[package]] name = "clap" -version = "4.5.60" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", "clap_derive", @@ -530,9 +562,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.60" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream", "anstyle", @@ -542,9 +574,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.55" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" dependencies = [ "heck", "proc-macro2", @@ -554,9 +586,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "cobs" @@ -569,9 +601,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" @@ -680,13 +712,32 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" -version = "0.2.0" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-common" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "211f05e03c7d03754740fd9e585de910a095d6b99f8bcfffdef8319fa02a8331" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" dependencies = [ "hybrid-array", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + [[package]] name = "curve25519-dalek" version = "5.0.0-pre.1" @@ -885,14 +936,14 @@ checksum = "afa94b64bfc6549e6e4b5a3216f22593224174083da7a90db47e951c4fb31725" dependencies = [ "block-buffer", "const-oid", - "crypto-common", + "crypto-common 0.2.1", ] [[package]] name = "dispatch2" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ "bitflags", "block2", @@ -931,12 +982,6 @@ dependencies = [ "litrs", ] -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - [[package]] name = "ed25519" version = "3.0.0-rc.4" @@ -1012,7 +1057,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1272,6 +1317,16 @@ dependencies = [ "windows-result", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -1294,22 +1349,34 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", + "js-sys", "libc", - "r-efi", + "r-efi 6.0.0", "wasip2", "wasip3", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", ] [[package]] @@ -1510,9 +1577,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hybrid-array" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b229d73f5803b562cc26e4da0396c8610a4ee209f4fac8fa4f8d709166dc45" +checksum = "8655f91cd07f2b9d0c24137bd650fe69617773435ee5ec83022377777ce65ef1" dependencies = [ "typenum", ] @@ -1574,7 +1641,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.3", "tokio", "tower-service", "tracing", @@ -1757,6 +1824,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + [[package]] name = "inplace-vec-builder" version = "0.1.1" @@ -1780,9 +1856,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" @@ -1796,9 +1872,9 @@ dependencies = [ [[package]] name = "iroh" -version = "0.96.1" +version = "0.97.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5236da4d5681f317ec393c8fe2b7e3d360d31c6bb40383991d0b7429ca5ad117" +checksum = "feb56e7e4b0ec7fba7efa6a236b016a52b5d927d50244aceb9e20566159b1a32" dependencies = [ "axum", "backon", @@ -1811,22 +1887,22 @@ dependencies = [ "getrandom 0.3.4", "hickory-resolver", "http", - "igd-next", - "iroh-base 0.96.1", + "ipnet", + "iroh-base", "iroh-metrics", - "iroh-quinn", - "iroh-quinn-proto", - "iroh-quinn-udp", "iroh-relay", "n0-error", "n0-future", "n0-watcher", - "netdev", "netwatch", + "noq", + "noq-proto", + "noq-udp", "papaya", "pin-project", "pkarr", "pkcs8", + "portable-atomic", "portmapper", "rand", "reqwest", @@ -1836,7 +1912,7 @@ dependencies = [ "rustls-webpki", "serde", "smallvec", - "strum 0.27.2", + "strum 0.28.0", "sync_wrapper", "time", "tokio", @@ -1850,27 +1926,9 @@ dependencies = [ [[package]] name = "iroh-base" -version = "0.95.1" +version = "0.97.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a8c5fb1cc65589f0d7ab44269a76f615a8c4458356952c9b0ef1c93ea45ff8" -dependencies = [ - "curve25519-dalek", - "data-encoding", - "derive_more", - "ed25519-dalek", - "n0-error", - "rand_core", - "serde", - "url", - "zeroize", - "zeroize_derive", -] - -[[package]] -name = "iroh-base" -version = "0.96.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c99d836a1c99e037e98d1bf3ef209c3a4df97555a00ce9510eb78eccdf5567" +checksum = "55a354e3396b62c14717ee807dfee9a7f43f6dad47e4ac0fd1d49f1ffad14ef0" dependencies = [ "curve25519-dalek", "data-encoding", @@ -1888,9 +1946,9 @@ dependencies = [ [[package]] name = "iroh-blobs" -version = "0.98.0" +version = "0.99.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f253ea06293e51e166a88a3faa019b67e187d12bd7c6a04369a0ec86f53272" +checksum = "51b06914e77bd07bc1b3600096be66e2a63d391e8f4a901f61771630e20f2116" dependencies = [ "arrayvec", "bao-tree", @@ -1903,15 +1961,15 @@ dependencies = [ "genawaiter", "hex", "iroh", - "iroh-base 0.96.1", + "iroh-base", "iroh-io", "iroh-metrics", - "iroh-quinn", - "iroh-tickets 0.3.0", + "iroh-tickets", "irpc", "n0-error", "n0-future", "nested_enum_utils", + "noq", "postcard", "rand", "range-collections", @@ -1945,12 +2003,12 @@ dependencies = [ "iroh-blobs", "iroh-gossip", "iroh-metrics", - "iroh-quinn", - "iroh-tickets 0.2.0", + "iroh-tickets", "irpc", "n0-error", "n0-future", "nested_enum_utils", + "noq", "num_enum", "parking_lot", "postcard", @@ -1977,9 +2035,9 @@ dependencies = [ [[package]] name = "iroh-gossip" -version = "0.96.0" +version = "0.97.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d04f83254c847ac61a9b2215b95a36d598d87af033ca12a546cd1c6a2e06dab" +checksum = "4db5b64f3cb0a0c8b68b57888acd4cefcd2f0774f1a132d2a498cbb2a92fbc55" dependencies = [ "blake3", "bytes", @@ -1992,7 +2050,7 @@ dependencies = [ "hex", "indexmap", "iroh", - "iroh-base 0.96.1", + "iroh-base", "iroh-metrics", "irpc", "n0-error", @@ -2020,9 +2078,9 @@ dependencies = [ [[package]] name = "iroh-metrics" -version = "0.38.2" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c946095f060e6e59b9ff30cc26c75cdb758e7fb0cde8312c89e2144654989fcb" +checksum = "761b45ba046134b11eb3e432fa501616b45c4bf3a30c21717578bc07aa6461dd" dependencies = [ "http-body-util", "hyper", @@ -2030,6 +2088,7 @@ dependencies = [ "iroh-metrics-derive", "itoa", "n0-error", + "portable-atomic", "postcard", "reqwest", "ryu", @@ -2050,72 +2109,11 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "iroh-quinn" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034ed21f34c657a123d39525d948c885aacba59508805e4dd67d71f022e7151b" -dependencies = [ - "bytes", - "cfg_aliases", - "iroh-quinn-proto", - "iroh-quinn-udp", - "pin-project-lite", - "rustc-hash", - "rustls", - "socket2 0.5.10", - "thiserror 2.0.18", - "tokio", - "tokio-stream", - "tracing", - "web-time", -] - -[[package]] -name = "iroh-quinn-proto" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de99ad8adc878ee0e68509ad256152ce23b8bbe45f5539d04e179630aca40a9" -dependencies = [ - "bytes", - "derive_more", - "enum-assoc", - "fastbloom", - "getrandom 0.3.4", - "identity-hash", - "lru-slab", - "rand", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "rustls-platform-verifier", - "slab", - "sorted-index-buffer", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "iroh-quinn-udp" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f981dadd5a072a9e0efcd24bdcc388e570073f7e51b33505ceb1ef4668c80c86" -dependencies = [ - "cfg_aliases", - "libc", - "socket2 0.5.10", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "iroh-relay" -version = "0.96.1" +version = "0.97.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd2b63e654b9dec799a73372cdc79b529ca6c7248c0c8de7da78a02e3a46f03c" +checksum = "d786b260cadfe82ae0b6a9e372e8c78949096a06c857d1c3521355cefced0f55" dependencies = [ "ahash", "blake3", @@ -2131,13 +2129,13 @@ dependencies = [ "http-body-util", "hyper", "hyper-util", - "iroh-base 0.96.1", + "iroh-base", "iroh-metrics", - "iroh-quinn", - "iroh-quinn-proto", "lru", "n0-error", "n0-future", + "noq", + "noq-proto", "num_enum", "pin-project", "pkarr", @@ -2155,7 +2153,7 @@ dependencies = [ "serde_json", "sha1", "simdutf8", - "strum 0.27.2", + "strum 0.28.0", "time", "tokio", "tokio-rustls", @@ -2174,27 +2172,13 @@ dependencies = [ [[package]] name = "iroh-tickets" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a322053cacddeca222f0999ce3cf6aa45c64ae5ad8c8911eac9b66008ffbaa5" -dependencies = [ - "data-encoding", - "derive_more", - "iroh-base 0.95.1", - "n0-error", - "postcard", - "serde", -] - -[[package]] -name = "iroh-tickets" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cd580bf680db919cbbce6886a47314acb0e9b4f7b639acebcea5e9f485d183" +checksum = "ab64bac4bb573b9cfd2142bd2876ed65ca792efbc4398361a4ee51a0f9afbed6" dependencies = [ "data-encoding", "derive_more", - "iroh-base 0.96.1", + "iroh-base", "n0-error", "postcard", "serde", @@ -2202,16 +2186,16 @@ dependencies = [ [[package]] name = "irpc" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bbc84aaeab13a6d7502bae4f40f2517b643924842e0230ea0bf807477cc208" +checksum = "4f47b7c52662d673df377b5ac40c121c7ff56eb764e520fae6543686132f7957" dependencies = [ "futures-buffered", "futures-util", - "iroh-quinn", "irpc-derive", "n0-error", "n0-future", + "noq", "postcard", "rcgen", "rustls", @@ -2224,9 +2208,9 @@ dependencies = [ [[package]] name = "irpc-derive" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58148196d2230183c9679431ac99b57e172000326d664e8456fa2cd27af6505a" +checksum = "83c1a4b460634aeed6dc01236a0047867de70e30562d91a0ad031dcb3ac33fb4" dependencies = [ "proc-macro2", "quote", @@ -2269,9 +2253,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.89" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4eacb0641a310445a4c513f2a5e23e19952e269c6a38887254d5f837a305506" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -2291,9 +2275,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "libm" @@ -2303,13 +2287,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" dependencies = [ "bitflags", "libc", - "redox_syscall 0.7.1", + "plain", + "redox_syscall 0.7.3", ] [[package]] @@ -2434,9 +2419,9 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.13" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac832c50ced444ef6be0767a008b02c106a909ba79d1d830501e94b96f6b7e" +checksum = "85f8024e1c8e71c778968af91d43700ce1d11b219d127d79fb2934153b82b42b" dependencies = [ "crossbeam-channel", "crossbeam-epoch", @@ -2517,9 +2502,9 @@ dependencies = [ [[package]] name = "netdev" -version = "0.40.0" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc9815643a243856e7bd84524e1ff739e901e846cfb06ad9627cd2b6d59bd737" +checksum = "1b0a0096d9613ee878dba89bbe595f079d373e3f1960d882e4f2f78ff9c30a0a" dependencies = [ "block2", "dispatch2", @@ -2528,7 +2513,7 @@ dependencies = [ "libc", "mac-addr", "netlink-packet-core", - "netlink-packet-route 0.25.1", + "netlink-packet-route", "netlink-sys", "objc2-core-foundation", "objc2-system-configuration", @@ -2548,21 +2533,9 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.25.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec2f5b6839be2a19d7fa5aab5bc444380f6311c2b693551cb80f45caaa7b5ef" -dependencies = [ - "bitflags", - "libc", - "log", - "netlink-packet-core", -] - -[[package]] -name = "netlink-packet-route" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ce3636fa715e988114552619582b530481fd5ef176a1e5c1bf024077c2c9445" +checksum = "df9854ea6ad14e3f4698a7f03b65bce0833dd2d81d594a0e4a984170537146b6" dependencies = [ "bitflags", "libc", @@ -2599,15 +2572,14 @@ dependencies = [ [[package]] name = "netwatch" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "454b8c0759b2097581f25ed5180b4a1d14c324fde6d0734932a288e044d06232" +checksum = "3b1b27babe89ef9f2237bc6c028bea24fa84163a1b6f8f17ff93573ebd7d861f" dependencies = [ "atomic-waker", "bytes", "cfg_aliases", "derive_more", - "iroh-quinn-udp", "js-sys", "libc", "n0-error", @@ -2615,14 +2587,15 @@ dependencies = [ "n0-watcher", "netdev", "netlink-packet-core", - "netlink-packet-route 0.28.0", + "netlink-packet-route", "netlink-proto", "netlink-sys", + "noq-udp", "objc2-core-foundation", "objc2-system-configuration", "pin-project-lite", "serde", - "socket2 0.6.2", + "socket2 0.6.3", "time", "tokio", "tokio-util", @@ -2643,6 +2616,68 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "noq" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df966fb44ac763bc86da97fa6c811c54ae82ef656575949f93c6dae0c9f09bf" +dependencies = [ + "bytes", + "cfg_aliases", + "noq-proto", + "noq-udp", + "pin-project-lite", + "rustc-hash", + "rustls", + "socket2 0.6.3", + "thiserror 2.0.18", + "tokio", + "tokio-stream", + "tracing", + "web-time", +] + +[[package]] +name = "noq-proto" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c61b72abd670eebc05b5cf720e077b04a3ef3354bc7bc19f1c3524cb424db7b" +dependencies = [ + "aes-gcm", + "bytes", + "derive_more", + "enum-assoc", + "fastbloom", + "getrandom 0.3.4", + "identity-hash", + "lru-slab", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "slab", + "sorted-index-buffer", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "noq-udp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb9be4fedd6b98f3ba82ccd3506f4d0219fb723c3f97c67e12fe1494aa020e44" +dependencies = [ + "cfg_aliases", + "libc", + "socket2 0.6.3", + "tracing", + "windows-sys 0.61.2", +] + [[package]] name = "ntapi" version = "0.4.3" @@ -2673,7 +2708,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2712,9 +2747,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -2722,9 +2757,9 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2743,9 +2778,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" dependencies = [ "objc2-encode", ] @@ -2814,9 +2849,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" dependencies = [ "critical-section", "portable-atomic", @@ -2828,6 +2863,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "openssl-probe" version = "0.2.1" @@ -2916,18 +2957,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", @@ -2936,9 +2977,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -2948,33 +2989,21 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkarr" -version = "5.0.2" +version = "5.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d346b545765a0ef58b6a7e160e17ddaa7427f439b7b9a287df6c88c9e04bf2" +checksum = "2f950360d31be432c0c9467fba5024a94f55128e7f32bc9d32db140369f24c77" dependencies = [ - "async-compat", "base32", "bytes", "cfg_aliases", "document-features", - "dyn-clone", "ed25519-dalek", - "futures-buffered", - "futures-lite", - "getrandom 0.3.4", - "log", - "lru", + "getrandom 0.4.2", "ntimestamp", - "reqwest", "self_cell", "serde", - "sha1_smol", "simple-dns", "thiserror 2.0.18", - "tokio", - "tracing", - "url", - "wasm-bindgen-futures", ] [[package]] @@ -2987,6 +3016,12 @@ dependencies = [ "spki", ] +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "plist" version = "1.8.0" @@ -3000,17 +3035,32 @@ dependencies = [ "time", ] +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +dependencies = [ + "serde", +] [[package]] name = "portmapper" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d2a8825353ace3285138da3378b1e21860d60351942f7aa3b99b13b41f80318" +checksum = "74748bc706fa6b6aebac6bbe0bbe0de806b384cb5c557ea974f771360a4e3858" dependencies = [ "base64", "bytes", @@ -3027,7 +3077,7 @@ dependencies = [ "rand", "serde", "smallvec", - "socket2 0.6.2", + "socket2 0.6.3", "time", "tokio", "tokio-util", @@ -3107,9 +3157,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ "toml_edit", ] @@ -3202,7 +3252,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.5.10", + "socket2 0.6.3", "thiserror 2.0.18", "tokio", "tracing", @@ -3211,9 +3261,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "bytes", "getrandom 0.3.4", @@ -3239,16 +3289,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.3", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -3259,6 +3309,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" version = "0.9.2" @@ -3344,9 +3400,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" +checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" dependencies = [ "bitflags", ] @@ -3373,9 +3429,9 @@ dependencies = [ [[package]] name = "reflink-copy" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23bbed272e39c47a095a5242218a67412a220006842558b03fe2935e8f3d7b92" +checksum = "13362233b147e57674c37b802d216b7c5e3dcccbed8967c84f0d8d223868ae27" dependencies = [ "cfg-if", "libc", @@ -3396,9 +3452,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reloadable-core" @@ -3518,14 +3574,14 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.36" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", @@ -3610,7 +3666,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3665,9 +3721,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] @@ -3714,7 +3770,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b55fb86dfd3a2f5f76ea78310a88f96c4ea21a3031f8d212443d56123fd0521" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3844,12 +3900,6 @@ dependencies = [ "digest", ] -[[package]] -name = "sha1_smol" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" - [[package]] name = "sha2" version = "0.11.0-rc.2" @@ -3940,12 +3990,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -4036,11 +4086,11 @@ dependencies = [ [[package]] name = "strum" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" dependencies = [ - "strum_macros 0.27.2", + "strum_macros 0.28.0", ] [[package]] @@ -4058,9 +4108,9 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" dependencies = [ "heck", "proc-macro2", @@ -4149,15 +4199,15 @@ checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" [[package]] name = "tempfile" -version = "3.26.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.1", + "getrandom 0.4.2", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4288,9 +4338,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -4303,25 +4353,25 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.49.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.2", + "socket2 0.6.3", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", @@ -4416,9 +4466,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.12+spec-1.1.0" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +checksum = "399b1124a3c9e16766831c6bba21e50192572cdd98706ea114f9502509686ffc" dependencies = [ "indexmap", "serde_core", @@ -4431,18 +4481,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.5+spec-1.1.0" +version = "1.0.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" dependencies = [ "indexmap", "toml_datetime", @@ -4557,9 +4607,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", @@ -4630,6 +4680,16 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common 0.1.7", + "subtle", +] + [[package]] name = "untrusted" version = "0.9.0" @@ -4663,11 +4723,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ - "getrandom 0.4.1", + "getrandom 0.4.2", "js-sys", "wasm-bindgen", ] @@ -4792,9 +4852,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.112" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d7d0fce354c88b7982aec4400b3e7fcf723c32737cef571bd165f7613557ee" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ "cfg-if", "once_cell", @@ -4805,9 +4865,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.62" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee85afca410ac4abba5b584b12e77ea225db6ee5471d0aebaae0861166f9378a" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", "futures-util", @@ -4819,9 +4879,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.112" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55839b71ba921e4f75b674cb16f843f4b1f3b26ddfcb3454de1cf65cc021ec0f" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4829,9 +4889,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.112" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf2e969c2d60ff52e7e98b7392ff1588bffdd1ccd4769eba27222fd3d621571" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ "bumpalo", "proc-macro2", @@ -4842,9 +4902,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.112" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0861f0dcdf46ea819407495634953cdcc8a8c7215ab799a7a7ce366be71c7b30" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] @@ -4898,9 +4958,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.89" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10053fbf9a374174094915bbce141e87a6bf32ecd9a002980db4b638405e8962" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -4974,7 +5034,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -5392,9 +5452,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ "memchr", ] @@ -5610,18 +5670,18 @@ checksum = "2164e798d9e3d84ee2c91139ace54638059a3b23e361f5c11781c2c6459bde0f" [[package]] name = "zerocopy" -version = "0.8.39" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.39" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 6d48a530..bd8de4ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,12 +31,12 @@ futures-buffered = "0.2.4" futures-lite = "2.3.0" futures-util = { version = "0.3.25" } hex = "0.4" -iroh = { version = "0.96.1", default-features = false } -iroh-tickets = { version = "0.2" } -iroh-blobs = { version = "0.98", default-features = false } -iroh-gossip = { version = "0.96", features = ["net"], default-features = false } +iroh = { version = "0.97", default-features = false } +iroh-tickets = { version = "0.4" } +iroh-blobs = { version = "0.99", default-features = false } +iroh-gossip = { version = "0.97", features = ["net"], default-features = false } iroh-metrics = { version = "0.38", default-features = false } -irpc = { version = "0.12.0", default-features = false } +irpc = { version = "0.13", default-features = false } n0-error = "0.1.0" n0-future = { version = "0.3.1", features = ["serde"] } num_enum = "0.7" @@ -45,7 +45,7 @@ postcard = { version = "1", default-features = false, features = [ "use-std", "experimental-derive", ] } -quinn = { package = "iroh-quinn", version = "0.16.0", optional = true } +noq = { version = "0.17.0", optional = true } rand = "0.9.2" redb = { version = "2.6.3" } self_cell = "1.0.3" @@ -61,7 +61,7 @@ tracing = "0.1" [dev-dependencies] data-encoding = "2.6.0" -iroh = { version = "0.96.1", features = ["test-utils"] } +iroh = { version = "0.97", features = ["test-utils"] } nested_enum_utils = "0.2" parking_lot = "0.12.3" proptest = "1.2.0" @@ -77,7 +77,7 @@ tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } [features] default = ["metrics", "rpc", "fs-store"] metrics = ["iroh-metrics/metrics", "iroh/metrics"] -rpc = ["dep:quinn", "irpc/rpc", "iroh-blobs/rpc"] +rpc = ["dep:noq", "irpc/rpc", "iroh-blobs/rpc"] fs-store = ["iroh-blobs/fs-store"] [package.metadata.docs.rs] diff --git a/README.md b/README.md index 24ecda7a..90088d20 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Iroh provides a [`Router`](https://docs.rs/iroh/latest/iroh/protocol/struct.Rout Here is a basic example of how to set up `iroh-docs` with `iroh`: ```rust -use iroh::{protocol::Router, Endpoint}; +use iroh::{endpoint::presets, protocol::Router, Endpoint}; use iroh_blobs::{BlobsProtocol, store::mem::MemStore, ALPN as BLOBS_ALPN}; use iroh_docs::{protocol::Docs, ALPN as DOCS_ALPN}; use iroh_gossip::{net::Gossip, ALPN as GOSSIP_ALPN}; @@ -51,7 +51,7 @@ use iroh_gossip::{net::Gossip, ALPN as GOSSIP_ALPN}; async fn main() -> anyhow::Result<()> { // create an iroh endpoint that includes the standard discovery mechanisms // we've built at number0 - let endpoint = Endpoint::builder().bind().await?; + let endpoint = Endpoint::bind(presets::N0).await?; // build the blobs protocol let blobs = MemStore::default(); diff --git a/examples/setup.rs b/examples/setup.rs index 7b015e23..8c043884 100644 --- a/examples/setup.rs +++ b/examples/setup.rs @@ -1,4 +1,4 @@ -use iroh::{protocol::Router, Endpoint}; +use iroh::{endpoint::presets, protocol::Router, Endpoint}; use iroh_blobs::{store::mem::MemStore, BlobsProtocol, ALPN as BLOBS_ALPN}; use iroh_docs::{protocol::Docs, ALPN as DOCS_ALPN}; use iroh_gossip::{net::Gossip, ALPN as GOSSIP_ALPN}; @@ -7,7 +7,7 @@ use iroh_gossip::{net::Gossip, ALPN as GOSSIP_ALPN}; async fn main() -> anyhow::Result<()> { // create an iroh endpoint that includes the standard address lookup mechanisms // we've built at number0 - let endpoint = Endpoint::builder().bind().await?; + let endpoint = Endpoint::bind(presets::N0).await?; // build the blobs protocol let blobs = MemStore::default(); diff --git a/src/api.rs b/src/api.rs index b0b3ac45..a2598a3e 100644 --- a/src/api.rs +++ b/src/api.rs @@ -63,9 +63,9 @@ impl DocsApi { /// Connect to a remote docs service #[cfg(feature = "rpc")] - pub fn connect(endpoint: quinn::Endpoint, addr: std::net::SocketAddr) -> Result { + pub fn connect(endpoint: noq::Endpoint, addr: std::net::SocketAddr) -> Result { Ok(DocsApi { - inner: Client::quinn(endpoint, addr), + inner: Client::noq(endpoint, addr), }) } @@ -73,7 +73,7 @@ impl DocsApi { #[cfg(feature = "rpc")] pub fn listen( &self, - endpoint: quinn::Endpoint, + endpoint: noq::Endpoint, ) -> Result> { use anyhow::Context; let local = self @@ -677,7 +677,7 @@ impl Future for ImportFileProgress { Poll::Ready(None) => { return Poll::Ready(Err(anyhow::anyhow!( "ImportFileProgress polled after completion" - ))) + ))); } Poll::Pending => return Poll::Pending, } diff --git a/src/engine.rs b/src/engine.rs index 3a3833da..3272322e 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -123,7 +123,7 @@ impl Engine { to_live_actor_recv, live_actor_tx.clone(), sync.metrics().clone(), - ); + )?; let actor_handle = n0_future::task::spawn( async move { if let Err(err) = actor.run().await { @@ -389,7 +389,10 @@ impl DefaultAuthorStorage { ) })?; if docs_store.export_author(author_id).await?.is_none() { - bail!("The default author is missing from the docs store. To recover, delete the file `{}`. Then iroh will create a new default author.", path.to_string_lossy()) + bail!( + "The default author is missing from the docs store. To recover, delete the file `{}`. Then iroh will create a new default author.", + path.to_string_lossy() + ) } Ok(author_id) } else { @@ -503,13 +506,17 @@ impl ProtectCallbackSender { Box::pin(async move { let (tx, rx) = oneshot::channel(); if let Err(_err) = start_tx.send(tx).await { - tracing::warn!("Failed to get protected hashes from docs: ProtectCallback receiver dropped"); + tracing::warn!( + "Failed to get protected hashes from docs: ProtectCallback receiver dropped" + ); return ProtectOutcome::Abort; } let mut rx = match rx.await { Ok(rx) => rx, Err(_err) => { - tracing::warn!("Failed to get protected hashes from docs: ProtectCallback sender dropped"); + tracing::warn!( + "Failed to get protected hashes from docs: ProtectCallback sender dropped" + ); return ProtectOutcome::Abort; } }; diff --git a/src/engine/live.rs b/src/engine/live.rs index c4a4806a..77936705 100644 --- a/src/engine/live.rs +++ b/src/engine/live.rs @@ -193,12 +193,12 @@ impl LiveActor { inbox: mpsc::Receiver, sync_actor_tx: mpsc::Sender, metrics: Arc, - ) -> Self { + ) -> Result { let (replica_events_tx, replica_events_rx) = async_channel::bounded(1024); let gossip_state = GossipState::new(gossip, sync.clone(), sync_actor_tx.clone()); let memory_lookup = MemoryLookup::new(); - endpoint.address_lookup().add(memory_lookup.clone()); - Self { + endpoint.address_lookup()?.add(memory_lookup.clone()); + Ok(Self { inbox, sync, replica_events_rx, @@ -218,7 +218,7 @@ impl LiveActor { queued_hashes: Default::default(), hash_providers: Default::default(), metrics, - } + }) } /// Run the actor loop. diff --git a/tests/client.rs b/tests/client.rs index 6ba45c6b..24bd918b 100644 --- a/tests/client.rs +++ b/tests/client.rs @@ -11,6 +11,7 @@ use self::util::{ path::{key_to_path, path_to_key}, Node, }; +use crate::util::empty_endpoint; mod util; @@ -18,7 +19,7 @@ mod util; #[tokio::test] #[traced_test] async fn test_doc_close() -> Result<()> { - let node = Node::memory().spawn().await?; + let node = Node::memory(empty_endpoint().await?).spawn().await?; // let author = node.authors().default().await?; let author = node.docs().author_default().await?; // open doc two times @@ -41,7 +42,7 @@ async fn test_doc_close() -> Result<()> { #[tokio::test] #[traced_test] async fn test_doc_import_export() -> TestResult<()> { - let node = Node::memory().spawn().await?; + let node = Node::memory(empty_endpoint().await?).spawn().await?; // create temp file let temp_dir = tempfile::tempdir().context("tempdir")?; @@ -122,7 +123,7 @@ async fn test_doc_import_export() -> TestResult<()> { #[tokio::test] async fn test_authors() -> Result<()> { - let node = Node::memory().spawn().await?; + let node = Node::memory(empty_endpoint().await?).spawn().await?; // default author always exists let authors: Vec<_> = node.docs().author_list().await?.try_collect().await?; @@ -158,7 +159,7 @@ async fn test_authors() -> Result<()> { #[tokio::test] async fn test_default_author_memory() -> Result<()> { - let iroh = Node::memory().spawn().await?; + let iroh = Node::memory(empty_endpoint().await?).spawn().await?; let author = iroh.docs().author_default().await?; assert!(iroh.docs().author_export(author).await?.is_some()); assert!(iroh.docs().author_delete(author).await.is_err()); @@ -174,7 +175,9 @@ async fn test_default_author_persist() -> TestResult<()> { // check that the default author exists and cannot be deleted. let default_author = { - let iroh = Node::persistent(iroh_root).spawn().await?; + let iroh = Node::persistent(iroh_root, empty_endpoint().await?) + .spawn() + .await?; let author = iroh.docs().author_default().await?; assert!(iroh.docs().author_export(author).await?.is_some()); assert!(iroh.docs().author_delete(author).await.is_err()); @@ -184,7 +187,9 @@ async fn test_default_author_persist() -> TestResult<()> { // check that the default author is persisted across restarts. { - let iroh = Node::persistent(iroh_root).spawn().await?; + let iroh = Node::persistent(iroh_root, empty_endpoint().await?) + .spawn() + .await?; let author = iroh.docs().author_default().await?; assert_eq!(author, default_author); assert!(iroh.docs().author_export(author).await?.is_some()); @@ -196,7 +201,9 @@ async fn test_default_author_persist() -> TestResult<()> { // manually. let default_author = { tokio::fs::remove_file(iroh_root.join("default-author")).await?; - let iroh = Node::persistent(iroh_root).spawn().await?; + let iroh = Node::persistent(iroh_root, empty_endpoint().await?) + .spawn() + .await?; let author = iroh.docs().author_default().await?; assert!(author != default_author); assert!(iroh.docs().author_export(author).await?.is_some()); @@ -211,7 +218,9 @@ async fn test_default_author_persist() -> TestResult<()> { docs_store.delete_author(default_author)?; docs_store.flush()?; drop(docs_store); - let iroh = Node::persistent(iroh_root).spawn().await; + let iroh = Node::persistent(iroh_root, empty_endpoint().await?) + .spawn() + .await; assert!(iroh.is_err()); // somehow the blob store is not shutdown correctly (yet?) on macos. @@ -221,7 +230,9 @@ async fn test_default_author_persist() -> TestResult<()> { tokio::fs::remove_file(iroh_root.join("default-author")).await?; drop(iroh); - let iroh = Node::persistent(iroh_root).spawn().await; + let iroh = Node::persistent(iroh_root, empty_endpoint().await?) + .spawn() + .await; if let Err(cause) = iroh.as_ref() { panic!("failed to start node: {cause:?}"); } @@ -230,7 +241,9 @@ async fn test_default_author_persist() -> TestResult<()> { // check that the default author can be set manually and is persisted. let default_author = { - let iroh = Node::persistent(iroh_root).spawn().await?; + let iroh = Node::persistent(iroh_root, empty_endpoint().await?) + .spawn() + .await?; let author = iroh.docs().author_create().await?; iroh.docs().author_set_default(author).await?; assert_eq!(iroh.docs().author_default().await?, author); @@ -238,7 +251,9 @@ async fn test_default_author_persist() -> TestResult<()> { author }; { - let iroh = Node::persistent(iroh_root).spawn().await?; + let iroh = Node::persistent(iroh_root, empty_endpoint().await?) + .spawn() + .await?; assert_eq!(iroh.docs().author_default().await?, default_author); iroh.shutdown().await?; } diff --git a/tests/gc.rs b/tests/gc.rs index 0f28e251..ffe8276c 100644 --- a/tests/gc.rs +++ b/tests/gc.rs @@ -27,7 +27,8 @@ async fn persistent_node( gc_period: Duration, ) -> (Node, async_channel::Receiver<()>) { let (gc_send, gc_recv) = async_channel::unbounded(); - let node = Node::persistent(path) + let ep = iroh::Endpoint::empty_builder().bind().await.unwrap(); + let node = Node::persistent(path, ep) .gc_interval(Some(gc_period)) .register_gc_done_cb(Box::new(move || { gc_send.send_blocking(()).ok(); diff --git a/tests/sync.rs b/tests/sync.rs index 3037ec6d..d6c3ef5f 100644 --- a/tests/sync.rs +++ b/tests/sync.rs @@ -4,7 +4,7 @@ use anyhow::{anyhow, bail, Context, Result}; use bytes::Bytes; use futures_lite::Stream; use futures_util::{FutureExt, StreamExt, TryStreamExt}; -use iroh::{PublicKey, RelayMode, SecretKey}; +use iroh::{Endpoint, PublicKey, SecretKey}; use iroh_blobs::Hash; use iroh_docs::{ api::{ @@ -24,12 +24,16 @@ use tracing_test::traced_test; mod util; use util::{Builder, Node}; +use crate::util::empty_endpoint; + const TIMEOUT: Duration = Duration::from_secs(60); -fn test_node(secret_key: SecretKey) -> Builder { - Node::memory() +async fn test_node(secret_key: SecretKey) -> Result { + let ep = Endpoint::empty_builder() .secret_key(secret_key) - .relay_mode(RelayMode::Disabled) + .bind() + .await?; + Ok(Node::memory(ep)) } // The function is not `async fn` so that we can take a `&mut` borrow on the `rng` without @@ -41,7 +45,7 @@ fn spawn_node( ) -> impl Future> + 'static { let secret_key = SecretKey::generate(rng); async move { - let node = test_node(secret_key); + let node = test_node(secret_key).await?; let node = node.spawn().await?; info!(?i, me = %node.id().fmt_short(), "node spawned"); Ok(node) @@ -487,17 +491,23 @@ async fn sync_subscribe_stop_close() -> Result<()> { async fn test_sync_via_relay() -> Result<()> { let (relay_map, _relay_url, _guard) = iroh::test_utils::run_relay_server().await?; - let node1 = Node::memory() - .relay_mode(RelayMode::Custom(relay_map.clone())) - .insecure_skip_relay_cert_verify(true) - .spawn() - .await?; + use crate::util::endpoint; + + let ep1 = endpoint( + SecretKey::generate(&mut rand::rng()), + relay_map.clone(), + None, + ) + .await?; + let node1 = Node::memory(ep1).spawn().await?; let node1_id = node1.id(); - let node2 = Node::memory() - .relay_mode(RelayMode::Custom(relay_map.clone())) - .insecure_skip_relay_cert_verify(true) - .spawn() - .await?; + let ep2 = endpoint( + SecretKey::generate(&mut rand::rng()), + relay_map.clone(), + None, + ) + .await?; + let node2 = Node::memory(ep2).spawn().await?; node1.online().await; node2.online().await; @@ -587,6 +597,8 @@ async fn test_sync_via_relay() -> Result<()> { #[ignore = "flaky"] #[cfg(feature = "fs-store")] async fn sync_restart_node() -> Result<()> { + use crate::util::endpoint; + let mut rng = test_rng(b"sync_restart_node"); let (relay_map, _relay_url, _guard) = iroh::test_utils::run_relay_server().await?; @@ -595,14 +607,13 @@ async fn sync_restart_node() -> Result<()> { let node1_dir = tempfile::TempDir::with_prefix("test-sync_restart_node-node1")?; let secret_key_1 = SecretKey::generate(&mut rng); - let node1 = Node::persistent(&node1_dir) - .secret_key(secret_key_1.clone()) - .insecure_skip_relay_cert_verify(true) - .relay_mode(RelayMode::Custom(relay_map.clone())) - .dns_resolver(lookup_server.dns_resolver()) - .node_address_lookup(lookup_server.address_lookup(secret_key_1.clone())) - .spawn() - .await?; + let ep = endpoint( + secret_key_1.clone(), + relay_map.clone(), + Some(&lookup_server), + ) + .await?; + let node1 = Node::persistent(&node1_dir, ep).spawn().await?; let id1 = node1.id(); // create doc & ticket on node1 @@ -615,14 +626,8 @@ async fn sync_restart_node() -> Result<()> { // create node2 let secret_key_2 = SecretKey::generate(&mut rng); - let node2 = Node::memory() - .secret_key(secret_key_2.clone()) - .relay_mode(RelayMode::Custom(relay_map.clone())) - .insecure_skip_relay_cert_verify(true) - .dns_resolver(lookup_server.dns_resolver()) - .node_address_lookup(lookup_server.address_lookup(secret_key_2.clone())) - .spawn() - .await?; + let ep = endpoint(secret_key_2, relay_map.clone(), Some(&lookup_server)).await?; + let node2 = Node::memory(ep).spawn().await?; let id2 = node2.id(); let author2 = node2.docs().author_create().await?; let doc2 = node2.docs().import(ticket.clone()).await?; @@ -661,14 +666,13 @@ async fn sync_restart_node() -> Result<()> { let hash_b = doc2.set_bytes(author2, "n2/b", "b").await?; info!(me = %id1.fmt_short(), "node1 respawn"); - let node1 = Node::persistent(&node1_dir) - .secret_key(secret_key_1.clone()) - .insecure_skip_relay_cert_verify(true) - .relay_mode(RelayMode::Custom(relay_map.clone())) - .dns_resolver(lookup_server.dns_resolver()) - .node_address_lookup(lookup_server.address_lookup(secret_key_1.clone())) - .spawn() - .await?; + let ep = endpoint( + secret_key_1.clone(), + relay_map.clone(), + Some(&lookup_server), + ) + .await?; + let node1 = Node::persistent(&node1_dir, ep).spawn().await?; assert_eq!(id1, node1.id()); let doc1 = node1.docs().open(doc1.id()).await?.expect("doc to exist"); @@ -985,10 +989,7 @@ async fn sync_big() -> Result<()> { #[tokio::test] #[traced_test] async fn test_list_docs_stream() -> testresult::TestResult<()> { - let node = Node::memory() - .relay_mode(RelayMode::Disabled) - .spawn() - .await?; + let node = Node::memory(empty_endpoint().await?).spawn().await?; let count = 200; // create docs @@ -1163,7 +1164,8 @@ async fn doc_delete() -> Result<()> { let tempdir = tempdir()?; // TODO(Frando): iroh-blobs has gc only for fs store atm, change test to test both // mem and persistent once this changes. - let node = Node::persistent(tempdir.path()) + let ep = empty_endpoint().await?; + let node = Node::persistent(tempdir.path(), ep) .gc_interval(Some(Duration::from_millis(100))) .spawn() .await?; diff --git a/tests/util.rs b/tests/util.rs index a048701f..bb3568c1 100644 --- a/tests/util.rs +++ b/tests/util.rs @@ -1,35 +1,46 @@ #![allow(unused)] use std::{ - net::{Ipv4Addr, Ipv6Addr, SocketAddrV4, SocketAddrV6}, ops::Deref, path::{Path, PathBuf}, }; -use iroh::{address_lookup::IntoAddressLookup, dns::DnsResolver, EndpointId, RelayMode, SecretKey}; +use iroh::{ + endpoint::BindError, test_utils::DnsPkarrServer, tls::CaRootsConfig, Endpoint, EndpointId, + RelayMap, RelayMode, SecretKey, +}; use iroh_blobs::store::GcConfig; use iroh_docs::{engine::ProtectCallbackHandler, protocol::Docs}; use iroh_gossip::net::Gossip; +use n0_error::Result; -/// Default bind address for the node. -/// 11204 is "iroh" in leetspeak -pub const DEFAULT_BIND_PORT: u16 = 11204; +pub async fn empty_endpoint() -> Result { + Endpoint::empty_builder().bind().await +} -/// The default bind address for the iroh IPv4 socket. -pub const DEFAULT_BIND_ADDR_V4: SocketAddrV4 = - SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, DEFAULT_BIND_PORT); +pub async fn endpoint( + secret_key: SecretKey, + relay_map: RelayMap, + dns_pkarr_server: Option<&DnsPkarrServer>, +) -> Result { + let mut builder = Endpoint::empty_builder(); + if let Some(dns_pkarr_server) = dns_pkarr_server { + builder = builder.preset(dns_pkarr_server.preset()); + } -/// The default bind address for the iroh IPv6 socket. -pub const DEFAULT_BIND_ADDR_V6: SocketAddrV6 = - SocketAddrV6::new(Ipv6Addr::UNSPECIFIED, DEFAULT_BIND_PORT + 1, 0, 0); + builder + .secret_key(secret_key) + .relay_mode(RelayMode::Custom(relay_map)) + .ca_roots_config(CaRootsConfig::insecure_skip_verify()) + .bind() + .await +} /// An iroh node that just has the blobs transport #[derive(Debug)] pub struct Node { router: iroh::protocol::Router, client: Client, - // store: iroh_blobs::api::Store, - // rpc_task: AbortOnDropHandle<()>, } impl Deref for Node { @@ -63,13 +74,11 @@ impl Client { /// An iroh node builder #[derive(derive_more::Debug)] pub struct Builder { - endpoint: iroh::endpoint::Builder, - use_n0_address_lookup: bool, + endpoint: iroh::Endpoint, storage: Storage, gc_interval: Option, #[debug(skip)] register_gc_done_cb: Option>, - bind_random_port: bool, } impl Builder { @@ -79,24 +88,8 @@ impl Builder { blobs: iroh_blobs::api::Store, protect_cb: Option, ) -> anyhow::Result { - let mut addr_v4 = DEFAULT_BIND_ADDR_V4; - let mut addr_v6 = DEFAULT_BIND_ADDR_V6; - if self.bind_random_port { - addr_v4.set_port(0); - addr_v6.set_port(0); - } - let mut builder = self.endpoint.bind_addr(addr_v4)?.bind_addr(addr_v6)?; - if self.use_n0_address_lookup { - builder = builder.address_lookup(iroh::address_lookup::pkarr::PkarrPublisher::n0_dns()); - // Resolve using HTTPS requests to our DNS server's /pkarr path in browsers - builder = builder.address_lookup(iroh::address_lookup::pkarr::PkarrResolver::n0_dns()); - // Resolve using DNS queries outside browsers. - builder = builder.address_lookup(iroh::address_lookup::dns::DnsAddressLookup::n0_dns()); - } - - let endpoint = builder.bind().await?; - let mut router = iroh::protocol::Router::builder(endpoint.clone()); - let gossip = Gossip::builder().spawn(endpoint.clone()); + let mut router = iroh::protocol::Router::builder(self.endpoint.clone()); + let gossip = Gossip::builder().spawn(self.endpoint.clone()); let mut docs_builder = match self.storage { Storage::Memory => Docs::memory(), #[cfg(feature = "fs-store")] @@ -106,7 +99,7 @@ impl Builder { docs_builder = docs_builder.protect_handler(protect_cb); } let docs = match docs_builder - .spawn(endpoint.clone(), blobs.clone(), gossip.clone()) + .spawn(self.endpoint.clone(), blobs.clone(), gossip.clone()) .await { Ok(docs) => docs, @@ -125,43 +118,8 @@ impl Builder { // Build the router let router = router.spawn(); - // TODO: Make this work again. - // if let Some(period) = self.gc_interval { - // blobs.add_protected(docs.protect_cb())?; - // blobs.start_gc(GcConfig { - // period, - // done_callback: self.register_gc_done_cb, - // })?; - // } - let client = Client::new(blobs.clone(), docs.api().clone()); - Ok(Node { - router, - client, - // store: blobs, - // rpc_task: AbortOnDropHandle::new(rpc_task), - }) - } - - pub fn secret_key(mut self, value: SecretKey) -> Self { - self.endpoint = self.endpoint.secret_key(value); - self - } - - pub fn relay_mode(mut self, value: RelayMode) -> Self { - self.endpoint = self.endpoint.relay_mode(value); - self - } - - pub fn dns_resolver(mut self, value: DnsResolver) -> Self { - self.endpoint = self.endpoint.dns_resolver(value); - self - } - - pub fn node_address_lookup(mut self, value: impl IntoAddressLookup) -> Self { - self.use_n0_address_lookup = false; - self.endpoint = self.endpoint.address_lookup(value); - self + Ok(Node { router, client }) } pub fn gc_interval(mut self, value: Option) -> Self { @@ -174,26 +132,12 @@ impl Builder { self } - pub fn insecure_skip_relay_cert_verify(mut self, value: bool) -> Self { - self.endpoint = self.endpoint.insecure_skip_relay_cert_verify(value); - self - } - - pub fn bind_random_port(mut self, bind_random_port: bool) -> Self { - self.bind_random_port = bind_random_port; - self - } - - fn new(storage: Storage) -> Self { + fn new(storage: Storage, endpoint: Endpoint) -> Self { Self { - endpoint: iroh::Endpoint::empty_builder(RelayMode::Disabled), - use_n0_address_lookup: true, + endpoint, storage, gc_interval: None, - bind_random_port: true, - // node_address_lookup: None, register_gc_done_cb: None, - // _p: PhantomData, } } } @@ -207,14 +151,14 @@ enum Storage { impl Node { /// Creates a new node with memory storage - pub fn memory() -> Builder { - Builder::new(Storage::Memory) + pub fn memory(endpoint: Endpoint) -> Builder { + Builder::new(Storage::Memory, endpoint) } /// Creates a new node with persistent storage #[cfg(feature = "fs-store")] - pub fn persistent(path: impl AsRef) -> Builder { - Builder::new(Storage::Persistent(path.as_ref().to_owned())) + pub fn persistent(path: impl AsRef, endpoint: Endpoint) -> Builder { + Builder::new(Storage::Persistent(path.as_ref().to_owned()), endpoint) } } @@ -254,11 +198,6 @@ impl Node { self.router.endpoint().id() } - // /// Returns the blob store - // pub fn blob_store(&self) -> &S { - // &self.store - // } - /// Ensure the node is "online", aka, is connected to a relay and /// has a direct addresses pub async fn online(&self) { @@ -268,7 +207,6 @@ impl Node { /// Shuts down the node pub async fn shutdown(self) -> anyhow::Result<()> { self.router.shutdown().await?; - // self.rpc_task.abort(); Ok(()) }