From 4ed17e55a3b5d1f4cc46bba9ed3202e44754b876 Mon Sep 17 00:00:00 2001 From: durch Date: Fri, 7 Jun 2024 11:44:18 +0200 Subject: [PATCH 001/139] serde for ReconstructedMessage --- Cargo.lock | 13069 ---------------- common/nymsphinx/Cargo.toml | 13 +- .../anonymous-replies/src/requests/mod.rs | 3 +- common/nymsphinx/src/receiver.rs | 28 +- scratch.txt | 434 + 5 files changed, 468 insertions(+), 13079 deletions(-) delete mode 100644 Cargo.lock create mode 100644 scratch.txt diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 6e67ab43089..00000000000 --- a/Cargo.lock +++ /dev/null @@ -1,13069 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "accessory" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e416a3ab45838bac2ab2d81b1088d738d7b2d2c5272a54d39366565a29bd80" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "addr" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" -dependencies = [ - "psl", - "psl-types", -] - -[[package]] -name = "adler2" -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", - "generic-array 0.14.7", -] - -[[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 2.6.1", -] - -[[package]] -name = "aes-gcm-siv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "polyval", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "ammonia" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b346764dd0814805de8abf899fe03065bcee69bb1a4771c785817e39f3978f" -dependencies = [ - "cssparser", - "html5ever", - "maplit", - "tendril", - "url", -] - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstream" -version = "0.6.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.59.0", -] - -[[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - -[[package]] -name = "arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - -[[package]] -name = "argon2" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" -dependencies = [ - "base64ct", - "blake2 0.10.6", - "cpufeatures", - "password-hash", -] - -[[package]] -name = "ark-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "rayon", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rayon", - "rustc_version 0.4.1", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand 0.8.5", - "rayon", -] - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "askama" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7" -dependencies = [ - "askama_derive", - "itoa", - "percent-encoding", - "serde", - "serde_json", -] - -[[package]] -name = "askama_derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac" -dependencies = [ - "askama_parser", - "basic-toml", - "memchr", - "proc-macro2", - "quote", - "rustc-hash", - "serde", - "serde_derive", - "syn 2.0.104", -] - -[[package]] -name = "askama_parser" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f" -dependencies = [ - "memchr", - "serde", - "serde_derive", - "winnow", -] - -[[package]] -name = "assert-json-diff" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - -[[package]] -name = "async-compression" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddb939d66e4ae03cee6091612804ba446b12878410cfa17f785f4dd67d4014e8" -dependencies = [ - "brotli", - "flate2", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", - "zstd", - "zstd-safe", -] - -[[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener 5.4.0", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "async-trait" -version = "0.1.88" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "async-tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3609af4bbf701ddaf1f6bb4e6257dff4ff8932327d0e685d3f653724c258b1ac" -dependencies = [ - "futures-io", - "futures-util", - "log", - "pin-project-lite", - "rustls-native-certs 0.7.3", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.25.0", - "tungstenite 0.21.0", -] - -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "auto-future" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "autodoc" -version = "0.1.0" -dependencies = [ - "env_logger", - "log", -] - -[[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.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.6.0", - "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.2", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-client-ip" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" -dependencies = [ - "axum", - "forwarded-header-value", - "serde", -] - -[[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.3.1", - "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-extra" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" -dependencies = [ - "axum", - "axum-core", - "bytes", - "fastrand 2.3.0", - "futures-util", - "headers", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "mime", - "multer", - "pin-project-lite", - "serde", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - -[[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.104", -] - -[[package]] -name = "axum-test" -version = "16.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e3a443d2608936a02a222da7b746eb412fede7225b3030b64fe9be99eab8dc" -dependencies = [ - "anyhow", - "assert-json-diff", - "auto-future", - "axum", - "bytes", - "bytesize", - "cookie", - "http 1.3.1", - "http-body-util", - "hyper 1.6.0", - "hyper-util", - "mime", - "pretty_assertions", - "reserve-port", - "rust-multipart-rfc7578_2", - "serde", - "serde_json", - "serde_urlencoded", - "smallvec", - "tokio", - "tower 0.5.2", - "url", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" - -[[package]] -name = "base85rs" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87678d33a2af71f019ed11f52db246ca6c5557edee2cccbe689676d1ad9c6b5a" - -[[package]] -name = "basic-toml" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" -dependencies = [ - "serde", -] - -[[package]] -name = "bech32" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "binstring" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" - -[[package]] -name = "bip32" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" -dependencies = [ - "bs58", - "hmac", - "k256", - "rand_core 0.6.4", - "ripemd", - "secp256k1", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "bip39" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "rand_core 0.6.4", - "serde", - "unicode-normalization", - "zeroize", -] - -[[package]] -name = "bitcoin-internals" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" - -[[package]] -name = "bitcoin_hashes" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" -dependencies = [ - "bitcoin-internals", - "hex-conservative", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" -dependencies = [ - "serde", -] - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "digest 0.10.7", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "bloomfilter" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" -dependencies = [ - "getrandom 0.2.16", - "siphasher 1.0.1", -] - -[[package]] -name = "bls12_381" -version = "0.8.0" -source = "git+https://github.com/jstuczyn/bls12_381?branch=temp%2Fexperimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" -dependencies = [ - "digest 0.10.7", - "ff", - "group", - "pairing", - "rand_core 0.6.4", - "serde", - "serdect 0.3.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "bnum" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" - -[[package]] -name = "brotli" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "sha2 0.10.9", - "tinyvec", -] - -[[package]] -name = "bumpalo" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "bytecodec" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" -dependencies = [ - "byteorder", - "trackable 0.2.24", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -dependencies = [ - "serde", -] - -[[package]] -name = "bytesize" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" - -[[package]] -name = "camino" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.26", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.26", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "castaway" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" - -[[package]] -name = "cc" -version = "1.2.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" -dependencies = [ - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "celes" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" -dependencies = [ - "phf", - "serde", -] - -[[package]] -name = "cfg-if" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", -] - -[[package]] -name = "chrono" -version = "0.4.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-link 0.1.3", -] - -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "clap" -version = "4.5.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_complete" -version = "4.5.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5abde44486daf70c5be8b8f8f1b66c49f86236edf6fa2abadb4d961c4c6229a" -dependencies = [ - "clap", -] - -[[package]] -name = "clap_complete_fig" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" -dependencies = [ - "clap", - "clap_complete", -] - -[[package]] -name = "clap_derive" -version = "4.5.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "clap_lex" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" - -[[package]] -name = "coarsetime" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" -dependencies = [ - "libc", - "wasix", - "wasm-bindgen", -] - -[[package]] -name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "colored" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" -dependencies = [ - "lazy_static", - "windows-sys 0.48.0", -] - -[[package]] -name = "comfy-table" -version = "7.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" -dependencies = [ - "crossterm 0.28.1", - "unicode-segmentation", - "unicode-width 0.2.1", -] - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "console" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width 0.2.1", - "windows-sys 0.60.2", -] - -[[package]] -name = "console-api" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" -dependencies = [ - "futures-core", - "prost", - "prost-types", - "tonic 0.12.3", - "tracing-core", -] - -[[package]] -name = "console-subscriber" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" -dependencies = [ - "console-api", - "crossbeam-channel", - "crossbeam-utils", - "futures-task", - "hdrhistogram", - "humantime", - "hyper-util", - "prost", - "prost-types", - "serde", - "serde_json", - "thread_local", - "tokio", - "tokio-stream", - "tonic 0.12.3", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const-str" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" - -[[package]] -name = "const_format" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" -dependencies = [ - "const_format_proc_macros", -] - -[[package]] -name = "const_format_proc_macros" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - -[[package]] -name = "cookie" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" -dependencies = [ - "time", - "version_check", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cosmos-sdk-proto" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ac39be7373404accccaede7cc1ec942ccef14f0ca18d209967a756bf1dbb1f" -dependencies = [ - "informalsystems-pbjson", - "prost", - "serde", - "tendermint-proto", - "tonic 0.13.1", -] - -[[package]] -name = "cosmrs" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34e74fa7a22930fe0579bef560f2d64b78415d4c47b9dd976c0635136809471d" -dependencies = [ - "bip32", - "cosmos-sdk-proto", - "ecdsa", - "eyre", - "k256", - "rand_core 0.6.4", - "serde", - "serde_json", - "signature", - "subtle-encoding", - "tendermint", - "tendermint-rpc", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-core" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" - -[[package]] -name = "cosmwasm-crypto" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", - "cosmwasm-core", - "curve25519-dalek", - "digest 0.10.7", - "ecdsa", - "ed25519-zebra", - "k256", - "num-traits", - "p256", - "rand_core 0.6.4", - "rayon", - "sha2 0.10.9", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "cosmwasm-schema" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" -dependencies = [ - "cosmwasm-schema-derive", - "schemars 0.8.22", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "cosmwasm-std" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" -dependencies = [ - "base64 0.22.1", - "bech32", - "bnum", - "cosmwasm-core", - "cosmwasm-crypto", - "cosmwasm-derive", - "derive_more 1.0.0", - "hex", - "rand_core 0.6.4", - "rmp-serde", - "schemars 0.8.22", - "serde", - "serde-json-wasm", - "sha2 0.10.9", - "static_assertions", - "thiserror 1.0.69", -] - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "criterion" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "futures", - "is-terminal", - "itertools 0.10.5", - "num-traits", - "once_cell", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools 0.10.5", -] - -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crossterm" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" -dependencies = [ - "bitflags 1.3.2", - "crossterm_winapi", - "libc", - "mio 0.8.11", - "parking_lot", - "signal-hook", - "signal-hook-mio", - "winapi", -] - -[[package]] -name = "crossterm" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" -dependencies = [ - "bitflags 2.9.1", - "crossterm_winapi", - "parking_lot", - "rustix 0.38.44", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - -[[package]] -name = "cssparser" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "phf", - "smallvec", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.104", -] - -[[package]] -name = "csv" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" -dependencies = [ - "memchr", -] - -[[package]] -name = "ct-codecs" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8" - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "cupid" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1" -dependencies = [ - "gcc", - "rustc_version 0.2.3", -] - -[[package]] -name = "curl" -version = "0.4.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2d5c8f48d9c0c23250e52b55e82a6ab4fdba6650c931f5a0a57a43abda812b" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2 0.5.10", - "windows-sys 0.59.0", -] - -[[package]] -name = "curl-sys" -version = "0.4.82+curl-8.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d63638b5ec65f1a4ae945287b3fd035be4554bbaf211901159c9a2a74fb5be" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.59.0", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version 0.4.1", - "serde", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "curve25519-dalek-ng" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", - "subtle-ng", - "zeroize", -] - -[[package]] -name = "cw-controllers" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw-multi-test" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" -dependencies = [ - "anyhow", - "bech32", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "itertools 0.14.0", - "prost", - "schemars 0.8.22", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", -] - -[[package]] -name = "cw-storage-plus" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" -dependencies = [ - "cosmwasm-std", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "cw-utils" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "semver 1.0.26", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw20" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "cw3" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw20", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw4" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.104", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "serde", -] - -[[package]] -name = "data-encoding" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - -[[package]] -name = "defguard_wireguard_rs" -version = "0.4.7" -source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.4.7#ef1cf3714629bf5016fb38cbb7320451dc69fb09" -dependencies = [ - "base64 0.22.1", - "libc", - "log", - "netlink-packet-core", - "netlink-packet-generic", - "netlink-packet-route", - "netlink-packet-utils", - "netlink-packet-wireguard", - "netlink-sys", - "nix 0.29.0", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "delegate-display" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9926686c832494164c33a36bf65118f4bd6e704000b58c94681bf62e9ad67a74" -dependencies = [ - "impartial-ord", - "itoa", - "macroific", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn 2.0.104", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - -[[package]] -name = "derive_more" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" -dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "unicode-xid", -] - -[[package]] -name = "derive_more-impl" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "unicode-xid", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle 2.6.1", -] - -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "dkg-bypass-contract" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "nym-coconut-dkg-common", - "nym-contracts-common", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - -[[package]] -name = "dtoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dyn-clone" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" - -[[package]] -name = "easy-addr" -version = "0.1.0" -dependencies = [ - "cosmwasm-std", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "serdect 0.2.0", - "signature", - "spki", -] - -[[package]] -name = "echo-server" -version = "0.1.0" -dependencies = [ - "anyhow", - "bincode", - "bytecodec", - "bytes", - "clap", - "dashmap", - "dirs", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-sdk", - "serde", - "tempfile", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "tracing-subscriber", - "uuid", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "serde", - "signature", -] - -[[package]] -name = "ed25519-compact" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" -dependencies = [ - "ct-codecs", - "getrandom 0.2.16", -] - -[[package]] -name = "ed25519-consensus" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" -dependencies = [ - "curve25519-dalek-ng", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-dalek" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core 0.6.4", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "hashbrown 0.14.5", - "hex", - "rand_core 0.6.4", - "sha2 0.10.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -dependencies = [ - "serde", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array 0.14.7", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "serdect 0.2.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "env_filter" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "jiff", - "log", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - -[[package]] -name = "etherparse" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827292ea592108849932ad8e30218f8b1f21c0dfd0696698a18b5d0aed62d990" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener 5.4.0", - "pin-project-lite", -] - -[[package]] -name = "extension-storage" -version = "1.4.1" -dependencies = [ - "bip39", - "console_error_panic_hook", - "js-sys", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-storage", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fancy_constructor" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - -[[package]] -name = "filetime" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flex-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" -dependencies = [ - "eyre", - "paste", -] - -[[package]] -name = "flume" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" -dependencies = [ - "futures-core", - "futures-sink", - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "forwarded-header-value" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" -dependencies = [ - "nonempty", - "thiserror 1.0.69", -] - -[[package]] -name = "fs-err" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" -dependencies = [ - "autocfg", -] - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-intrusive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "gcc" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" - -[[package]] -name = "generator" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows", -] - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "serde", - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug 0.3.1", - "polyval", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "gloo-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.2.0", - "http 1.3.1", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror 1.0.69", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-utils" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-utils" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "goblin" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" -dependencies = [ - "log", - "plain", - "scroll", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.10.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.3.1", - "indexmap 2.10.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" -dependencies = [ - "cfg-if", - "crunchy", -] - -[[package]] -name = "handlebars" -version = "3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" -dependencies = [ - "log", - "pest", - "pest_derive", - "quick-error", - "serde", - "serde_json", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hashbrown" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashlink" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" -dependencies = [ - "hashbrown 0.15.4", -] - -[[package]] -name = "hdrhistogram" -version = "7.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" -dependencies = [ - "base64 0.21.7", - "byteorder", - "flate2", - "nom", - "num-traits", -] - -[[package]] -name = "headers" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" -dependencies = [ - "base64 0.22.1", - "bytes", - "headers-core", - "http 1.3.1", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http 1.3.1", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-conservative" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" - -[[package]] -name = "hex-literal" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - -[[package]] -name = "hickory-proto" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" -dependencies = [ - "async-trait", - "bytes", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "h2 0.4.11", - "http 1.3.1", - "idna", - "ipnet", - "once_cell", - "rand 0.9.2", - "ring", - "rustls 0.23.29", - "thiserror 2.0.17", - "tinyvec", - "tokio", - "tokio-rustls 0.26.2", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "hickory-resolver" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "moka", - "once_cell", - "parking_lot", - "rand 0.9.2", - "resolv-conf", - "rustls 0.23.29", - "smallvec", - "thiserror 2.0.17", - "tokio", - "tokio-rustls 0.26.2", - "tracing", - "webpki-roots 0.26.11", -] - -[[package]] -name = "hidapi" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" -dependencies = [ - "cc", - "libc", - "pkg-config", - "winapi", -] - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha1-compact" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" - -[[package]] -name = "hmac-sha256" -version = "1.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha512" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "html5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" -dependencies = [ - "log", - "markup5ever", - "match_token", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.3.1", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http 1.3.1", - "http-body 1.0.1", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpcodec" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" -dependencies = [ - "bytecodec", - "trackable 0.2.24", -] - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "humantime" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" - -[[package]] -name = "humantime-serde" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" -dependencies = [ - "humantime", - "serde", -] - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.11", - "http 1.3.1", - "http-body 1.0.1", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http 1.3.1", - "hyper 1.6.0", - "hyper-util", - "rustls 0.23.29", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.2", - "tower-service", - "webpki-roots 1.0.2", -] - -[[package]] -name = "hyper-timeout" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" -dependencies = [ - "hyper 1.6.0", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.6.0", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.0", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ibc-proto" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a650b51e384e54264b53974feb38e95e37aac70f7f2f9c07eb8022fe15eb8e20" -dependencies = [ - "base64 0.22.1", - "bytes", - "cosmos-sdk-proto", - "flex-error", - "ics23", - "informalsystems-pbjson", - "prost", - "serde", - "subtle-encoding", - "tendermint-proto", - "tonic 0.13.1", -] - -[[package]] -name = "ics23" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b17f1a5bd7d12ad30a21445cfa5f52fd7651cb3243ba866f9916b1ec112f12" -dependencies = [ - "anyhow", - "bytes", - "hex", - "informalsystems-pbjson", - "prost", - "serde", -] - -[[package]] -name = "icu_collections" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" - -[[package]] -name = "icu_provider" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" -dependencies = [ - "displaydoc", - "icu_locale_core", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "impartial-ord" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "importer-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "bip39", - "clap", - "dirs", - "importer-contract", - "nym-bin-common", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-validator-client", - "nym-vesting-contract-common", - "serde", - "serde_json", - "tokio", - "tracing", -] - -[[package]] -name = "importer-contract" -version = "0.1.0" -dependencies = [ - "base85rs", - "cosmwasm-schema", - "cosmwasm-std", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexed_db_futures" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" -dependencies = [ - "accessory", - "cfg-if", - "delegate-display", - "derive_more 2.0.1", - "fancy_constructor", - "indexed_db_futures_macros_internal", - "js-sys", - "sealed", - "smallvec", - "thiserror 2.0.17", - "tokio", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "indexed_db_futures_macros_internal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caeba94923b68f254abef921cea7e7698bf4675fdd89d7c58bf1ed885b49a27d" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" -dependencies = [ - "equivalent", - "hashbrown 0.15.4", - "serde", -] - -[[package]] -name = "indicatif" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" -dependencies = [ - "console", - "portable-atomic", - "unicode-width 0.2.1", - "unit-prefix", - "vt100", - "web-time", -] - -[[package]] -name = "informalsystems-pbjson" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa4a0980c8379295100d70854354e78df2ee1c6ca0f96ffe89afeb3140e3a3d" -dependencies = [ - "base64 0.21.7", - "serde", -] - -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "block-padding", - "generic-array 0.14.7", -] - -[[package]] -name = "inquire" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" -dependencies = [ - "bitflags 1.3.2", - "crossterm 0.25.0", - "dyn-clone", - "lazy_static", - "newline-converter", - "thiserror 1.0.69", - "unicode-segmentation", - "unicode-width 0.1.14", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - -[[package]] -name = "inventory" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" -dependencies = [ - "rustversion", -] - -[[package]] -name = "ip_network" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" - -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2 0.5.10", - "widestring", - "windows-sys 0.48.0", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "ipnetwork" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" -dependencies = [ - "serde", -] - -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "isahc" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" -dependencies = [ - "async-channel", - "castaway", - "crossbeam-utils", - "curl", - "curl-sys", - "event-listener 2.5.3", - "futures-lite", - "http 0.2.12", - "log", - "once_cell", - "polling", - "slab", - "sluice", - "tracing", - "tracing-futures", - "url", - "waker-fn", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jiff" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" -dependencies = [ - "jiff-static", - "log", - "portable-atomic", - "portable-atomic-util", - "serde", -] - -[[package]] -name = "jiff-static" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "jobserver" -version = "0.1.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" -dependencies = [ - "getrandom 0.3.3", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jwt-simple" -version = "0.12.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad8761f175784dfbb83709f322fc4daf6b27afd5bf375492f2876f9e925ef5a" -dependencies = [ - "anyhow", - "binstring", - "blake2b_simd", - "coarsetime", - "ct-codecs", - "ed25519-compact", - "hmac-sha1-compact", - "hmac-sha256", - "hmac-sha512", - "k256", - "p256", - "p384", - "rand 0.8.5", - "serde", - "serde_json", - "superboring", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "k256" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2 0.10.9", - "signature", -] - -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - -[[package]] -name = "kqueue" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "ledger-apdu" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" -dependencies = [ - "arrayref", - "no-std-compat", - "snafu", -] - -[[package]] -name = "ledger-transport" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" -dependencies = [ - "async-trait", - "ledger-apdu", -] - -[[package]] -name = "ledger-transport-hid" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" -dependencies = [ - "byteorder", - "cfg-if", - "hex", - "hidapi", - "ledger-transport", - "libc", - "log", - "thiserror 1.0.69", -] - -[[package]] -name = "libc" -version = "0.2.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" - -[[package]] -name = "libm" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" - -[[package]] -name = "libredox" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" -dependencies = [ - "bitflags 2.9.1", - "libc", - "redox_syscall", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2 0.8.1", - "chacha", - "keystream", -] - -[[package]] -name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "lock_api" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "loom" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "macroific" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89f276537b4b8f981bf1c13d79470980f71134b7bdcc5e6e911e910e556b0285" -dependencies = [ - "macroific_attr_parse", - "macroific_core", - "macroific_macro", -] - -[[package]] -name = "macroific_attr_parse" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad4023761b45fcd36abed8fb7ae6a80456b0a38102d55e89a57d9a594a236be9" -dependencies = [ - "proc-macro2", - "quote", - "sealed", - "syn 2.0.104", -] - -[[package]] -name = "macroific_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a7594d3c14916fa55bef7e9d18c5daa9ed410dd37504251e4b75bbdeec33e3" -dependencies = [ - "proc-macro2", - "quote", - "sealed", - "syn 2.0.104", -] - -[[package]] -name = "macroific_macro" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da6f2ed796261b0a74e2b52b42c693bb6dee1effba3a482c49592659f824b3b" -dependencies = [ - "macroific_attr_parse", - "macroific_core", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "markup5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" -dependencies = [ - "log", - "tendril", - "web_atoms", -] - -[[package]] -name = "match_token" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest 0.10.7", -] - -[[package]] -name = "memchr" -version = "2.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minicov" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" -dependencies = [ - "cc", - "walkdir", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", -] - -[[package]] -name = "mix-fetch-wasm" -version = "1.4.1" -dependencies = [ - "async-trait", - "futures", - "js-sys", - "nym-bin-common", - "nym-http-api-client", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-requests", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "tokio", - "tsify", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-client-core", - "wasm-utils", -] - -[[package]] -name = "mixnet-connectivity-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-network-defaults", - "nym-sdk", - "tokio", - "tracing", -] - -[[package]] -name = "mock_instant" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" - -[[package]] -name = "moka" -version = "0.12.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" -dependencies = [ - "async-lock", - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "event-listener 5.4.0", - "futures-util", - "loom", - "parking_lot", - "portable-atomic", - "rustc_version 0.4.1", - "smallvec", - "tagptr", - "thiserror 1.0.69", - "uuid", -] - -[[package]] -name = "multer" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http 1.3.1", - "httparse", - "memchr", - "mime", - "spin", - "version_check", -] - -[[package]] -name = "netlink-packet-core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-generic" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" -dependencies = [ - "anyhow", - "bitflags 2.9.1", - "byteorder", - "libc", - "log", - "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", -] - -[[package]] -name = "netlink-packet-wireguard" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b25b050ff1f6a1e23c6777b72db22790fe5b6b5ccfd3858672587a79876c8f" -dependencies = [ - "anyhow", - "byteorder", - "libc", - "log", - "netlink-packet-generic", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" -dependencies = [ - "bytes", - "libc", - "log", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "newline-converter" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nonempty" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" - -[[package]] -name = "notify" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" -dependencies = [ - "bitflags 1.3.2", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "mio 0.8.11", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.5", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "nym-api" -version = "1.1.70" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "axum-test", - "bincode", - "bip39", - "bs58", - "cfg-if", - "clap", - "console-subscriber", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw3", - "cw4", - "dashmap", - "dotenvy", - "futures", - "humantime-serde", - "moka", - "nym-api-requests", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-cache", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-dkg", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-ecash-time", - "nym-gateway-client", - "nym-http-api-client", - "nym-http-api-common", - "nym-mixnet-contract-common", - "nym-node-requests", - "nym-node-tester-utils", - "nym-pemstore", - "nym-serde-helpers", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-ticketbooks-merkle", - "nym-topology", - "nym-types", - "nym-validator-client", - "pin-project", - "rand 0.8.5", - "rand_chacha 0.3.1", - "reqwest 0.12.22", - "schemars 0.8.22", - "semver 1.0.26", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx", - "tempfile", - "tendermint", - "test-with", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tower-http", - "tracing", - "ts-rs", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", - "zeroize", -] - -[[package]] -name = "nym-api-requests" -version = "0.1.0" -dependencies = [ - "bs58", - "cosmrs", - "cosmwasm-std", - "ecdsa", - "hex", - "humantime-serde", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-signer-check-types", - "nym-ecash-time", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-node-requests", - "nym-noise-keys", - "nym-serde-helpers", - "nym-ticketbooks-merkle", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tracing", - "ts-rs", - "utoipa", -] - -[[package]] -name = "nym-async-file-watcher" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "notify", - "tokio", -] - -[[package]] -name = "nym-authenticator-client" -version = "0.1.0" -dependencies = [ - "bincode", - "futures", - "nym-authenticator-requests", - "nym-bandwidth-controller", - "nym-credentials-interface", - "nym-crypto", - "nym-registration-common", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-validator-client", - "nym-wireguard-types", - "semver 1.0.26", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-authenticator-requests" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "bincode", - "hmac", - "nym-credentials-interface", - "nym-crypto", - "nym-network-defaults", - "nym-service-provider-requests-common", - "nym-sphinx", - "nym-test-utils", - "nym-wireguard-types", - "rand 0.8.5", - "semver 1.0.26", - "serde", - "sha2 0.10.9", - "strum_macros", - "thiserror 2.0.17", - "tracing", - "x25519-dalek", -] - -[[package]] -name = "nym-bandwidth-controller" -version = "0.1.0" -dependencies = [ - "async-trait", - "log", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-bin-common" -version = "0.6.0" -dependencies = [ - "clap", - "clap_complete", - "clap_complete_fig", - "const-str", - "log", - "opentelemetry", - "opentelemetry-jaeger", - "schemars 0.8.22", - "serde", - "serde_json", - "tracing", - "tracing-opentelemetry", - "tracing-subscriber", - "tracing-tree", - "utoipa", - "vergen 8.3.1", -] - -[[package]] -name = "nym-cache" -version = "0.1.0" -dependencies = [ - "tokio", -] - -[[package]] -name = "nym-cli" -version = "1.1.67" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bip39", - "bs58", - "clap", - "clap_complete", - "clap_complete_fig", - "dotenvy", - "inquire", - "log", - "nym-bin-common", - "nym-cli-commands", - "nym-network-defaults", - "nym-validator-client", - "serde", - "serde_json", - "tap", - "tokio", -] - -[[package]] -name = "nym-cli-commands" -version = "1.0.0" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bip39", - "bs58", - "cfg-if", - "clap", - "colored", - "comfy-table", - "cosmrs", - "cosmwasm-std", - "csv", - "cw-utils", - "futures", - "handlebars", - "humantime-serde", - "inquire", - "k256", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-coconut-dkg-common", - "nym-config", - "nym-contracts-common", - "nym-credential-proxy-requests", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-http-api-client", - "nym-id", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "toml 0.8.23", - "url", - "zeroize", -] - -[[package]] -name = "nym-client" -version = "1.1.67" -dependencies = [ - "bs58", - "clap", - "dirs", - "futures", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-client-websocket-requests", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-gateway-requests", - "nym-id", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core" -version = "1.1.15" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bs58", - "cfg-if", - "clap", - "comfy-table", - "futures", - "gloo-timers", - "http-body-util", - "humantime", - "hyper 1.6.0", - "hyper-util", - "nym-bandwidth-controller", - "nym-client-core-config-types", - "nym-client-core-gateways-storage", - "nym-client-core-surb-storage", - "nym-credential-storage", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-gateway-client", - "nym-gateway-requests", - "nym-http-api-client", - "nym-id", - "nym-mixnet-client", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-nonexhaustive-delayqueue", - "nym-pemstore", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio_with_wasm", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-client-core-config-types" -version = "0.1.0" -dependencies = [ - "humantime-serde", - "nym-config", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-statistics-common", - "serde", - "thiserror 2.0.17", - "url", -] - -[[package]] -name = "nym-client-core-gateways-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "nym-crypto", - "nym-gateway-client", - "nym-gateway-requests", - "serde", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core-surb-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "dashmap", - "nym-crypto", - "nym-sphinx", - "nym-task", - "sqlx", - "sqlx-pool-guard", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-client-wasm" -version = "1.4.1" -dependencies = [ - "anyhow", - "futures", - "gloo-timers", - "js-sys", - "nym-bin-common", - "nym-gateway-requests", - "nym-node-tester-utils", - "nym-node-tester-wasm", - "once_cell", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "thiserror 2.0.17", - "tokio_with_wasm", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "wasm-client-core", - "wasm-utils", - "web-sys", -] - -[[package]] -name = "nym-client-websocket-requests" -version = "0.1.0" -dependencies = [ - "nym-sphinx", - "serde", - "serde_json", -] - -[[package]] -name = "nym-coconut-dkg-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw4", - "nym-contracts-common", - "nym-multisig-contract-common", -] - -[[package]] -name = "nym-common" -version = "1.18.0" -dependencies = [ - "tracing", - "tracing-test", -] - -[[package]] -name = "nym-compact-ecash" -version = "0.1.0" -dependencies = [ - "bincode", - "bls12_381", - "bs58", - "cfg-if", - "criterion", - "digest 0.10.7", - "ff", - "group", - "itertools 0.14.0", - "nym-network-defaults", - "nym-pemstore", - "rand 0.8.5", - "rayon", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-config" -version = "0.1.0" -dependencies = [ - "dirs", - "handlebars", - "log", - "nym-network-defaults", - "serde", - "thiserror 2.0.17", - "toml 0.8.23", - "url", -] - -[[package]] -name = "nym-connection-monitor" -version = "1.18.0" -dependencies = [ - "bincode", - "bytes", - "futures", - "nym-common", - "nym-config", - "nym-ip-packet-requests", - "nym-sdk", - "pnet_packet", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-contracts-common" -version = "0.5.0" -dependencies = [ - "anyhow", - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "utoipa", - "vergen 8.3.1", -] - -[[package]] -name = "nym-contracts-common-testing" -version = "0.1.0" -dependencies = [ - "anyhow", - "cosmwasm-std", - "cw-multi-test", - "cw-storage-plus", - "nym-contracts-common", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", -] - -[[package]] -name = "nym-cpp-ffi" -version = "0.1.2" -dependencies = [ - "anyhow", - "bs58", - "lazy_static", - "nym-bin-common", - "nym-ffi-shared", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "tokio", -] - -[[package]] -name = "nym-credential-proxy" -version = "0.3.0" -dependencies = [ - "anyhow", - "axum", - "bip39", - "bs58", - "cfg-if", - "clap", - "futures", - "humantime", - "nym-bin-common", - "nym-compact-ecash", - "nym-config", - "nym-credential-proxy-lib", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-http-api-client", - "nym-http-api-common", - "nym-network-defaults", - "nym-pemstore", - "nym-upgrade-mode-check", - "nym-validator-client", - "rand 0.8.5", - "reqwest 0.12.22", - "serde", - "serde_json", - "sqlx", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http", - "tracing", - "url", - "utoipa", - "utoipa-swagger-ui", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-credential-proxy-lib" -version = "0.1.0" -dependencies = [ - "anyhow", - "axum", - "bip39", - "bs58", - "futures", - "humantime", - "nym-cache", - "nym-compact-ecash", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-network-defaults", - "nym-validator-client", - "rand 0.8.5", - "reqwest 0.12.22", - "serde", - "serde_json", - "sqlx", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tracing", - "url", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-credential-proxy-requests" -version = "0.1.0" -dependencies = [ - "async-trait", - "nym-credentials", - "nym-credentials-interface", - "nym-http-api-client", - "nym-http-api-common", - "nym-serde-helpers", - "nym-upgrade-mode-check", - "reqwest 0.12.22", - "schemars 0.8.22", - "serde", - "serde_json", - "serde_with", - "time", - "tsify", - "utoipa", - "uuid", - "wasm-bindgen", - "wasmtimer", -] - -[[package]] -name = "nym-credential-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "log", - "nym-compact-ecash", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-test-utils", - "serde", - "sqlx", - "sqlx-pool-guard", - "thiserror 2.0.17", - "time", - "tokio", - "zeroize", -] - -[[package]] -name = "nym-credential-utils" -version = "0.1.0" -dependencies = [ - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-ecash-time", - "nym-validator-client", - "thiserror 2.0.17", - "time", - "tokio", -] - -[[package]] -name = "nym-credential-verification" -version = "0.1.0" -dependencies = [ - "async-trait", - "bs58", - "cosmwasm-std", - "cw-utils", - "dyn-clone", - "futures", - "nym-api-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-task", - "nym-upgrade-mode-check", - "nym-validator-client", - "si-scale", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-credentials" -version = "0.1.0" -dependencies = [ - "bincode", - "bls12_381", - "cosmrs", - "log", - "nym-api-requests", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-http-api-client", - "nym-network-defaults", - "nym-serde-helpers", - "nym-validator-client", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "zeroize", -] - -[[package]] -name = "nym-credentials-interface" -version = "0.1.0" -dependencies = [ - "bls12_381", - "nym-compact-ecash", - "nym-ecash-time", - "nym-network-defaults", - "nym-upgrade-mode-check", - "rand 0.8.5", - "serde", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "utoipa", -] - -[[package]] -name = "nym-crypto" -version = "0.4.0" -dependencies = [ - "aead", - "aes", - "aes-gcm-siv", - "anyhow", - "base64 0.22.1", - "blake3", - "bs58", - "cipher", - "ctr", - "digest 0.10.7", - "ed25519-dalek", - "generic-array 0.14.7", - "hkdf", - "hmac", - "jwt-simple", - "nym-pemstore", - "nym-sphinx-types", - "nym-test-utils", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_bytes", - "serde_json", - "sha2 0.10.9", - "subtle-encoding", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-data-observatory" -version = "1.0.0" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "blake3", - "chrono", - "clap", - "cosmrs", - "glob", - "nym-bin-common", - "nym-config", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "nyxd-scraper-psql", - "nyxd-scraper-shared", - "reqwest 0.12.22", - "schemars 0.8.22", - "serde", - "serde_json", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http", - "tracing", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nym-dkg" -version = "0.1.0" -dependencies = [ - "bitvec", - "bls12_381", - "bs58", - "criterion", - "ff", - "group", - "nym-contracts-common", - "nym-pemstore", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "serde", - "serde_derive", - "sha2 0.10.9", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-ecash-contract-common" -version = "0.1.0" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "nym-multisig-contract-common", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ecash-signer-check" -version = "0.1.0" -dependencies = [ - "futures", - "nym-ecash-signer-check-types", - "nym-http-api-client", - "nym-network-defaults", - "nym-validator-client", - "semver 1.0.26", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nym-ecash-signer-check-types" -version = "0.1.0" -dependencies = [ - "nym-coconut-dkg-common", - "nym-crypto", - "semver 1.0.26", - "serde", - "thiserror 2.0.17", - "time", - "tracing", - "url", - "utoipa", -] - -[[package]] -name = "nym-ecash-time" -version = "0.1.0" -dependencies = [ - "nym-compact-ecash", - "time", -] - -[[package]] -name = "nym-exit-policy" -version = "0.1.0" -dependencies = [ - "reqwest 0.12.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-ffi-shared" -version = "0.2.1" -dependencies = [ - "anyhow", - "bs58", - "lazy_static", - "nym-bin-common", - "nym-crypto", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "tokio", - "uniffi", - "uniffi_build", -] - -[[package]] -name = "nym-gateway" -version = "1.1.36" -dependencies = [ - "async-trait", - "bincode", - "bip39", - "bs58", - "dashmap", - "defguard_wireguard_rs", - "fastrand 2.3.0", - "futures", - "ipnetwork", - "mock_instant", - "nym-authenticator-requests", - "nym-client-core", - "nym-credential-verification", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-gateway-stats-storage", - "nym-gateway-storage", - "nym-id", - "nym-ip-packet-router", - "nym-mixnet-client", - "nym-network-defaults", - "nym-network-requester", - "nym-node-metrics", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-upgrade-mode-check", - "nym-validator-client", - "nym-wireguard", - "nym-wireguard-private-metadata-server", - "nym-wireguard-types", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-gateway-client" -version = "0.1.0" -dependencies = [ - "futures", - "getrandom 0.2.16", - "gloo-utils 0.2.0", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "serde", - "si-scale", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-probe" -version = "1.18.0" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bincode", - "bs58", - "bytes", - "clap", - "futures", - "hex", - "nym-authenticator-client", - "nym-authenticator-requests", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-connection-monitor", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-http-api-client", - "nym-http-api-client-macro", - "nym-ip-packet-client", - "nym-ip-packet-requests", - "nym-node-status-client", - "nym-sdk", - "nym-topology", - "nym-validator-client", - "pnet_packet", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "tracing-subscriber", - "url", - "vergen-gitcl", - "x25519-dalek", -] - -[[package]] -name = "nym-gateway-requests" -version = "0.1.0" -dependencies = [ - "anyhow", - "bs58", - "futures", - "generic-array 0.14.7", - "nym-compact-ecash", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-pemstore", - "nym-serde-helpers", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-test-utils", - "rand 0.8.5", - "serde", - "serde_json", - "strum", - "subtle 2.6.1", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "tungstenite 0.20.1", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-stats-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "nym-node-metrics", - "nym-sphinx", - "nym-statistics-common", - "sqlx", - "strum", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-gateway-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "defguard_wireguard_rs", - "dyn-clone", - "nym-credentials-interface", - "nym-gateway-requests", - "nym-sphinx", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-go-ffi" -version = "0.2.2" -dependencies = [ - "anyhow", - "lazy_static", - "nym-bin-common", - "nym-crypto", - "nym-ffi-shared", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "thiserror 2.0.17", - "tokio", - "uniffi", - "uniffi_build", -] - -[[package]] -name = "nym-group-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cw-controllers", - "cw4", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "nym-http-api-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "bincode", - "bytes", - "cfg-if", - "encoding_rs", - "hickory-resolver", - "http 1.3.1", - "inventory", - "itertools 0.14.0", - "mime", - "nym-bin-common", - "nym-http-api-client-macro", - "nym-http-api-common", - "nym-network-defaults", - "once_cell", - "reqwest 0.12.22", - "serde", - "serde_json", - "serde_plain", - "serde_yaml", - "thiserror 2.0.17", - "tokio", - "tracing", - "tracing-subscriber", - "url", - "wasmtimer", -] - -[[package]] -name = "nym-http-api-client-macro" -version = "0.1.0" -dependencies = [ - "nym-http-api-client", - "proc-macro-crate", - "proc-macro2", - "quote", - "reqwest 0.12.22", - "syn 2.0.104", - "uuid", -] - -[[package]] -name = "nym-http-api-common" -version = "0.1.0" -dependencies = [ - "axum", - "axum-client-ip", - "bincode", - "bytes", - "colored", - "futures", - "mime", - "serde", - "serde_json", - "serde_yaml", - "subtle 2.6.1", - "time", - "tower 0.5.2", - "tracing", - "utoipa", - "zeroize", -] - -[[package]] -name = "nym-id" -version = "0.1.0" -dependencies = [ - "nym-credential-storage", - "nym-credentials", - "thiserror 2.0.17", - "time", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-id-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "bs58", - "clap", - "nym-bin-common", - "nym-credential-storage", - "nym-id", - "tokio", - "tracing", -] - -[[package]] -name = "nym-inclusion-probability" -version = "0.1.0" -dependencies = [ - "log", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ip-packet-client" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "futures", - "nym-ip-packet-requests", - "nym-sdk", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-ip-packet-requests" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "nym-bin-common", - "nym-crypto", - "nym-service-provider-requests-common", - "nym-sphinx", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", -] - -[[package]] -name = "nym-ip-packet-router" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bs58", - "bytes", - "clap", - "etherparse", - "futures", - "log", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-crypto", - "nym-exit-policy", - "nym-id", - "nym-ip-packet-requests", - "nym-network-defaults", - "nym-network-requester", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-service-providers-common", - "nym-sphinx", - "nym-task", - "nym-tun", - "nym-types", - "nym-wireguard", - "nym-wireguard-types", - "rand 0.8.5", - "reqwest 0.12.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tun", - "tokio-util", - "url", -] - -[[package]] -name = "nym-ledger" -version = "0.1.0" -dependencies = [ - "bip32", - "k256", - "ledger-transport", - "ledger-transport-hid", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-metrics" -version = "0.1.0" -dependencies = [ - "dashmap", - "lazy_static", - "prometheus", - "tracing", -] - -[[package]] -name = "nym-mixnet-client" -version = "0.1.0" -dependencies = [ - "dashmap", - "futures", - "nym-crypto", - "nym-noise", - "nym-sphinx", - "nym-task", - "rand 0.8.5", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-mixnet-contract-common" -version = "0.6.0" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-storage-plus", - "cw2", - "humantime-serde", - "nym-contracts-common", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "semver 1.0.26", - "serde", - "serde_repr", - "thiserror 2.0.17", - "time", - "ts-rs", - "utoipa", -] - -[[package]] -name = "nym-mixnode-common" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "humantime-serde", - "log", - "nym-crypto", - "nym-metrics", - "nym-network-defaults", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-types", - "nym-task", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "url", -] - -[[package]] -name = "nym-multisig-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "cw3", - "cw4", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-network-defaults" -version = "0.1.0" -dependencies = [ - "cargo_metadata 0.19.2", - "dotenvy", - "log", - "regex", - "schemars 0.8.22", - "serde", - "url", - "utoipa", -] - -[[package]] -name = "nym-network-monitor" -version = "1.0.2" -dependencies = [ - "anyhow", - "axum", - "clap", - "dashmap", - "futures", - "log", - "nym-bin-common", - "nym-client-core", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-sdk", - "nym-sphinx", - "nym-topology", - "nym-types", - "nym-validator-client", - "petgraph", - "rand 0.8.5", - "rand_chacha 0.3.1", - "reqwest 0.12.22", - "serde", - "serde_json", - "tokio", - "tokio-postgres", - "tokio-util", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "nym-network-requester" -version = "1.1.68" -dependencies = [ - "addr", - "anyhow", - "async-trait", - "bs58", - "clap", - "dirs", - "futures", - "humantime-serde", - "ipnetwork", - "log", - "nym-async-file-watcher", - "nym-bin-common", - "nym-client-core", - "nym-client-websocket-requests", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-exit-policy", - "nym-id", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-types", - "publicsuffix", - "rand 0.8.5", - "regex", - "reqwest 0.12.22", - "serde", - "serde_json", - "sqlx", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "url", - "zeroize", -] - -[[package]] -name = "nym-node" -version = "1.22.0" -dependencies = [ - "anyhow", - "arc-swap", - "arrayref", - "async-trait", - "axum", - "bip39", - "blake2 0.8.1", - "bloomfilter", - "bs58", - "cargo_metadata 0.19.2", - "celes", - "cfg-if", - "chacha", - "clap", - "colored", - "console-subscriber", - "criterion", - "csv", - "cupid", - "futures", - "hkdf", - "human-repr", - "humantime-serde", - "indicatif", - "ipnetwork", - "lioness", - "nym-bin-common", - "nym-client-core-config-types", - "nym-config", - "nym-credential-verification", - "nym-crypto", - "nym-gateway", - "nym-gateway-stats-storage", - "nym-http-api-client", - "nym-http-api-common", - "nym-ip-packet-router", - "nym-metrics", - "nym-mixnet-client", - "nym-network-requester", - "nym-node-metrics", - "nym-node-requests", - "nym-noise", - "nym-noise-keys", - "nym-nonexhaustive-delayqueue", - "nym-pemstore", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-types", - "nym-validator-client", - "nym-verloc", - "nym-wireguard", - "nym-wireguard-types", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "sysinfo", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.8.23", - "tower-http", - "tracing", - "tracing-indicatif", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "zeroize", -] - -[[package]] -name = "nym-node-metrics" -version = "0.1.0" -dependencies = [ - "dashmap", - "futures", - "nym-metrics", - "nym-statistics-common", - "strum", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-node-requests" -version = "0.1.0" -dependencies = [ - "async-trait", - "celes", - "humantime-serde", - "nym-bin-common", - "nym-crypto", - "nym-exit-policy", - "nym-http-api-client", - "nym-noise-keys", - "nym-upgrade-mode-check", - "nym-wireguard-types", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "serde", - "serde_json", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "tokio", - "url", - "utoipa", -] - -[[package]] -name = "nym-node-status-agent" -version = "1.0.7" -dependencies = [ - "anyhow", - "clap", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-node-status-client", - "rand 0.8.5", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "nym-node-status-api" -version = "4.0.12" -dependencies = [ - "ammonia", - "anyhow", - "axum", - "axum-test", - "bip39", - "bs58", - "celes", - "clap", - "cosmwasm-std", - "futures-util", - "humantime", - "itertools 0.14.0", - "moka", - "nym-bin-common", - "nym-contracts-common", - "nym-credential-proxy-lib", - "nym-credentials", - "nym-crypto", - "nym-ecash-time", - "nym-http-api-client", - "nym-http-api-common", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-node-metrics", - "nym-node-requests", - "nym-node-status-client", - "nym-serde-helpers", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "rand_chacha 0.3.1", - "regex", - "reqwest 0.12.22", - "semver 1.0.26", - "serde", - "serde_json", - "serde_json_path", - "sqlx", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tower-http", - "tracing", - "tracing-log 0.2.0", - "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", - "zeroize", -] - -[[package]] -name = "nym-node-status-client" -version = "0.2.0" -dependencies = [ - "anyhow", - "bincode", - "bs58", - "nym-credentials", - "nym-crypto", - "reqwest 0.12.22", - "serde", - "serde_json", - "time", - "tracing", -] - -[[package]] -name = "nym-node-tester-utils" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "nym-crypto", - "nym-sphinx", - "nym-sphinx-params", - "nym-task", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "wasm-utils", -] - -[[package]] -name = "nym-node-tester-wasm" -version = "1.3.1" -dependencies = [ - "futures", - "js-sys", - "nym-node-tester-utils", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "tokio", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-client-core", - "wasm-utils", - "wasmtimer", -] - -[[package]] -name = "nym-noise" -version = "0.1.0" -dependencies = [ - "anyhow", - "arc-swap", - "bytes", - "futures", - "nym-crypto", - "nym-noise-keys", - "nym-test-utils", - "pin-project", - "rand_chacha 0.3.1", - "sha2 0.10.9", - "snow", - "strum", - "strum_macros", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-noise-keys" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "schemars 0.8.22", - "serde", - "utoipa", -] - -[[package]] -name = "nym-nonexhaustive-delayqueue" -version = "0.1.0" -dependencies = [ - "tokio", - "tokio-stream", - "tokio-util", - "wasmtimer", -] - -[[package]] -name = "nym-nr-query" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "log", - "nym-bin-common", - "nym-network-defaults", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-requests", - "serde", - "tokio", -] - -[[package]] -name = "nym-ordered-buffer" -version = "0.1.0" -dependencies = [ - "log", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-outfox" -version = "0.1.0" -dependencies = [ - "blake3", - "chacha20", - "chacha20poly1305", - "criterion", - "fastrand 2.3.0", - "getrandom 0.2.16", - "log", - "rand 0.8.5", - "rayon", - "sphinx-packet", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-pemstore" -version = "0.3.0" -dependencies = [ - "pem", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-performance-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "nym-contracts-common", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-pool-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", - "time", -] - -[[package]] -name = "nym-registration-client" -version = "0.1.0" -dependencies = [ - "futures", - "nym-authenticator-client", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials-interface", - "nym-ip-packet-client", - "nym-registration-common", - "nym-sdk", - "nym-validator-client", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "typed-builder", - "url", -] - -[[package]] -name = "nym-registration-common" -version = "0.1.0" -dependencies = [ - "nym-authenticator-requests", - "nym-crypto", - "nym-ip-packet-requests", - "nym-sphinx", - "serde", - "tokio-util", -] - -[[package]] -name = "nym-sdk" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bip39", - "bytecodec", - "bytes", - "clap", - "dashmap", - "dirs", - "dotenvy", - "futures", - "hex", - "http 1.3.1", - "httpcodec", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-client-core", - "nym-socks5-requests", - "nym-sphinx", - "nym-sphinx-addressing", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "parking_lot", - "rand 0.8.5", - "reqwest 0.12.22", - "serde", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.8.23", - "tracing", - "tracing-subscriber", - "url", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-serde-helpers" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "bs58", - "hex", - "serde", - "time", -] - -[[package]] -name = "nym-service-provider-requests-common" -version = "0.1.0" -dependencies = [ - "bincode", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-service-providers-common" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "log", - "nym-bin-common", - "nym-sdk", - "nym-socks5-requests", - "nym-sphinx-anonymous-replies", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", -] - -[[package]] -name = "nym-signers-monitor" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "humantime", - "itertools 0.14.0", - "nym-bin-common", - "nym-ecash-signer-check", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "time", - "tokio", - "tracing", - "url", - "zulip-client", -] - -[[package]] -name = "nym-socks5-client" -version = "1.1.67" -dependencies = [ - "bs58", - "clap", - "log", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-gateway-requests", - "nym-id", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-pemstore", - "nym-socks5-client-core", - "nym-sphinx", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", - "time", - "tokio", - "url", - "zeroize", -] - -[[package]] -name = "nym-socks5-client-core" -version = "0.1.0" -dependencies = [ - "anyhow", - "dirs", - "futures", - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-contracts-common", - "nym-credential-storage", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-validator-client", - "pin-project", - "rand 0.8.5", - "reqwest 0.12.22", - "schemars 0.8.22", - "serde", - "tap", - "thiserror 2.0.17", - "tokio", - "url", -] - -[[package]] -name = "nym-socks5-proxy-helpers" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "log", - "nym-ordered-buffer", - "nym-socks5-requests", - "nym-task", - "tokio", - "tokio-test", - "tokio-util", -] - -[[package]] -name = "nym-socks5-requests" -version = "0.1.0" -dependencies = [ - "bincode", - "log", - "nym-exit-policy", - "nym-service-providers-common", - "nym-sphinx-addressing", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "nym-metrics", - "nym-mixnet-contract-common", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-chunking", - "nym-sphinx-cover", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_distr", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "nym-sphinx-acknowledgements" -version = "0.1.0" -dependencies = [ - "generic-array 0.14.7", - "nym-crypto", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-sphinx-addressing" -version = "0.1.0" -dependencies = [ - "bincode", - "nym-crypto", - "nym-sphinx-types", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-anonymous-replies" -version = "0.1.0" -dependencies = [ - "bs58", - "nym-crypto", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "thiserror 2.0.17", - "tracing", - "wasm-bindgen", -] - -[[package]] -name = "nym-sphinx-chunking" -version = "0.1.0" -dependencies = [ - "dashmap", - "log", - "nym-crypto", - "nym-metrics", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-types", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "utoipa", - "wasmtimer", -] - -[[package]] -name = "nym-sphinx-cover" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-chunking", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-forwarding" -version = "0.1.0" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-params", - "nym-sphinx-types", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-framing" -version = "0.1.0" -dependencies = [ - "bytes", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-types", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-sphinx-params" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "nym-sphinx-types", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-routing" -version = "0.1.0" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-types", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-types" -version = "0.2.0" -dependencies = [ - "nym-outfox", - "sphinx-packet", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-statistics-api" -version = "0.3.1" -dependencies = [ - "anyhow", - "axum", - "axum-client-ip", - "axum-extra", - "celes", - "clap", - "nym-bin-common", - "nym-http-api-client", - "nym-http-api-common", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "serde_json", - "sqlx", - "time", - "tokio", - "tokio-util", - "tower-http", - "tracing", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nym-statistics-common" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "nym-credentials-interface", - "nym-crypto", - "nym-metrics", - "nym-sphinx", - "nym-task", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "strum", - "strum_macros", - "sysinfo", - "thiserror 2.0.17", - "time", - "tokio", - "utoipa", - "wasmtimer", -] - -[[package]] -name = "nym-store-cipher" -version = "0.1.0" -dependencies = [ - "aes-gcm", - "argon2", - "generic-array 0.14.7", - "getrandom 0.2.16", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-task" -version = "0.1.0" -dependencies = [ - "anyhow", - "cfg-if", - "futures", - "log", - "nym-test-utils", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasmtimer", -] - -[[package]] -name = "nym-test-utils" -version = "0.1.0" -dependencies = [ - "anyhow", - "futures", - "rand_chacha 0.3.1", - "tokio", -] - -[[package]] -name = "nym-ticketbooks-merkle" -version = "0.1.0" -dependencies = [ - "nym-credentials-interface", - "nym-serde-helpers", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rs_merkle", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "time", - "utoipa", -] - -[[package]] -name = "nym-topology" -version = "0.1.0" -dependencies = [ - "async-trait", - "nym-api-requests", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-sphinx-addressing", - "nym-sphinx-types", - "rand 0.8.5", - "reqwest 0.12.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tracing", - "tsify", - "wasm-bindgen", - "wasm-utils", -] - -[[package]] -name = "nym-tun" -version = "0.1.0" -dependencies = [ - "etherparse", - "log", - "nym-wireguard-types", - "thiserror 2.0.17", - "tokio", - "tokio-tun", -] - -[[package]] -name = "nym-types" -version = "1.0.0" -dependencies = [ - "base64 0.22.1", - "cosmrs", - "cosmwasm-std", - "eyre", - "hmac", - "itertools 0.14.0", - "log", - "nym-config", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-validator-client", - "nym-vesting-contract-common", - "reqwest 0.12.22", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "ts-rs", - "url", - "utoipa", - "x25519-dalek", -] - -[[package]] -name = "nym-upgrade-mode-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "jwt-simple", - "nym-crypto", - "nym-http-api-client", - "nym-test-utils", - "reqwest 0.12.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-validator-client" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "base64 0.22.1", - "bip32", - "bip39", - "colored", - "cosmrs", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "cw3", - "cw4", - "eyre", - "flate2", - "futures", - "itertools 0.14.0", - "nym-api-requests", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-ecash-contract-common", - "nym-group-contract-common", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-network-defaults", - "nym-performance-contract-common", - "nym-serde-helpers", - "nym-vesting-contract-common", - "prost", - "reqwest 0.12.22", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "ts-rs", - "url", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-validator-rewarder" -version = "0.3.0" -dependencies = [ - "anyhow", - "bip39", - "clap", - "cosmwasm-std", - "futures", - "humantime", - "humantime-serde", - "nym-bin-common", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-http-api-client", - "nym-network-defaults", - "nym-pemstore", - "nym-serde-helpers", - "nym-task", - "nym-ticketbooks-merkle", - "nym-validator-client", - "nyxd-scraper-sqlite", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "serde_with", - "sha2 0.10.9", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-verloc" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "humantime", - "nym-api-requests", - "nym-crypto", - "nym-http-api-client", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "nym-vesting-contract-common" -version = "0.7.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2", - "nym-contracts-common", - "nym-mixnet-contract-common", - "serde", - "thiserror 2.0.17", - "ts-rs", -] - -[[package]] -name = "nym-vpn-api-lib-wasm" -version = "0.1.0" -dependencies = [ - "bs58", - "getrandom 0.2.16", - "js-sys", - "nym-bin-common", - "nym-compact-ecash", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "thiserror 2.0.17", - "time", - "tsify", - "wasm-bindgen", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "nym-wallet-types" -version = "1.0.0" -dependencies = [ - "cosmrs", - "cosmwasm-std", - "hex-literal", - "nym-config", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "serde", - "serde_json", - "strum", - "strum_macros", - "ts-rs", -] - -[[package]] -name = "nym-wireguard" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "defguard_wireguard_rs", - "futures", - "ip_network", - "nym-credential-verification", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-network-defaults", - "nym-node-metrics", - "nym-task", - "nym-wireguard-types", - "thiserror 2.0.17", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "nym-wireguard-private-metadata-client" -version = "1.0.0" -dependencies = [ - "async-trait", - "nym-http-api-client", - "nym-wireguard-private-metadata-shared", - "tracing", -] - -[[package]] -name = "nym-wireguard-private-metadata-server" -version = "1.0.0" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "futures", - "nym-credential-verification", - "nym-credentials-interface", - "nym-http-api-common", - "nym-wireguard", - "nym-wireguard-private-metadata-shared", - "tokio", - "tokio-util", - "tower-http", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "nym-wireguard-private-metadata-shared" -version = "1.0.0" -dependencies = [ - "axum", - "bincode", - "nym-credentials-interface", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", - "utoipa", -] - -[[package]] -name = "nym-wireguard-private-metadata-tests" -version = "1.0.0" -dependencies = [ - "async-trait", - "axum", - "futures", - "nym-credential-verification", - "nym-credentials-interface", - "nym-crypto", - "nym-http-api-client", - "nym-http-api-common", - "nym-upgrade-mode-check", - "nym-wireguard", - "nym-wireguard-private-metadata-client", - "nym-wireguard-private-metadata-server", - "nym-wireguard-private-metadata-shared", - "time", - "tokio", - "tower 0.5.2", - "tower-http", - "utoipa", -] - -[[package]] -name = "nym-wireguard-types" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "nym-crypto", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "x25519-dalek", -] - -[[package]] -name = "nymvisor" -version = "0.1.32" -dependencies = [ - "anyhow", - "bytes", - "clap", - "dotenvy", - "flate2", - "futures", - "hex", - "humantime", - "humantime-serde", - "nix 0.27.1", - "nym-async-file-watcher", - "nym-bin-common", - "nym-config", - "nym-task", - "reqwest 0.12.22", - "serde", - "serde_json", - "sha2 0.10.9", - "tar", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nyx-chain-watcher" -version = "0.1.14" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "chrono", - "clap", - "nym-bin-common", - "nym-config", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "nyxd-scraper-sqlite", - "reqwest 0.12.22", - "schemars 0.8.22", - "serde", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http", - "tracing", - "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nyxd-scraper-psql" -version = "0.1.0" -dependencies = [ - "async-trait", - "base64 0.22.1", - "cosmrs", - "itertools 0.14.0", - "nyxd-scraper-shared", - "serde", - "serde_json", - "sqlx", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "nyxd-scraper-shared" -version = "0.1.0" -dependencies = [ - "async-trait", - "base64 0.22.1", - "const_format", - "cosmos-sdk-proto", - "cosmrs", - "eyre", - "futures", - "humantime", - "ibc-proto", - "prost", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "nyxd-scraper-sqlite" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "nyxd-scraper-shared", - "sqlx", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "objc2-io-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" -dependencies = [ - "libc", - "objc2-core-foundation", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" - -[[package]] -name = "oorandom" -version = "11.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[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.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.110" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" -dependencies = [ - "opentelemetry_api", - "opentelemetry_sdk", -] - -[[package]] -name = "opentelemetry-http" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" -dependencies = [ - "async-trait", - "bytes", - "http 0.2.12", - "isahc", - "opentelemetry_api", -] - -[[package]] -name = "opentelemetry-jaeger" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" -dependencies = [ - "async-trait", - "futures", - "futures-executor", - "http 0.2.12", - "isahc", - "once_cell", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-semantic-conventions", - "thiserror 1.0.69", - "thrift", - "tokio", -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" -dependencies = [ - "opentelemetry", -] - -[[package]] -name = "opentelemetry_api" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" -dependencies = [ - "fnv", - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "once_cell", - "pin-project-lite", - "thiserror 1.0.69", - "urlencoding", -] - -[[package]] -name = "opentelemetry_sdk" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" -dependencies = [ - "async-trait", - "crossbeam-channel", - "dashmap", - "fnv", - "futures-channel", - "futures-executor", - "futures-util", - "once_cell", - "opentelemetry_api", - "percent-encoding", - "rand 0.8.5", - "thiserror 1.0.69", - "tokio", - "tokio-stream", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - -[[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "password-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "peg" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477" -dependencies = [ - "peg-macros", - "peg-runtime", -] - -[[package]] -name = "peg-macros" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71" -dependencies = [ - "peg-runtime", - "proc-macro2", - "quote", -] - -[[package]] -name = "peg-runtime" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca" - -[[package]] -name = "pem" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" -dependencies = [ - "base64 0.13.1", - "once_cell", - "regex", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pest" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" -dependencies = [ - "memchr", - "thiserror 2.0.17", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "pest_meta" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" -dependencies = [ - "pest", - "sha2 0.10.9", -] - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.10.0", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.1", -] - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - -[[package]] -name = "plotters" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" - -[[package]] -name = "plotters-svg" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "pnet_base" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" -dependencies = [ - "no-std-net", -] - -[[package]] -name = "pnet_macros" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.104", -] - -[[package]] -name = "pnet_macros_support" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" -dependencies = [ - "pnet_base", -] - -[[package]] -name = "pnet_packet" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" -dependencies = [ - "glob", - "pnet_base", - "pnet_macros", - "pnet_macros_support", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug 0.3.1", - "universal-hash", -] - -[[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 0.3.1", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - -[[package]] -name = "postgres-protocol" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54" -dependencies = [ - "base64 0.22.1", - "byteorder", - "bytes", - "fallible-iterator", - "hmac", - "md-5", - "memchr", - "rand 0.9.2", - "sha2 0.10.9", - "stringprep", -] - -[[package]] -name = "postgres-types" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" -dependencies = [ - "bytes", - "fallible-iterator", - "postgres-protocol", -] - -[[package]] -name = "potential_utf" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "pretty_assertions" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" -dependencies = [ - "diff", - "yansi", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit 0.23.5", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proc_pidinfo" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" -dependencies = [ - "libc", -] - -[[package]] -name = "prometheus" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf", - "thiserror 2.0.17", -] - -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "prost-types" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror 1.0.69", -] - -[[package]] -name = "protobuf-support" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" -dependencies = [ - "thiserror 1.0.69", -] - -[[package]] -name = "psl" -version = "2.1.126" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f621acfbd2ca5670eee9a95270747dfa9a29e63e1937d7e6a1ac6994331966" -dependencies = [ - "psl-types", -] - -[[package]] -name = "psl-types" -version = "2.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" - -[[package]] -name = "publicsuffix" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" -dependencies = [ - "idna", - "psl-types", -] - -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - -[[package]] -name = "quinn" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls 0.23.29", - "socket2 0.5.10", - "thiserror 2.0.17", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" -dependencies = [ - "bytes", - "getrandom 0.3.3", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash", - "rustls 0.23.29", - "rustls-pki-types", - "slab", - "thiserror 2.0.17", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.5.10", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.3", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 2.0.17", -] - -[[package]] -name = "ref-cast" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", - "tokio", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "reqwest" -version = "0.12.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" -dependencies = [ - "async-compression", - "base64 0.22.1", - "bytes", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.6.0", - "hyper-rustls 0.27.7", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls 0.23.29", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.2", - "tokio", - "tokio-rustls 0.26.2", - "tokio-util", - "tower 0.5.2", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots 1.0.2", -] - -[[package]] -name = "reserve-port" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" -dependencies = [ - "thiserror 2.0.17", -] - -[[package]] -name = "resolv-conf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle 2.6.1", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "rmp" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] - -[[package]] -name = "rmp-serde" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" -dependencies = [ - "byteorder", - "rmp", - "serde", -] - -[[package]] -name = "rs_merkle" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" -dependencies = [ - "sha2 0.10.9", -] - -[[package]] -name = "rsa" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" -dependencies = [ - "const-oid", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core 0.6.4", - "sha2 0.10.9", - "signature", - "spki", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rust-embed" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn 2.0.104", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" -dependencies = [ - "sha2 0.10.9", - "walkdir", -] - -[[package]] -name = "rust-multipart-rfc7578_2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" -dependencies = [ - "bytes", - "futures-core", - "futures-util", - "http 0.2.12", - "mime", - "mime_guess", - "rand 0.8.5", - "thiserror 1.0.69", -] - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.26", -] - -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.9.1", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustix" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" -dependencies = [ - "bitflags 2.9.1", - "errno", - "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls" -version = "0.23.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.103.4", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.2.0", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", - "uuid", -] - -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals 0.29.1", - "syn 2.0.104", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scroll" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sealed" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array 0.14.7", - "pkcs8", - "serdect 0.2.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" -dependencies = [ - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" -dependencies = [ - "cc", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.9.1", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde-json-wasm" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" -dependencies = [ - "serde", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde_bytes" -version = "0.11.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "serde_derive_internals" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "serde_json" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", - "serde_core", -] - -[[package]] -name = "serde_json_path" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b992cea3194eea663ba99a042d61cea4bd1872da37021af56f6a37e0359b9d33" -dependencies = [ - "inventory", - "nom", - "regex", - "serde", - "serde_json", - "serde_json_path_core", - "serde_json_path_macros", - "thiserror 2.0.17", -] - -[[package]] -name = "serde_json_path_core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde67d8dfe7d4967b5a95e247d4148368ddd1e753e500adb34b3ffe40c6bc1bc" -dependencies = [ - "inventory", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "serde_json_path_macros" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "517acfa7f77ddaf5c43d5f119c44a683774e130b4247b7d3210f8924506cfac8" -dependencies = [ - "inventory", - "serde_json_path_core", - "serde_json_path_macros_internal", -] - -[[package]] -name = "serde_json_path_macros_internal" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" -dependencies = [ - "itoa", - "serde", -] - -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.10.0", - "schemars 0.9.0", - "schemars 1.0.4", - "serde", - "serde_derive", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.10.0", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - -[[package]] -name = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "serdect" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "si-scale" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" - -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" -dependencies = [ - "libc", - "mio 0.8.11", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "slab" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" - -[[package]] -name = "sluice" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" -dependencies = [ - "async-channel", - "futures-core", - "futures-io", -] - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -dependencies = [ - "serde", -] - -[[package]] -name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - -[[package]] -name = "snafu" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" -dependencies = [ - "doc-comment", - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "snow" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" -dependencies = [ - "aes-gcm", - "blake2 0.10.6", - "chacha20poly1305", - "curve25519-dalek", - "rand_core 0.6.4", - "rustc_version 0.4.1", - "sha2 0.10.9", - "subtle 2.6.1", -] - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "sphinx-packet" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" -dependencies = [ - "aes", - "arrayref", - "blake2 0.8.1", - "bs58", - "byteorder", - "chacha", - "ctr", - "curve25519-dalek", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "rand 0.8.5", - "rand_distr", - "sha2 0.10.9", - "subtle 2.6.1", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sqlx" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" -dependencies = [ - "base64 0.22.1", - "bytes", - "chrono", - "crc", - "crossbeam-queue", - "either", - "event-listener 5.4.0", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashbrown 0.15.4", - "hashlink", - "indexmap 2.10.0", - "log", - "memchr", - "once_cell", - "percent-encoding", - "rustls 0.23.29", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "sqlx-macros" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 2.0.104", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" -dependencies = [ - "dotenvy", - "either", - "heck 0.5.0", - "hex", - "once_cell", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx-core", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", - "syn 2.0.104", - "tokio", - "url", -] - -[[package]] -name = "sqlx-mysql" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.9.1", - "byteorder", - "bytes", - "chrono", - "crc", - "digest 0.10.7", - "dotenvy", - "either", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "generic-array 0.14.7", - "hex", - "hkdf", - "hmac", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "rsa", - "serde", - "sha1", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.17", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-pool-guard" -version = "0.1.0" -dependencies = [ - "proc_pidinfo", - "sqlx", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", - "windows", -] - -[[package]] -name = "sqlx-postgres" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.9.1", - "byteorder", - "chrono", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-util", - "hex", - "hkdf", - "hmac", - "home", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "rand 0.8.5", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.17", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-sqlite" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" -dependencies = [ - "atoi", - "chrono", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "serde", - "serde_urlencoded", - "sqlx-core", - "thiserror 2.0.17", - "time", - "tracing", - "url", -] - -[[package]] -name = "ssl-inject" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "hex", - "tokio", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", -] - -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "superboring" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "515cce34a781d7250b8a65706e0f2a5b99236ea605cb235d4baed6685820478f" -dependencies = [ - "getrandom 0.2.16", - "hmac-sha256", - "hmac-sha512", - "rand 0.8.5", - "rsa", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "sysinfo" -version = "0.37.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" -dependencies = [ - "libc", - "memchr", - "ntapi", - "objc2-core-foundation", - "objc2-io-kit", - "windows", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tar" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tempfile" -version = "3.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" -dependencies = [ - "fastrand 2.3.0", - "getrandom 0.3.3", - "once_cell", - "rustix 1.0.8", - "windows-sys 0.52.0", -] - -[[package]] -name = "tendermint" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" -dependencies = [ - "bytes", - "digest 0.10.7", - "ed25519", - "ed25519-consensus", - "flex-error", - "futures", - "k256", - "num-traits", - "once_cell", - "prost", - "ripemd", - "serde", - "serde_bytes", - "serde_json", - "serde_repr", - "sha2 0.10.9", - "signature", - "subtle 2.6.1", - "subtle-encoding", - "tendermint-proto", - "time", - "zeroize", -] - -[[package]] -name = "tendermint-config" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" -dependencies = [ - "flex-error", - "serde", - "serde_json", - "tendermint", - "toml 0.8.23", - "url", -] - -[[package]] -name = "tendermint-proto" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" -dependencies = [ - "bytes", - "flex-error", - "prost", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-rpc" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" -dependencies = [ - "async-trait", - "async-tungstenite", - "bytes", - "flex-error", - "futures", - "getrandom 0.2.16", - "peg", - "pin-project", - "rand 0.8.5", - "reqwest 0.11.27", - "semver 1.0.26", - "serde", - "serde_bytes", - "serde_json", - "subtle 2.6.1", - "subtle-encoding", - "tendermint", - "tendermint-config", - "tendermint-proto", - "thiserror 1.0.69", - "time", - "tokio", - "tracing", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "test-with" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f370b9efbfbbc5f057cbce9888373eaeb146a3095bb8cc869b199c94d15559" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "regex", - "syn 2.0.104", -] - -[[package]] -name = "testnet-manager" -version = "0.1.0" -dependencies = [ - "anyhow", - "bip39", - "bs58", - "clap", - "console", - "cw-utils", - "dkg-bypass-contract", - "humantime", - "indicatif", - "nym-bin-common", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-crypto", - "nym-ecash-contract-common", - "nym-group-contract-common", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-pemstore", - "nym-performance-contract-common", - "nym-validator-client", - "nym-vesting-contract-common", - "rand 0.8.5", - "serde", - "serde_json", - "sqlx", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "toml 0.8.23", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "textwrap" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" -dependencies = [ - "smawk", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" -dependencies = [ - "thiserror-impl 2.0.17", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "log", - "ordered-float", - "threadpool", -] - -[[package]] -name = "time" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" -dependencies = [ - "deranged", - "itoa", - "js-sys", - "libc", - "num-conv", - "num_threads", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" - -[[package]] -name = "time-macros" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "tinyvec" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" -dependencies = [ - "bytes", - "libc", - "mio 1.0.4", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.6.0", - "tokio-macros", - "tracing", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "tokio-postgres" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0" -dependencies = [ - "async-trait", - "byteorder", - "bytes", - "fallible-iterator", - "futures-channel", - "futures-util", - "log", - "parking_lot", - "percent-encoding", - "phf", - "pin-project-lite", - "postgres-protocol", - "postgres-types", - "rand 0.9.2", - "socket2 0.5.10", - "tokio", - "tokio-util", - "whoami", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" -dependencies = [ - "rustls 0.23.29", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-test" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" -dependencies = [ - "async-stream", - "bytes", - "futures-core", - "tokio", - "tokio-stream", -] - -[[package]] -name = "tokio-tun" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5381752d5832fc811f89d54fc334951aa435022f494190ba7151661f206df" -dependencies = [ - "libc", - "nix 0.29.0", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", - "tungstenite 0.20.1", - "webpki-roots 0.25.4", -] - -[[package]] -name = "tokio-util" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "futures-util", - "hashbrown 0.15.4", - "pin-project-lite", - "slab", - "tokio", -] - -[[package]] -name = "tokio_with_wasm" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dfba9b946459940fb564dcf576631074cdfb0bfe4c962acd4c31f0dca7897e6" -dependencies = [ - "js-sys", - "tokio", - "tokio_with_wasm_proc", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "tokio_with_wasm_proc" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e04c1865c281139e5ccf633cb9f76ffdaabeebfe53b703984cf82878e2aabb" -dependencies = [ - "quote", - "syn 2.0.104", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.10.0", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_write", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ad0b7ae9cfeef5605163839cb9221f453399f15cfb5c10be9885fcf56611f9" -dependencies = [ - "indexmap 2.10.0", - "toml_datetime 0.7.3", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - -[[package]] -name = "tonic" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64 0.22.1", - "bytes", - "h2 0.4.11", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.6.0", - "hyper-timeout", - "hyper-util", - "percent-encoding", - "pin-project", - "prost", - "socket2 0.5.10", - "tokio", - "tokio-stream", - "tower 0.4.13", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tonic" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bytes", - "h2 0.4.11", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.6.0", - "hyper-timeout", - "hyper-util", - "percent-encoding", - "pin-project", - "prost", - "socket2 0.5.10", - "tokio", - "tokio-stream", - "tower 0.5.2", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 2.10.0", - "pin-project-lite", - "slab", - "sync_wrapper 1.0.2", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "async-compression", - "bitflags 2.9.1", - "bytes", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "http-range-header", - "httpdate", - "iri-string", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "tokio", - "tokio-util", - "tower 0.5.2", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-indicatif" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c714cc8fc46db04fcfddbd274c6ef59bebb1b435155984e7c6e89c3ce66f200" -dependencies = [ - "indicatif", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" -dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" -dependencies = [ - "matchers", - "nu-ansi-term 0.50.1", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log 0.2.0", -] - -[[package]] -name = "tracing-test" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" -dependencies = [ - "tracing-core", - "tracing-subscriber", - "tracing-test-macro", -] - -[[package]] -name = "tracing-test-macro" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" -dependencies = [ - "quote", - "syn 2.0.104", -] - -[[package]] -name = "tracing-tree" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" -dependencies = [ - "nu-ansi-term 0.46.0", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "trackable" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" -dependencies = [ - "trackable 1.3.0", - "trackable_derive", -] - -[[package]] -name = "trackable" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" -dependencies = [ - "trackable_derive", -] - -[[package]] -name = "trackable_derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "ts-rs" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" -dependencies = [ - "lazy_static", - "thiserror 2.0.17", - "ts-rs-macros", -] - -[[package]] -name = "ts-rs-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "nym-api-requests", - "nym-mixnet-contract-common", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "nym-wallet-types", - "ts-rs", - "walkdir", -] - -[[package]] -name = "ts-rs-macros" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "termcolor", -] - -[[package]] -name = "tsify" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" -dependencies = [ - "gloo-utils 0.1.7", - "serde", - "serde-wasm-bindgen 0.5.0", - "serde_json", - "tsify-macros", - "wasm-bindgen", -] - -[[package]] -name = "tsify-macros" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals 0.28.0", - "syn 2.0.104", -] - -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.21.12", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", - "webpki-roots 0.24.0", -] - -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.3.1", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.22.4", - "rustls-pki-types", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", -] - -[[package]] -name = "typed-builder" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0dd654273fc253fde1df4172c31fb6615cf8b041d3a4008a028ef8b1119e66" -dependencies = [ - "typed-builder-macro", -] - -[[package]] -name = "typed-builder-macro" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c26257f448222014296978b2c8456e2cad4de308c35bdb1e383acd569ef5b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-width" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "uniffi" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b334fd69b3cf198b63616c096aabf9820ab21ed9b2aa1367ddd4b411068bf520" -dependencies = [ - "anyhow", - "camino", - "cargo_metadata 0.19.2", - "clap", - "uniffi_bindgen", - "uniffi_build", - "uniffi_core", - "uniffi_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_bindgen" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ff0132b533483cf19abb30bba5c72c24d9f3e4d9a2ff71cb3e22e73899fd46e" -dependencies = [ - "anyhow", - "askama", - "camino", - "cargo_metadata 0.19.2", - "fs-err", - "glob", - "goblin", - "heck 0.5.0", - "indexmap 2.10.0", - "once_cell", - "serde", - "tempfile", - "textwrap", - "toml 0.5.11", - "uniffi_internal_macros", - "uniffi_meta", - "uniffi_pipeline", - "uniffi_udl", -] - -[[package]] -name = "uniffi_build" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d84d607076008df3c32dd2100ee4e727269f11d3faa35691af70d144598f666" -dependencies = [ - "anyhow", - "camino", - "uniffi_bindgen", -] - -[[package]] -name = "uniffi_core" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e3b997192dc15ef1778c842001811ec7f241a093a693ac864e1fc938e64fa9" -dependencies = [ - "anyhow", - "bytes", - "once_cell", - "static_assertions", -] - -[[package]] -name = "uniffi_internal_macros" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64bec2f3a33f2f08df8150e67fa45ba59a2ca740bf20c1beb010d4d791f9a1b" -dependencies = [ - "anyhow", - "indexmap 2.10.0", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "uniffi_macros" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8708716d2582e4f3d7e9f320290b5966eb951ca421d7630571183615453efc" -dependencies = [ - "camino", - "fs-err", - "once_cell", - "proc-macro2", - "quote", - "serde", - "syn 2.0.104", - "toml 0.5.11", - "uniffi_meta", -] - -[[package]] -name = "uniffi_meta" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d226fc167754ce548c5ece9828c8a06f03bf1eea525d2659ba6bd648bd8e2f3" -dependencies = [ - "anyhow", - "siphasher 0.3.11", - "uniffi_internal_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_pipeline" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b925b6421df15cf4bedee27714022cd9626fb4d7eee0923522a608b274ba4371" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap 2.10.0", - "tempfile", - "uniffi_internal_macros", -] - -[[package]] -name = "uniffi_udl" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c42649b721df759d9d4692a376b82b62ce3028ec9fc466f4780fb8cdf728996" -dependencies = [ - "anyhow", - "textwrap", - "uniffi_meta", - "weedle2", -] - -[[package]] -name = "unit-prefix" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle 2.6.1", -] - -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "utoipa" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" -dependencies = [ - "indexmap 2.10.0", - "serde", - "serde_json", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.104", - "uuid", -] - -[[package]] -name = "utoipa-swagger-ui" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" -dependencies = [ - "axum", - "base64 0.22.1", - "mime_guess", - "regex", - "rust-embed", - "serde", - "serde_json", - "url", - "utoipa", - "zip", -] - -[[package]] -name = "utoipauto" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba36db2c397c614110554a60fbb4bb97d5f8c6823775c766e6f455e37377047" -dependencies = [ - "utoipauto-macro", -] - -[[package]] -name = "utoipauto-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "utoipauto-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "utoipauto-core", -] - -[[package]] -name = "uuid" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" -dependencies = [ - "getrandom 0.3.3", - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "validator-status-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "comfy-table", - "nym-bin-common", - "nym-http-api-client", - "nym-network-defaults", - "nym-validator-client", - "serde", - "serde_json", - "strum", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "vergen" -version = "8.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" -dependencies = [ - "anyhow", - "cargo_metadata 0.18.1", - "cfg-if", - "regex", - "rustc_version 0.4.1", - "rustversion", - "time", -] - -[[package]] -name = "vergen" -version = "9.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b2bf58be11fc9414104c6d3a2e464163db5ef74b12296bda593cac37b6e4777" -dependencies = [ - "anyhow", - "cargo_metadata 0.19.2", - "derive_builder", - "regex", - "rustc_version 0.4.1", - "rustversion", - "time", - "vergen-lib", -] - -[[package]] -name = "vergen-gitcl" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9dfc1de6eb2e08a4ddf152f1b179529638bedc0ea95e6d667c014506377aefe" -dependencies = [ - "anyhow", - "derive_builder", - "rustversion", - "time", - "vergen 9.0.6", - "vergen-lib", -] - -[[package]] -name = "vergen-lib" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" -dependencies = [ - "anyhow", - "derive_builder", - "rustversion", -] - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vt100" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" -dependencies = [ - "itoa", - "log", - "unicode-width 0.1.14", - "vte", -] - -[[package]] -name = "vte" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" -dependencies = [ - "arrayvec", - "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - -[[package]] -name = "wasix" -version = "0.12.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" -dependencies = [ - "wasi 0.11.1+wasi-snapshot-preview1", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.104", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-bindgen-test" -version = "0.3.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" -dependencies = [ - "js-sys", - "minicov", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.3.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "wasm-client-core" -version = "0.1.0" -dependencies = [ - "async-trait", - "console_error_panic_hook", - "js-sys", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-crypto", - "nym-gateway-client", - "nym-http-api-client", - "nym-sphinx", - "nym-sphinx-acknowledgements", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "time", - "tsify", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-storage", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "wasm-storage" -version = "0.1.0" -dependencies = [ - "async-trait", - "getrandom 0.2.16", - "indexed_db_futures", - "js-sys", - "nym-store-cipher", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-utils", -] - -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasm-utils" -version = "0.1.0" -dependencies = [ - "console_error_panic_hook", - "futures", - "getrandom 0.2.16", - "gloo-net", - "gloo-utils 0.2.0", - "js-sys", - "tungstenite 0.20.1", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmtimer" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" -dependencies = [ - "futures", - "js-sys", - "parking_lot", - "pin-utils", - "slab", - "wasm-bindgen", -] - -[[package]] -name = "web-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web_atoms" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" -dependencies = [ - "phf", - "phf_codegen", - "string_cache", - "string_cache_codegen", -] - -[[package]] -name = "webpki-roots" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" -dependencies = [ - "rustls-webpki 0.101.7", -] - -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.2", -] - -[[package]] -name = "webpki-roots" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "weedle2" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" -dependencies = [ - "nom", -] - -[[package]] -name = "whoami" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" -dependencies = [ - "redox_syscall", - "wasite", - "web-sys", -] - -[[package]] -name = "widestring" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections", - "windows-core", - "windows-future", - "windows-link 0.1.3", - "windows-numerics", -] - -[[package]] -name = "windows-collections" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" -dependencies = [ - "windows-core", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.1.3", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-future" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" -dependencies = [ - "windows-core", - "windows-link 0.1.3", - "windows-threading", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "windows-interface" -version = "0.59.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[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", - "windows-link 0.1.3", -] - -[[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-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-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.2", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link 0.2.1", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" -dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - -[[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_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - -[[package]] -name = "winnow" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "writeable" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" -dependencies = [ - "curve25519-dalek", - "rand_core 0.6.4", - "serde", - "zeroize", -] - -[[package]] -name = "xattr" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" -dependencies = [ - "libc", - "rustix 1.0.8", -] - -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - -[[package]] -name = "yoke" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "zerotrie" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "zip" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" -dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap 2.10.0", - "memchr", - "thiserror 2.0.17", - "zopfli", -] - -[[package]] -name = "zknym-lib" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bs58", - "getrandom 0.2.16", - "js-sys", - "nym-bin-common", - "nym-compact-ecash", - "nym-credentials", - "nym-crypto", - "nym-http-api-client", - "rand 0.8.5", - "reqwest 0.12.22", - "serde", - "thiserror 2.0.17", - "tokio", - "tsify", - "uuid", - "wasm-bindgen", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "zopfli" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" -dependencies = [ - "bumpalo", - "crc32fast", - "log", - "simd-adler32", -] - -[[package]] -name = "zstd" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "zulip-client" -version = "0.1.0" -dependencies = [ - "itertools 0.14.0", - "nym-bin-common", - "nym-http-api-client", - "reqwest 0.12.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", - "zeroize", -] diff --git a/common/nymsphinx/Cargo.toml b/common/nymsphinx/Cargo.toml index d6b77f6969b..815a034d7ac 100644 --- a/common/nymsphinx/Cargo.toml +++ b/common/nymsphinx/Cargo.toml @@ -13,6 +13,9 @@ rand = { workspace = true } rand_distr = { workspace = true } rand_chacha = { workspace = true } thiserror = { workspace = true } +serde = { workspace = true, features = ["derive"] } +bincode = { workspace = true } +log = { workspace = true } nym-sphinx-acknowledgements = { path = "acknowledgements" } nym-sphinx-addressing = { path = "addressing" } @@ -47,11 +50,5 @@ features = ["sync"] [features] default = ["sphinx"] -sphinx = [ - "nym-sphinx-params/sphinx", - "nym-sphinx-types/sphinx", -] -outfox = [ - "nym-sphinx-params/outfox", - "nym-sphinx-types/outfox", -] +sphinx = ["nym-sphinx-params/sphinx", "nym-sphinx-types/sphinx"] +outfox = ["nym-sphinx-params/outfox", "nym-sphinx-types/outfox"] diff --git a/common/nymsphinx/anonymous-replies/src/requests/mod.rs b/common/nymsphinx/anonymous-replies/src/requests/mod.rs index ecb2fc7ac50..b6916a20e8b 100644 --- a/common/nymsphinx/anonymous-replies/src/requests/mod.rs +++ b/common/nymsphinx/anonymous-replies/src/requests/mod.rs @@ -7,6 +7,7 @@ use crate::{ReplySurbError, ReplySurbWithKeyRotation}; use nym_sphinx_addressing::clients::{Recipient, RecipientFormattingError}; use nym_sphinx_params::key_rotation::InvalidSphinxKeyRotation; use rand::{CryptoRng, RngCore}; +use serde::{Deserialize, Serialize}; use std::fmt::{Display, Formatter}; use std::mem; use thiserror::Error; @@ -30,7 +31,7 @@ pub enum InvalidAnonymousSenderTagRepresentation { InvalidLength { received: usize, expected: usize }, } -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen)] pub struct AnonymousSenderTag([u8; SENDER_TAG_SIZE]); diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index eb83ec43ea0..c72fed15e06 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use crate::message::{NymMessage, NymMessageError, PaddedMessage, PlainMessage}; +use log::warn; use nym_crypto::aes::cipher::{KeyIvInit, StreamCipher}; use nym_crypto::asymmetric::x25519; use nym_crypto::shared_key::recompute_shared_key; @@ -15,10 +16,11 @@ use nym_sphinx_chunking::reconstruction::MessageReconstructor; use nym_sphinx_params::{ PacketEncryptionAlgorithm, PacketHkdfAlgorithm, ReplySurbEncryptionAlgorithm, }; +use serde::{Deserialize, Serialize}; use thiserror::Error; // TODO: should this live in this file? -#[derive(Debug)] +#[derive(Debug, Serialize, Deserialize)] pub struct ReconstructedMessage { /// The actual plaintext message that was received. pub message: Vec, @@ -28,6 +30,30 @@ pub struct ReconstructedMessage { pub sender_tag: Option, } +impl From for Vec { + fn from(msg: ReconstructedMessage) -> Vec { + match bincode::serialize(&msg) { + Ok(serialized) => serialized, + Err(err) => { + warn!("failed to serialize reconstructed message - {:?}", err); + Vec::new() + } + } + } +} + +impl From<&ReconstructedMessage> for Vec { + fn from(msg: &ReconstructedMessage) -> Vec { + match bincode::serialize(msg) { + Ok(serialized) => serialized, + Err(err) => { + warn!("failed to serialize reconstructed message - {:?}", err); + Vec::new() + } + } + } +} + impl From for (Vec, Option) { fn from(msg: ReconstructedMessage) -> Self { (msg.message, msg.sender_tag) diff --git a/scratch.txt b/scratch.txt new file mode 100644 index 00000000000..19e773b5862 --- /dev/null +++ b/scratch.txt @@ -0,0 +1,434 @@ + + + ▐▛███▜▌ Claude Code v2.1.1 +▝▜█████▛▘ Opus 4.5 · Claude Pro + ▘▘ ▝▝ ~/dev/work/nym + +❯ /config + ⎿ Set defaultPermissionMode to default + +❯ I am currently on the branch max/sdk-streamer. It has turned into a very + large branch, with topics that build upon each other, but are ultimately + seperate: + - an asyncread/asyncwrite implementation for the Nym Client + - an sdk stream abstraction utilising this + - an sdk stream abstraction utilising the first sdk stream abstraction, + which is able to allow the sdk to access the wider internet via the + Gateway's IPRs + - mixtcp, a PoC of a smoltcp fork, which utilises the second sdk stream + abstraction. + + I want you to look at the commits for this branch, and then suggest some + ways that we might be able to easily break this branch into several PRs, + which are each self-contained but sequential (e.g. one PR for the + asyncread/write impl, the next for the first sdk stream abstraction, the + next for the second sdk stream abstraction, the final one for mixtcp). + + Let me know if this is possible please. + +● I'll analyze the commit history on this branch to understand how the changes are structured and whether they can be cleanly separated into sequential PRs. + +● Bash(git log develop..HEAD --oneline --reverse) + ⎿  05aefa5c5 serde for ReconstructedMessage + 5816763a6 AsyncRead for MixnetClient + e5e9aaeca Switch to PollSender + … +143 lines (ctrl+o to expand) + +● Let me get more details on the structure of changes by looking at which files are modified across different commits. + +● Bash(git log develop..HEAD --oneline --stat --name-only | head -500) + ⎿  aa1759569 comment + sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs + 9cebf5a25 clippy + … +504 lines (ctrl+o to expand) + +● Let me continue viewing the earlier commits and also get a cleaner view of the major file changes. + +● Bash(git log develop..HEAD --oneline --stat --name-only | tail -n +500 | head + -500) + ⎿  nym-gateway-directory/src/lib.rs + nym-ip-packet-client/Cargo.toml + nym-ip-packet-client/src/error.rs + … +137 lines (ctrl+o to expand) + +● Let me also look at the directory structure of the new modules to understand the boundaries better. + +● Bash(git diff develop --stat --name-only | sort | uniq | head -100) + ⎿  ansible/nym-node/playbooks/ansible.cfg + ansible/nym-node/playbooks/bond.yml + ansible/nym-node/playbooks/deploy.yml + … +107 lines (ctrl+o to expand) + +● Bash(git diff develop --stat --name-only | grep -E "^(mixtcp|smolmix)/" | sort + | uniq) + ⎿  mixtcp/Cargo.toml + mixtcp/examples/cloudflare_ping.rs + mixtcp/examples/https_client.rs + … +6 lines (ctrl+o to expand) + +● Bash(git diff develop --stat --name-only | grep -E "stream_wrapper" | sort | + uniq) + ⎿  sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs + sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs + sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs + sdk/rust/nym-sdk/src/stream_wrapper.rs + +● Bash(git diff develop --stat --name-only | grep -E "ip_packet_client" | sort | + uniq) + ⎿  sdk/rust/nym-sdk/src/ip_packet_client/connect.rs + sdk/rust/nym-sdk/src/ip_packet_client/error.rs + sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs + … +3 lines (ctrl+o to expand) + +● Bash(git diff develop --stat --name-only | grep -E "nym-gateway-directory" | + sort | uniq) + ⎿  (No content) + +● Bash(git diff develop --stat --name-only | grep -E + "(native_client|inbound_messages|receiver\.rs)" | sort | uniq) + ⎿  common/client-core/src/client/inbound_messages.rs + common/nymsphinx/src/receiver.rs + sdk/rust/nym-sdk/src/mixnet/native_client.rs + +● Bash(git diff develop --stat --name-only | grep -E "^common/nymsphinx" | sort + | uniq) + ⎿  common/nymsphinx/acknowledgements/src/lib.rs + common/nymsphinx/anonymous-replies/Cargo.toml + common/nymsphinx/anonymous-replies/src/lib.rs + … +6 lines (ctrl+o to expand) + +● Let me look at the structure of the key SDK files to understand the module relationships. + +● Read(sdk/rust/nym-sdk/src/lib.rs) + ⎿  Read 34 lines + +● Read(sdk/rust/nym-sdk/src/stream_wrapper.rs) + ⎿  Read 53 lines + +● Read(sdk/rust/nym-sdk/src/ip_packet_client.rs) + ⎿  Read 15 lines + +● Read(mixtcp/src/lib.rs) + ⎿  Read 50 lines + +● Let me check the size of each component and understand the dependency chain better. + +● Bash(wc -l /home/m/dev/work/nym/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_str + eam_wrapper.rs + /home/m/dev/work/nym/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_w…) + ⎿ 1057 + /home/m/dev/work/nym/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_s + tream_wrapper.rs + 937 + /home/m/dev/work/nym/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_s + … +4 lines (ctrl+o to expand) + +● Bash(wc -l /home/m/dev/work/nym/mixtcp/src/*.rs) + ⎿   120 /home/m/dev/work/nym/mixtcp/src/bridge.rs + 165 /home/m/dev/work/nym/mixtcp/src/device.rs + 52 /home/m/dev/work/nym/mixtcp/src/error.rs + … +2 lines (ctrl+o to expand) + +● Bash(wc -l /home/m/dev/work/nym/sdk/rust/nym-sdk/src/ip_packet_client/*.rs + /home/m/dev/work/nym/sdk/rust/nym-sdk/src/ip_packet_client.rs 2>/dev/null + || echo "files m…) + ⎿ 196 + /home/m/dev/work/nym/sdk/rust/nym-sdk/src/ip_packet_client/connec + t.rs + 79 + /home/m/dev/work/nym/sdk/rust/nym-sdk/src/ip_packet_client/error. + … +7 lines (ctrl+o to expand) + +● Bash(git diff develop -- common/nymsphinx/src/receiver.rs | head -100) + ⎿ diff --git a/common/nymsphinx/src/receiver.rs + b/common/nymsphinx/src/re + ceiver.rs + index eb83ec43e..da38e7fb0 100644 + … +102 lines (ctrl+o to expand) + +● Bash(git diff develop -- sdk/rust/nym-sdk/src/mixnet/native_client.rs | head + -200) + ⎿ diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs + b/sdk/rust/ny + m-sdk/src/mixnet/native_client.rs + index d9d19008d..04dda121c 100644 + … +208 lines (ctrl+o to expand) + +● Bash(git diff develop -- common/client-core/src/client/inbound_messages.rs | + head -150) + ⎿ diff --git a/common/client-core/src/client/inbound_messages.rs + b/common + /client-core/src/client/inbound_messages.rs + index b74c9195b..f01ba5474 100644 + … +158 lines (ctrl+o to expand) + +● Now I have a clear picture of the branch structure. Let me provide my analysis. + + --- + Analysis: Breaking max/sdk-streamer into Sequential PRs + + Based on analyzing the 100+ commits, the changes can be cleanly divided into 4 sequential PRs. However, the commits are interleaved rather than linearly separated, which means simple branch splitting won't work. Here's what I found: + + Layer 1: AsyncRead/AsyncWrite for MixnetClient + + Key commits: 05aefa5c5 → c21e48462 (first ~15 commits) + Files: + - common/nymsphinx/src/receiver.rs - ReconstructedMessageCodec, serde derives + - common/client-core/src/client/inbound_messages.rs - InputMessageCodec, PollSender + - sdk/rust/nym-sdk/src/mixnet/native_client.rs - AsyncRead/AsyncWrite/Sink impls + - Minor changes to common/nymsphinx/Cargo.toml, common/client-core/Cargo.toml + + Layer 2: MixStream/MixSocket (basic stream wrapper) + + Key commits: 8960cbf9a → a6d1e6684 (~15 commits) + Files: + - sdk/rust/nym-sdk/src/stream_wrapper.rs + - sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs (~1000 lines) + - sdk/rust/nym-sdk/src/lib.rs (module export) + + Layer 3: IpMixStream (IPR wrapper) + + Key commits: 08f13dbf3 → many subsequent (~30+ commits, heavily interleaved) + Files: + - sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs (~940 lines) + - sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs + - sdk/rust/nym-sdk/src/ip_packet_client/ (new module, ~790 lines) + + Layer 4: mixtcp + + Key commits: ed7c1955a onwards (started as "smolmix", renamed) + Files: + - mixtcp/ - entire new crate (~400 lines) + + --- + Feasibility Assessment + + The good news: The layers are logically separable - each builds on the previous. + + The challenge: Commits are interleaved. For example, fixes to Layer 1 appear after Layer 3 work began. This means you cannot simply split by commit range. + + --- + Recommended Approach + + Option A: Surgical Extraction (Recommended) + + Create 4 new branches from develop, copying in only the relevant files for each layer: + + 1. PR1: feature/asyncread-asyncwrite + - Extract just the codec changes and AsyncRead/AsyncWrite impls from current state + - ~5-6 files changed + 2. PR2: feature/sdk-stream-wrapper (depends on PR1) + - Add mixnet_stream_wrapper.rs and module structure + - ~3 files + 3. PR3: feature/sdk-ipr-stream (depends on PR2) + - Add mixnet_stream_wrapper_ipr.rs, network_env.rs, ip_packet_client/ + - ~8 files + 4. PR4: feature/mixtcp (depends on PR3) + - Add entire mixtcp/ crate + - ~10 files + + Option B: Interactive Rebase + + Reorder commits to group by layer, then split. More work, preserves commit history. + + --- + My Recommendation + + Option A is more practical given the extent of interleaving. Would you like me to: + + 1. Create a detailed file-by-file breakdown of what goes into each PR? + 2. Help you create the first branch (feature/asyncread-asyncwrite) by identifying exactly which changes from the current state belong there? + 3. Something else? + +✻ Worked for 2m 2s + +❯ I am wondering how commit history we lose if we go with Option A, and/or + whether this is infact a meaningful problem to have, since this branch + hasn't been merged yet and as such the commit history is only for the + branch itself (which I am personally not very precious about). + +● You're asking the right question, and your intuition is correct. + + What "commit history" actually means here + + Looking at your commits, many are: + - temp, temp commit, clippy, fmt, linting + - remove comments and unused imports + - temp get rid of logging for ci + - Iterative fixes like Fix inverted buffer slice logic + + This is normal development noise, not meaningful historical record. + + What happens on merge anyway + + Most teams either: + 1. Squash merge → All 100+ commits become 1 commit per PR anyway + 2. Merge commit → History preserved but rarely consulted + + Either way, the granular commit history becomes largely irrelevant once merged. + + What actually matters for posterity + + - PR descriptions explaining the why of each layer + - Code comments for complex logic + - The final code being correct and reviewable + + Bottom line + + You lose nothing meaningful with Option A. The "history" you'd preserve with Option B is mostly development iteration that nobody will ever git blame for insight. + + Going with Option A gives you: + - Clean, focused PRs that reviewers can actually understand + - Clear separation of concerns + - Easy revert boundaries if a layer causes issues + - Less work than trying to surgically reorder 100+ interleaved commits + + If you want, I can start preparing the first PR (feature/asyncread-asyncwrite) by identifying exactly which file changes from the current branch state belong in it. + +❯ Annoyingly, we would need to rebase with develop first before we made the + PRs. I think this is then something for after that happens. Want to try + rebase it first? + +● Let me check the current state and then attempt the rebase. + +● Bash(git status && git log --oneline -1) + ⎿  On branch max/sdk-streamer + Your branch is ahead of 'origin/max/sdk-streamer' by 1 commit. + (use "git push" to publish your local commits) + … +3 lines (ctrl+o to expand) + +● Bash(git fetch origin develop && git log --oneline HEAD..origin/develop | wc + -l) + ⎿  Error: Exit code 128 + ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory + git@github.com: Permission denied (publickey). + fatal: Could not read from remote repository. + + Please make sure you have the correct access rights + and the repository exists. + +● SSH key issue. Let me check the remotes and try a different approach. + +● Bash(git remote -v) + ⎿  origin git@github.com:nymtech/nym.git (fetch) + origin git@github.com:nymtech/nym.git (push) + +● I can't fetch from the remote - there's an SSH key issue (likely your SSH agent isn't running or the key isn't loaded). You'll need to run the rebase yourself. + + Here are the commands: + + # Fetch latest develop + git fetch origin develop + + # See how many commits develop is ahead + git log --oneline HEAD..origin/develop | head -20 + + # Rebase onto develop + git rebase origin/develop + + If there are conflicts during rebase, I can help you resolve them. Just let me know when you hit one or when the rebase completes. + +❯ Ah yes, I have ssh password protected. I will do it myself now. + +● Sounds good. Let me know when it's done or if you hit any conflicts - I can help work through them. + +❯ I have pulled the latest from develop. Try the rebase now. + +● Bash(git rebase origin/develop) timeout: 5m 0s + ⎿  Interrupted · What should Claude do instead? + +❯ Use `git rebase develop` to rebase on the local branch + +● Bash(git rebase develop) timeout: 5m 0s + ⎿  Error: Exit code 1 + Rebasing (1/138) error: could not apply 05aefa5c5... serde for + ReconstructedMessage + hint: Resolve all conflicts manually, mark them as resolved with + hint: "git add/rm ", then run "git rebase --continue". + hint: You can instead skip this commit: run "git rebase --skip". + hint: To abort and get back to the state before "git rebase", run "git + rebase --abort". + hint: Disable this message with "git config set advice.mergeConflict false" + Could not apply 05aefa5c5... # serde for ReconstructedMessage + + Auto-merging Cargo.lock + … +1 line (ctrl+o to see all) + +● First conflict - just Cargo.lock. This is usually best resolved by accepting one version and regenerating. Let me handle it. + +● Bash(git checkout --theirs Cargo.lock && git add Cargo.lock && timeout: 5m + git rebase --continue) 0s + ⎿  Error: Exit code 1 + Updated 1 path from the index + Rebasing (2/138) Rebasing (3/138) Rebasing (4/138) Rebasing (5/138) Rebasing + (6/138) Rebasing (7/138) Rebasing (8/138) Rebasing (9/138) Rebasing + (10/138) Rebasing (11/138) Rebasing (12/138) Rebasing (13/138) Rebasing + (14/138) Rebasing (15/138) Rebasing (16/138) Rebasing (17/138) Rebasing + (18/138) Rebasing (19/138) Rebasing (20/138) Rebasing (21/138) Rebasing + (22/138) Rebasing (23/138) Rebasing (24/138) Rebasing (25/138) Rebasing + (26/138) Rebasing (27/138) error: could not apply f48716695... temp commit: + got gateway dir dependency working, moving on to vpn-api-client + hint: Resolve all conflicts manually, mark them as resolved with + hint: "git add/rm ", then run "git rebase --continue". + hint: You can instead skip this commit: run "git rebase --skip". + hint: To abort and get back to the state before "git rebase", run "git + rebase --abort". + hint: Disable this message with "git config set advice.mergeConflict false" + Could not apply f48716695... # temp commit: got gateway dir dependency + working, moving on to vpn-api-client + + … +5 lines (ctrl+o to see all) + +● Conflict in Cargo.toml. Let me see what it looks like. + +● Bash(git diff --name-only --diff-filter=U) + ⎿  Cargo.toml + +● Bash(grep -n "<<<<<<" Cargo.toml | head -20) + ⎿  129:<<<<<<< HEAD + +● Read(Cargo.toml) + ⎿  Read 40 lines + ⎿  Interrupted · What should Claude do instead? + +❯ I will do the rebase myself then we can work on the splitting of the + branch into several PRs. + + I currently have a draft PR of this entire branch - I think I should + delete this PR with the explainer that I will split it into smaller PRs. + Does that sound a good approach or do you have a better idea? + +● Good plan to split it up. One small suggestion: + + Close the PR rather than delete it. That way: + - Any discussion/context in the PR is preserved + - You can reference it in the new PRs ("Split from #XYZ") + - The new PRs can link back to it for the full picture + + Just add a comment like: + "Closing to split into smaller, focused PRs: + 1. AsyncRead/AsyncWrite for MixnetClient + 2. SDK stream wrapper (MixStream/MixSocket) + 3. IPR stream wrapper (IpMixStream) + 4. mixtcp + + Will link the new PRs here as they're created." + + Then as you create each PR, edit that comment or add new comments linking to them. Keeps everything traceable. + +❯ If I exit the claude app, do you remember this conversation when I start + it up again? + +● No, I don't have persistent memory across sessions. Each new conversation starts fresh. + + However, Claude Code may store conversation history locally - you can check with /resume when you restart to see if you can continue from where you left off. + + Either way, we've established a clear plan: + 1. You finish the rebase onto develop + 2. Close (not delete) the draft PR with explanation + 3. Split into 4 sequential PRs (AsyncRead/Write → MixStream → IpMixStream → mixtcp) + + When you come back, just give me a brief recap and we can pick up from there. + + + From a0ef1ae9aa2fe33fff0bb66770d92b2a6e6c78aa Mon Sep 17 00:00:00 2001 From: durch Date: Fri, 7 Jun 2024 12:22:03 +0200 Subject: [PATCH 002/139] AsyncRead for MixnetClient --- .../anonymous-replies/src/requests/mod.rs | 3 +- common/nymsphinx/src/receiver.rs | 28 +- pnpm-lock.yaml | 5611 +++++++++++++++++ sdk/rust/nym-sdk/src/mixnet/native_client.rs | 62 +- 4 files changed, 5674 insertions(+), 30 deletions(-) create mode 100644 pnpm-lock.yaml diff --git a/common/nymsphinx/anonymous-replies/src/requests/mod.rs b/common/nymsphinx/anonymous-replies/src/requests/mod.rs index b6916a20e8b..ecb2fc7ac50 100644 --- a/common/nymsphinx/anonymous-replies/src/requests/mod.rs +++ b/common/nymsphinx/anonymous-replies/src/requests/mod.rs @@ -7,7 +7,6 @@ use crate::{ReplySurbError, ReplySurbWithKeyRotation}; use nym_sphinx_addressing::clients::{Recipient, RecipientFormattingError}; use nym_sphinx_params::key_rotation::InvalidSphinxKeyRotation; use rand::{CryptoRng, RngCore}; -use serde::{Deserialize, Serialize}; use std::fmt::{Display, Formatter}; use std::mem; use thiserror::Error; @@ -31,7 +30,7 @@ pub enum InvalidAnonymousSenderTagRepresentation { InvalidLength { received: usize, expected: usize }, } -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen)] pub struct AnonymousSenderTag([u8; SENDER_TAG_SIZE]); diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index c72fed15e06..eb83ec43ea0 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 use crate::message::{NymMessage, NymMessageError, PaddedMessage, PlainMessage}; -use log::warn; use nym_crypto::aes::cipher::{KeyIvInit, StreamCipher}; use nym_crypto::asymmetric::x25519; use nym_crypto::shared_key::recompute_shared_key; @@ -16,11 +15,10 @@ use nym_sphinx_chunking::reconstruction::MessageReconstructor; use nym_sphinx_params::{ PacketEncryptionAlgorithm, PacketHkdfAlgorithm, ReplySurbEncryptionAlgorithm, }; -use serde::{Deserialize, Serialize}; use thiserror::Error; // TODO: should this live in this file? -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug)] pub struct ReconstructedMessage { /// The actual plaintext message that was received. pub message: Vec, @@ -30,30 +28,6 @@ pub struct ReconstructedMessage { pub sender_tag: Option, } -impl From for Vec { - fn from(msg: ReconstructedMessage) -> Vec { - match bincode::serialize(&msg) { - Ok(serialized) => serialized, - Err(err) => { - warn!("failed to serialize reconstructed message - {:?}", err); - Vec::new() - } - } - } -} - -impl From<&ReconstructedMessage> for Vec { - fn from(msg: &ReconstructedMessage) -> Vec { - match bincode::serialize(msg) { - Ok(serialized) => serialized, - Err(err) => { - warn!("failed to serialize reconstructed message - {:?}", err); - Vec::new() - } - } - } -} - impl From for (Vec, Option) { fn from(msg: ReconstructedMessage) -> Self { (msg.message, msg.sender_tag) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000000..5d1255bdea3 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5611 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + '@cosmjs/amino': ^0.32.4 + '@cosmjs/cosmwasm-stargate': ^0.32.4 + '@cosmjs/proto-signing': ^0.32.4 + '@cosmjs/stargate': ^0.32.4 + cosmjs-types: ^0.9.0 + +importers: + + .: + dependencies: + lucide-react: + specifier: ^0.453.0 + version: 0.453.0(react@19.2.0) + devDependencies: + '@npmcli/node-gyp': + specifier: ^3.0.0 + version: 3.0.0 + '@types/minimatch': + specifier: ^6.0.0 + version: 6.0.0 + lerna: + specifier: ^7.3.0 + version: 7.4.2(encoding@0.1.13) + node-gyp: + specifier: ^9.3.1 + version: 9.4.1 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + tslog: + specifier: 3.3.3 + version: 3.3.3 + +packages: + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@hutson/parse-repository-url@3.0.2': + resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} + engines: {node: '>=6.9.0'} + + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@lerna/child-process@7.4.2': + resolution: {integrity: sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q==} + engines: {node: '>=16.0.0'} + + '@lerna/create@7.4.2': + resolution: {integrity: sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg==} + engines: {node: '>=16.0.0'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + '@npmcli/fs@3.1.1': + resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/git@4.1.0': + resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/installed-package-contents@2.1.0': + resolution: {integrity: sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + + '@npmcli/node-gyp@3.0.0': + resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/promise-spawn@6.0.2': + resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/run-script@6.0.2': + resolution: {integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@nrwl/devkit@16.10.0': + resolution: {integrity: sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ==} + + '@nrwl/tao@16.10.0': + resolution: {integrity: sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q==} + hasBin: true + + '@nx/devkit@16.10.0': + resolution: {integrity: sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w==} + peerDependencies: + nx: '>= 15 <= 17' + + '@nx/nx-darwin-arm64@16.10.0': + resolution: {integrity: sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@nx/nx-darwin-x64@16.10.0': + resolution: {integrity: sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@nx/nx-freebsd-x64@16.10.0': + resolution: {integrity: sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@nx/nx-linux-arm-gnueabihf@16.10.0': + resolution: {integrity: sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@nx/nx-linux-arm64-gnu@16.10.0': + resolution: {integrity: sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@nx/nx-linux-arm64-musl@16.10.0': + resolution: {integrity: sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@nx/nx-linux-x64-gnu@16.10.0': + resolution: {integrity: sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@nx/nx-linux-x64-musl@16.10.0': + resolution: {integrity: sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@nx/nx-win32-arm64-msvc@16.10.0': + resolution: {integrity: sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@nx/nx-win32-x64-msvc@16.10.0': + resolution: {integrity: sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@octokit/auth-token@3.0.4': + resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} + engines: {node: '>= 14'} + + '@octokit/core@4.2.4': + resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} + engines: {node: '>= 14'} + + '@octokit/endpoint@7.0.6': + resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} + engines: {node: '>= 14'} + + '@octokit/graphql@5.0.6': + resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} + engines: {node: '>= 14'} + + '@octokit/openapi-types@18.1.1': + resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} + + '@octokit/plugin-enterprise-rest@6.0.1': + resolution: {integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==} + + '@octokit/plugin-paginate-rest@6.1.2': + resolution: {integrity: sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=4' + + '@octokit/plugin-request-log@1.0.4': + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-rest-endpoint-methods@7.2.3': + resolution: {integrity: sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/request-error@3.0.3': + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} + engines: {node: '>= 14'} + + '@octokit/request@6.2.8': + resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} + engines: {node: '>= 14'} + + '@octokit/rest@19.0.11': + resolution: {integrity: sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==} + engines: {node: '>= 14'} + + '@octokit/tsconfig@1.0.2': + resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==} + + '@octokit/types@10.0.0': + resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} + + '@octokit/types@9.3.2': + resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} + + '@parcel/watcher@2.0.4': + resolution: {integrity: sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@sigstore/bundle@1.1.0': + resolution: {integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@sigstore/protobuf-specs@0.2.1': + resolution: {integrity: sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@sigstore/sign@1.0.0': + resolution: {integrity: sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@sigstore/tuf@1.0.3': + resolution: {integrity: sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tufjs/canonical-json@1.0.0': + resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@tufjs/models@1.0.4': + resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@types/minimatch@3.0.5': + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + + '@types/minimatch@6.0.0': + resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} + deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@yarnpkg/lockfile@1.1.0': + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + + '@yarnpkg/parsers@3.0.0-rc.46': + resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==} + engines: {node: '>=14.15.0'} + + '@zkochan/js-yaml@0.0.6': + resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==} + hasBin: true + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + add-stream@1.0.0: + resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + aproba@2.1.0: + resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} + + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-differ@3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builtins@1.0.3: + resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} + + builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} + + byte-size@8.1.1: + resolution: {integrity: sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==} + engines: {node: '>=12.17'} + + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + cacache@17.1.4: + resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.0: + resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} + engines: {node: '>=10'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.6.1: + resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} + engines: {node: '>=6'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + cmd-shim@6.0.1: + resolution: {integrity: sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + columnify@1.6.0: + resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==} + engines: {node: '>=8.0.0'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-core@5.0.1: + resolution: {integrity: sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==} + engines: {node: '>=14'} + + conventional-changelog-preset-loader@3.0.0: + resolution: {integrity: sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==} + engines: {node: '>=14'} + + conventional-changelog-writer@6.0.1: + resolution: {integrity: sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==} + engines: {node: '>=14'} + hasBin: true + + conventional-commits-filter@3.0.0: + resolution: {integrity: sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==} + engines: {node: '>=14'} + + conventional-commits-parser@4.0.0: + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} + hasBin: true + + conventional-recommended-bump@7.0.1: + resolution: {integrity: sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==} + engines: {node: '>=14'} + hasBin: true + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + dateformat@3.0.3: + resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + + detect-indent@5.0.0: + resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==} + engines: {node: '>=4'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.3.2: + resolution: {integrity: sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + enquirer@2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + envinfo@7.8.1: + resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + engines: {node: '>=4'} + hasBin: true + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + execa@5.0.0: + resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==} + engines: {node: '>=10'} + + exponential-backoff@3.1.3: + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-pkg-repo@4.2.1: + resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} + engines: {node: '>=6.9.0'} + hasBin: true + + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.0: + resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + git-raw-commits@3.0.0: + resolution: {integrity: sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==} + engines: {node: '>=14'} + hasBin: true + + git-remote-origin-url@2.0.0: + resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==} + engines: {node: '>=4'} + + git-semver-tags@5.0.1: + resolution: {integrity: sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==} + engines: {node: '>=14'} + hasBin: true + + git-up@7.0.0: + resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + + git-url-parse@13.1.0: + resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==} + + gitconfiglocal@1.0.0: + resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.1.4: + resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@3.0.8: + resolution: {integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==} + engines: {node: '>=10'} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + hosted-git-info@6.1.3: + resolution: {integrity: sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-walk@5.0.1: + resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ignore-walk@6.0.5: + resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + init-package-json@5.0.0: + resolution: {integrity: sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inquirer@8.2.7: + resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} + engines: {node: '>=12.0.0'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + engines: {node: '>= 12'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-ssh@1.4.1: + resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} + + is-stream@2.0.0: + resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} + engines: {node: '>=8'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-text-path@1.0.1: + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + lerna@7.4.2: + resolution: {integrity: sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA==} + engines: {node: '>=16.0.0'} + hasBin: true + + libnpmaccess@7.0.2: + resolution: {integrity: sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + libnpmpublish@7.3.0: + resolution: {integrity: sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + load-json-file@6.2.0: + resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} + engines: {node: '>=8'} + + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.ismatch@4.4.0: + resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lucide-react@0.453.0: + resolution: {integrity: sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + make-fetch-happen@11.1.1: + resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + meow@8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + + minimatch@3.0.5: + resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + minipass-fetch@3.0.5: + resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-json-stream@1.0.2: + resolution: {integrity: sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + modify-values@1.0.1: + resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} + engines: {node: '>=0.10.0'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multimatch@5.0.0: + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + + node-machine-id@1.1.12: + resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-package-data@5.0.0: + resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-bundled@1.1.2: + resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} + + npm-bundled@3.0.1: + resolution: {integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@1.0.1: + resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@8.1.1: + resolution: {integrity: sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==} + engines: {node: '>=10'} + + npm-packlist@5.1.1: + resolution: {integrity: sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + npm-packlist@7.0.4: + resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-pick-manifest@8.0.2: + resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-registry-fetch@14.0.5: + resolution: {integrity: sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + nx@16.10.0: + resolution: {integrity: sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg==} + hasBin: true + peerDependencies: + '@swc-node/register': ^1.6.7 + '@swc/core': ^1.3.85 + peerDependenciesMeta: + '@swc-node/register': + optional: true + '@swc/core': + optional: true + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-map-series@2.1.0: + resolution: {integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==} + engines: {node: '>=8'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-pipe@3.1.0: + resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==} + engines: {node: '>=8'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-reduce@2.1.0: + resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} + engines: {node: '>=8'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + p-waterfall@2.1.1: + resolution: {integrity: sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==} + engines: {node: '>=8'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + pacote@15.2.0: + resolution: {integrity: sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-path@7.1.0: + resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} + + parse-url@8.1.0: + resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + promzard@1.0.2: + resolution: {integrity: sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + protocols@2.0.2: + resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + engines: {node: '>=0.10.0'} + + read-cmd-shim@4.0.0: + resolution: {integrity: sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + read-package-json@6.0.4: + resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + deprecated: This package is no longer supported. Please use @npmcli/package-json instead. + + read-pkg-up@3.0.0: + resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} + engines: {node: '>=4'} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + read@2.1.0: + resolution: {integrity: sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + read@3.0.1: + resolution: {integrity: sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@4.4.1: + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} + engines: {node: '>=14'} + hasBin: true + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.5.3: + resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sigstore@1.9.0: + resolution: {integrity: sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + sort-keys@2.0.0: + resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==} + engines: {node: '>=4'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strong-log-transformer@2.1.0: + resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} + engines: {node: '>=4'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar@6.1.11: + resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} + engines: {node: '>= 10'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + temp-dir@1.0.0: + resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} + engines: {node: '>=4'} + + text-extensions@1.9.0: + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tmp@0.2.5: + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tslog@3.3.3: + resolution: {integrity: sha512-lGrkndwpAohZ9ntQpT+xtUw5k9YFV1DjsksiWQlBSf82TTqsSAWBARPRD9juI730r8o3Awpkjp2aXy9k+6vr+g==} + engines: {node: '>=10'} + + tuf-js@1.1.7: + resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.4.1: + resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==} + engines: {node: '>=6'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-filename@3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-slug@4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + upath@2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache@2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@3.0.0: + resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} + + validate-npm-package-name@5.0.0: + resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + write-json-file@3.2.0: + resolution: {integrity: sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==} + engines: {node: '>=6'} + + write-pkg@4.0.0: + resolution: {integrity: sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==} + engines: {node: '>=8'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + +snapshots: + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.28.5': {} + + '@gar/promisify@1.1.3': {} + + '@hutson/parse-repository-url@3.0.2': {} + + '@inquirer/external-editor@1.0.2': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.0 + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@lerna/child-process@7.4.2': + dependencies: + chalk: 4.1.0 + execa: 5.0.0 + strong-log-transformer: 2.1.0 + + '@lerna/create@7.4.2(encoding@0.1.13)(typescript@5.9.3)': + dependencies: + '@lerna/child-process': 7.4.2 + '@npmcli/run-script': 6.0.2 + '@nx/devkit': 16.10.0(nx@16.10.0) + '@octokit/plugin-enterprise-rest': 6.0.1 + '@octokit/rest': 19.0.11(encoding@0.1.13) + byte-size: 8.1.1 + chalk: 4.1.0 + clone-deep: 4.0.1 + cmd-shim: 6.0.1 + columnify: 1.6.0 + conventional-changelog-core: 5.0.1 + conventional-recommended-bump: 7.0.1 + cosmiconfig: 8.3.6(typescript@5.9.3) + dedent: 0.7.0 + execa: 5.0.0 + fs-extra: 11.3.2 + get-stream: 6.0.0 + git-url-parse: 13.1.0 + glob-parent: 5.1.2 + globby: 11.1.0 + graceful-fs: 4.2.11 + has-unicode: 2.0.1 + ini: 1.3.8 + init-package-json: 5.0.0 + inquirer: 8.2.7 + is-ci: 3.0.1 + is-stream: 2.0.0 + js-yaml: 4.1.0 + libnpmpublish: 7.3.0 + load-json-file: 6.2.0 + lodash: 4.17.21 + make-dir: 4.0.0 + minimatch: 3.0.5 + multimatch: 5.0.0 + node-fetch: 2.6.7(encoding@0.1.13) + npm-package-arg: 8.1.1 + npm-packlist: 5.1.1 + npm-registry-fetch: 14.0.5 + npmlog: 6.0.2 + nx: 16.10.0 + p-map: 4.0.0 + p-map-series: 2.1.0 + p-queue: 6.6.2 + p-reduce: 2.1.0 + pacote: 15.2.0 + pify: 5.0.0 + read-cmd-shim: 4.0.0 + read-package-json: 6.0.4 + resolve-from: 5.0.0 + rimraf: 4.4.1 + semver: 7.7.3 + signal-exit: 3.0.7 + slash: 3.0.0 + ssri: 9.0.1 + strong-log-transformer: 2.1.0 + tar: 6.1.11 + temp-dir: 1.0.0 + upath: 2.0.1 + uuid: 9.0.1 + validate-npm-package-license: 3.0.4 + validate-npm-package-name: 5.0.0 + write-file-atomic: 5.0.1 + write-pkg: 4.0.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - '@types/node' + - bluebird + - debug + - encoding + - supports-color + - typescript + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@npmcli/fs@2.1.2': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.7.3 + + '@npmcli/fs@3.1.1': + dependencies: + semver: 7.7.3 + + '@npmcli/git@4.1.0': + dependencies: + '@npmcli/promise-spawn': 6.0.2 + lru-cache: 7.18.3 + npm-pick-manifest: 8.0.2 + proc-log: 3.0.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.7.3 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/installed-package-contents@2.1.0': + dependencies: + npm-bundled: 3.0.1 + npm-normalize-package-bin: 3.0.1 + + '@npmcli/move-file@2.0.1': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + + '@npmcli/node-gyp@3.0.0': {} + + '@npmcli/promise-spawn@6.0.2': + dependencies: + which: 3.0.1 + + '@npmcli/run-script@6.0.2': + dependencies: + '@npmcli/node-gyp': 3.0.0 + '@npmcli/promise-spawn': 6.0.2 + node-gyp: 9.4.1 + read-package-json-fast: 3.0.2 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + + '@nrwl/devkit@16.10.0(nx@16.10.0)': + dependencies: + '@nx/devkit': 16.10.0(nx@16.10.0) + transitivePeerDependencies: + - nx + + '@nrwl/tao@16.10.0': + dependencies: + nx: 16.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - debug + + '@nx/devkit@16.10.0(nx@16.10.0)': + dependencies: + '@nrwl/devkit': 16.10.0(nx@16.10.0) + ejs: 3.1.10 + enquirer: 2.3.6 + ignore: 5.3.2 + nx: 16.10.0 + semver: 7.5.3 + tmp: 0.2.5 + tslib: 2.8.1 + + '@nx/nx-darwin-arm64@16.10.0': + optional: true + + '@nx/nx-darwin-x64@16.10.0': + optional: true + + '@nx/nx-freebsd-x64@16.10.0': + optional: true + + '@nx/nx-linux-arm-gnueabihf@16.10.0': + optional: true + + '@nx/nx-linux-arm64-gnu@16.10.0': + optional: true + + '@nx/nx-linux-arm64-musl@16.10.0': + optional: true + + '@nx/nx-linux-x64-gnu@16.10.0': + optional: true + + '@nx/nx-linux-x64-musl@16.10.0': + optional: true + + '@nx/nx-win32-arm64-msvc@16.10.0': + optional: true + + '@nx/nx-win32-x64-msvc@16.10.0': + optional: true + + '@octokit/auth-token@3.0.4': {} + + '@octokit/core@4.2.4(encoding@0.1.13)': + dependencies: + '@octokit/auth-token': 3.0.4 + '@octokit/graphql': 5.0.6(encoding@0.1.13) + '@octokit/request': 6.2.8(encoding@0.1.13) + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + + '@octokit/endpoint@7.0.6': + dependencies: + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 + + '@octokit/graphql@5.0.6(encoding@0.1.13)': + dependencies: + '@octokit/request': 6.2.8(encoding@0.1.13) + '@octokit/types': 9.3.2 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + + '@octokit/openapi-types@18.1.1': {} + + '@octokit/plugin-enterprise-rest@6.0.1': {} + + '@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4(encoding@0.1.13))': + dependencies: + '@octokit/core': 4.2.4(encoding@0.1.13) + '@octokit/tsconfig': 1.0.2 + '@octokit/types': 9.3.2 + + '@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.4(encoding@0.1.13))': + dependencies: + '@octokit/core': 4.2.4(encoding@0.1.13) + + '@octokit/plugin-rest-endpoint-methods@7.2.3(@octokit/core@4.2.4(encoding@0.1.13))': + dependencies: + '@octokit/core': 4.2.4(encoding@0.1.13) + '@octokit/types': 10.0.0 + + '@octokit/request-error@3.0.3': + dependencies: + '@octokit/types': 9.3.2 + deprecation: 2.3.1 + once: 1.4.0 + + '@octokit/request@6.2.8(encoding@0.1.13)': + dependencies: + '@octokit/endpoint': 7.0.6 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + node-fetch: 2.6.7(encoding@0.1.13) + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + + '@octokit/rest@19.0.11(encoding@0.1.13)': + dependencies: + '@octokit/core': 4.2.4(encoding@0.1.13) + '@octokit/plugin-paginate-rest': 6.1.2(@octokit/core@4.2.4(encoding@0.1.13)) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@4.2.4(encoding@0.1.13)) + '@octokit/plugin-rest-endpoint-methods': 7.2.3(@octokit/core@4.2.4(encoding@0.1.13)) + transitivePeerDependencies: + - encoding + + '@octokit/tsconfig@1.0.2': {} + + '@octokit/types@10.0.0': + dependencies: + '@octokit/openapi-types': 18.1.1 + + '@octokit/types@9.3.2': + dependencies: + '@octokit/openapi-types': 18.1.1 + + '@parcel/watcher@2.0.4': + dependencies: + node-addon-api: 3.2.1 + node-gyp-build: 4.8.4 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@sigstore/bundle@1.1.0': + dependencies: + '@sigstore/protobuf-specs': 0.2.1 + + '@sigstore/protobuf-specs@0.2.1': {} + + '@sigstore/sign@1.0.0': + dependencies: + '@sigstore/bundle': 1.1.0 + '@sigstore/protobuf-specs': 0.2.1 + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + + '@sigstore/tuf@1.0.3': + dependencies: + '@sigstore/protobuf-specs': 0.2.1 + tuf-js: 1.1.7 + transitivePeerDependencies: + - supports-color + + '@sinclair/typebox@0.27.8': {} + + '@tootallnate/once@2.0.0': {} + + '@tufjs/canonical-json@1.0.0': {} + + '@tufjs/models@1.0.4': + dependencies: + '@tufjs/canonical-json': 1.0.0 + minimatch: 9.0.5 + + '@types/minimatch@3.0.5': {} + + '@types/minimatch@6.0.0': + dependencies: + minimatch: 10.1.1 + + '@types/minimist@1.2.5': {} + + '@types/normalize-package-data@2.4.4': {} + + '@yarnpkg/lockfile@1.1.0': {} + + '@yarnpkg/parsers@3.0.0-rc.46': + dependencies: + js-yaml: 3.14.1 + tslib: 2.8.1 + + '@zkochan/js-yaml@0.0.6': + dependencies: + argparse: 2.0.1 + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + abbrev@1.1.1: {} + + add-stream@1.0.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.3: {} + + aproba@2.1.0: {} + + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-differ@3.0.0: {} + + array-ify@1.0.0: {} + + array-union@2.1.0: {} + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + arrify@1.0.1: {} + + arrify@2.0.1: {} + + async-function@1.0.0: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios@1.13.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + before-after-hook@2.2.3: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builtins@1.0.3: {} + + builtins@5.1.0: + dependencies: + semver: 7.7.3 + + byte-size@8.1.1: {} + + cacache@16.1.3: + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 9.0.1 + tar: 6.2.1 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird + + cacache@17.1.4: + dependencies: + '@npmcli/fs': 3.1.1 + fs-minipass: 3.0.3 + glob: 10.4.5 + lru-cache: 7.18.3 + minipass: 7.1.2 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 4.0.0 + ssri: 10.0.6 + tar: 6.1.11 + unique-filename: 3.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase-keys@6.2.2: + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + + camelcase@5.3.1: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chardet@2.1.1: {} + + chownr@2.0.0: {} + + ci-info@3.9.0: {} + + clean-stack@2.2.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.6.1: {} + + cli-spinners@2.9.2: {} + + cli-width@3.0.0: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + clone@1.0.4: {} + + cmd-shim@6.0.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-support@1.1.3: {} + + columnify@1.6.0: + dependencies: + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + concat-map@0.0.1: {} + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + console-control-strings@1.1.0: {} + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-core@5.0.1: + dependencies: + add-stream: 1.0.0 + conventional-changelog-writer: 6.0.1 + conventional-commits-parser: 4.0.0 + dateformat: 3.0.3 + get-pkg-repo: 4.2.1 + git-raw-commits: 3.0.0 + git-remote-origin-url: 2.0.0 + git-semver-tags: 5.0.1 + normalize-package-data: 3.0.3 + read-pkg: 3.0.0 + read-pkg-up: 3.0.0 + + conventional-changelog-preset-loader@3.0.0: {} + + conventional-changelog-writer@6.0.1: + dependencies: + conventional-commits-filter: 3.0.0 + dateformat: 3.0.3 + handlebars: 4.7.8 + json-stringify-safe: 5.0.1 + meow: 8.1.2 + semver: 7.7.3 + split: 1.0.1 + + conventional-commits-filter@3.0.0: + dependencies: + lodash.ismatch: 4.4.0 + modify-values: 1.0.1 + + conventional-commits-parser@4.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 1.0.1 + meow: 8.1.2 + split2: 3.2.2 + + conventional-recommended-bump@7.0.1: + dependencies: + concat-stream: 2.0.0 + conventional-changelog-preset-loader: 3.0.0 + conventional-commits-filter: 3.0.0 + conventional-commits-parser: 4.0.0 + git-raw-commits: 3.0.0 + git-semver-tags: 5.0.1 + meow: 8.1.2 + + core-util-is@1.0.3: {} + + cosmiconfig@8.3.6(typescript@5.9.3): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.3 + + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + dargs@7.0.0: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + dateformat@3.0.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decamelize-keys@1.1.1: + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + + decamelize@1.2.0: {} + + dedent@0.7.0: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + delegates@1.0.0: {} + + deprecation@2.3.1: {} + + detect-indent@5.0.0: {} + + diff-sequences@29.6.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dotenv-expand@10.0.0: {} + + dotenv@16.3.2: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.4 + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + enquirer@2.3.6: + dependencies: + ansi-colors: 4.1.3 + + env-paths@2.2.1: {} + + envinfo@7.8.1: {} + + err-code@2.0.3: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + esprima@4.0.1: {} + + eventemitter3@4.0.7: {} + + execa@5.0.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.0 + human-signals: 2.1.0 + is-stream: 2.0.0 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exponential-backoff@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.11: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fs-constants@1.0.0: {} + + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs-minipass@3.0.3: + dependencies: + minipass: 7.1.2 + + fs.realpath@1.0.0: {} + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gauge@4.0.4: + dependencies: + aproba: 2.1.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + + generator-function@2.0.1: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-pkg-repo@4.2.1: + dependencies: + '@hutson/parse-repository-url': 3.0.2 + hosted-git-info: 4.1.0 + through2: 2.0.5 + yargs: 16.2.0 + + get-port@5.1.1: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@6.0.0: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + git-raw-commits@3.0.0: + dependencies: + dargs: 7.0.0 + meow: 8.1.2 + split2: 3.2.2 + + git-remote-origin-url@2.0.0: + dependencies: + gitconfiglocal: 1.0.0 + pify: 2.3.0 + + git-semver-tags@5.0.1: + dependencies: + meow: 8.1.2 + semver: 7.7.3 + + git-up@7.0.0: + dependencies: + is-ssh: 1.4.1 + parse-url: 8.1.0 + + git-url-parse@13.1.0: + dependencies: + git-up: 7.0.0 + + gitconfiglocal@1.0.0: + dependencies: + ini: 1.3.8 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.1.4: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.5 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + hard-rejection@2.1.0: {} + + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + has-unicode@2.0.1: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hosted-git-info@2.8.9: {} + + hosted-git-info@3.0.8: + dependencies: + lru-cache: 6.0.0 + + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + + hosted-git-info@6.1.3: + dependencies: + lru-cache: 7.18.3 + + http-cache-semantics@4.2.0: {} + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore-walk@5.0.1: + dependencies: + minimatch: 5.1.6 + + ignore-walk@6.0.5: + dependencies: + minimatch: 9.0.5 + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.1.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + infer-owner@1.0.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + init-package-json@5.0.0: + dependencies: + npm-package-arg: 10.1.0 + promzard: 1.0.2 + read: 2.1.0 + read-package-json: 6.0.4 + semver: 7.7.3 + validate-npm-package-license: 3.0.4 + validate-npm-package-name: 5.0.0 + + inquirer@8.2.7: + dependencies: + '@inquirer/external-editor': 1.0.2 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + transitivePeerDependencies: + - '@types/node' + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + ip-address@10.0.1: {} + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-ci@3.0.1: + dependencies: + ci-info: 3.9.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@1.0.0: {} + + is-lambda@1.0.1: {} + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-plain-obj@1.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-plain-object@5.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-ssh@1.4.1: + dependencies: + protocols: 2.0.2 + + is-stream@2.0.0: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-text-path@1.0.1: + dependencies: + text-extensions: 1.9.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-unicode-supported@0.1.0: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.4 + picocolors: 1.1.1 + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.0 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-get-type@29.6.3: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-parse-better-errors@1.0.2: {} + + json-parse-even-better-errors@2.3.1: {} + + json-parse-even-better-errors@3.0.2: {} + + json-stringify-safe@5.0.1: {} + + json5@2.2.3: {} + + jsonc-parser@3.2.0: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + + kind-of@6.0.3: {} + + lerna@7.4.2(encoding@0.1.13): + dependencies: + '@lerna/child-process': 7.4.2 + '@lerna/create': 7.4.2(encoding@0.1.13)(typescript@5.9.3) + '@npmcli/run-script': 6.0.2 + '@nx/devkit': 16.10.0(nx@16.10.0) + '@octokit/plugin-enterprise-rest': 6.0.1 + '@octokit/rest': 19.0.11(encoding@0.1.13) + byte-size: 8.1.1 + chalk: 4.1.0 + clone-deep: 4.0.1 + cmd-shim: 6.0.1 + columnify: 1.6.0 + conventional-changelog-angular: 7.0.0 + conventional-changelog-core: 5.0.1 + conventional-recommended-bump: 7.0.1 + cosmiconfig: 8.3.6(typescript@5.9.3) + dedent: 0.7.0 + envinfo: 7.8.1 + execa: 5.0.0 + fs-extra: 11.3.2 + get-port: 5.1.1 + get-stream: 6.0.0 + git-url-parse: 13.1.0 + glob-parent: 5.1.2 + globby: 11.1.0 + graceful-fs: 4.2.11 + has-unicode: 2.0.1 + import-local: 3.1.0 + ini: 1.3.8 + init-package-json: 5.0.0 + inquirer: 8.2.7 + is-ci: 3.0.1 + is-stream: 2.0.0 + jest-diff: 29.7.0 + js-yaml: 4.1.0 + libnpmaccess: 7.0.2 + libnpmpublish: 7.3.0 + load-json-file: 6.2.0 + lodash: 4.17.21 + make-dir: 4.0.0 + minimatch: 3.0.5 + multimatch: 5.0.0 + node-fetch: 2.6.7(encoding@0.1.13) + npm-package-arg: 8.1.1 + npm-packlist: 5.1.1 + npm-registry-fetch: 14.0.5 + npmlog: 6.0.2 + nx: 16.10.0 + p-map: 4.0.0 + p-map-series: 2.1.0 + p-pipe: 3.1.0 + p-queue: 6.6.2 + p-reduce: 2.1.0 + p-waterfall: 2.1.1 + pacote: 15.2.0 + pify: 5.0.0 + read-cmd-shim: 4.0.0 + read-package-json: 6.0.4 + resolve-from: 5.0.0 + rimraf: 4.4.1 + semver: 7.7.3 + signal-exit: 3.0.7 + slash: 3.0.0 + ssri: 9.0.1 + strong-log-transformer: 2.1.0 + tar: 6.1.11 + temp-dir: 1.0.0 + typescript: 5.9.3 + upath: 2.0.1 + uuid: 9.0.1 + validate-npm-package-license: 3.0.4 + validate-npm-package-name: 5.0.0 + write-file-atomic: 5.0.1 + write-pkg: 4.0.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - '@types/node' + - bluebird + - debug + - encoding + - supports-color + + libnpmaccess@7.0.2: + dependencies: + npm-package-arg: 10.1.0 + npm-registry-fetch: 14.0.5 + transitivePeerDependencies: + - supports-color + + libnpmpublish@7.3.0: + dependencies: + ci-info: 3.9.0 + normalize-package-data: 5.0.0 + npm-package-arg: 10.1.0 + npm-registry-fetch: 14.0.5 + proc-log: 3.0.0 + semver: 7.7.3 + sigstore: 1.9.0 + ssri: 10.0.6 + transitivePeerDependencies: + - supports-color + + lines-and-columns@1.2.4: {} + + lines-and-columns@2.0.4: {} + + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + + load-json-file@6.2.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 5.2.0 + strip-bom: 4.0.0 + type-fest: 0.6.0 + + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash.ismatch@4.4.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + lru-cache@10.4.3: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-cache@7.18.3: {} + + lucide-react@0.453.0(react@19.2.0): + dependencies: + react: 19.2.0 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + + make-dir@4.0.0: + dependencies: + semver: 7.7.3 + + make-fetch-happen@10.2.1: + dependencies: + agentkeepalive: 4.6.0 + cacache: 16.1.3 + http-cache-semantics: 4.2.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + + make-fetch-happen@11.1.1: + dependencies: + agentkeepalive: 4.6.0 + cacache: 17.1.4 + http-cache-semantics: 4.2.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 5.0.0 + minipass-fetch: 3.0.5 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 10.0.6 + transitivePeerDependencies: + - supports-color + + map-obj@1.0.1: {} + + map-obj@4.3.0: {} + + math-intrinsics@1.1.0: {} + + memorystream@0.3.1: {} + + meow@8.1.2: + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.4 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + min-indent@1.0.1: {} + + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + + minimatch@3.0.5: + dependencies: + brace-expansion: 1.1.12 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist-options@4.1.0: + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + + minimist@1.2.8: {} + + minipass-collect@1.0.2: + dependencies: + minipass: 3.3.6 + + minipass-fetch@2.1.2: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + + minipass-fetch@3.0.5: + dependencies: + minipass: 7.1.2 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-json-stream@1.0.2: + dependencies: + jsonparse: 1.3.1 + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@4.2.8: {} + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@1.0.4: {} + + modify-values@1.0.1: {} + + ms@2.1.3: {} + + multimatch@5.0.0: + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 3.0.0 + array-union: 2.1.0 + arrify: 2.0.1 + minimatch: 3.0.5 + + mute-stream@0.0.8: {} + + mute-stream@1.0.0: {} + + negotiator@0.6.4: {} + + neo-async@2.6.2: {} + + nice-try@1.0.5: {} + + node-addon-api@3.2.1: {} + + node-fetch@2.6.7(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + + node-gyp-build@4.8.4: {} + + node-gyp@9.4.1: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.3 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.7.3 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + node-machine-id@1.1.12: {} + + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.11 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + normalize-package-data@3.0.3: + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.16.1 + semver: 7.7.3 + validate-npm-package-license: 3.0.4 + + normalize-package-data@5.0.0: + dependencies: + hosted-git-info: 6.1.3 + is-core-module: 2.16.1 + semver: 7.7.3 + validate-npm-package-license: 3.0.4 + + npm-bundled@1.1.2: + dependencies: + npm-normalize-package-bin: 1.0.1 + + npm-bundled@3.0.1: + dependencies: + npm-normalize-package-bin: 3.0.1 + + npm-install-checks@6.3.0: + dependencies: + semver: 7.7.3 + + npm-normalize-package-bin@1.0.1: {} + + npm-normalize-package-bin@3.0.1: {} + + npm-package-arg@10.1.0: + dependencies: + hosted-git-info: 6.1.3 + proc-log: 3.0.0 + semver: 7.7.3 + validate-npm-package-name: 5.0.0 + + npm-package-arg@8.1.1: + dependencies: + hosted-git-info: 3.0.8 + semver: 7.7.3 + validate-npm-package-name: 3.0.0 + + npm-packlist@5.1.1: + dependencies: + glob: 8.1.0 + ignore-walk: 5.0.1 + npm-bundled: 1.1.2 + npm-normalize-package-bin: 1.0.1 + + npm-packlist@7.0.4: + dependencies: + ignore-walk: 6.0.5 + + npm-pick-manifest@8.0.2: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 10.1.0 + semver: 7.7.3 + + npm-registry-fetch@14.0.5: + dependencies: + make-fetch-happen: 11.1.1 + minipass: 5.0.0 + minipass-fetch: 3.0.5 + minipass-json-stream: 1.0.2 + minizlib: 2.1.2 + npm-package-arg: 10.1.0 + proc-log: 3.0.0 + transitivePeerDependencies: + - supports-color + + npm-run-all@4.1.5: + dependencies: + ansi-styles: 3.2.1 + chalk: 2.4.2 + cross-spawn: 6.0.6 + memorystream: 0.3.1 + minimatch: 3.1.2 + pidtree: 0.3.1 + read-pkg: 3.0.0 + shell-quote: 1.8.3 + string.prototype.padend: 3.1.6 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npmlog@6.0.2: + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + + nx@16.10.0: + dependencies: + '@nrwl/tao': 16.10.0 + '@parcel/watcher': 2.0.4 + '@yarnpkg/lockfile': 1.1.0 + '@yarnpkg/parsers': 3.0.0-rc.46 + '@zkochan/js-yaml': 0.0.6 + axios: 1.13.2 + chalk: 4.1.0 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + cliui: 8.0.1 + dotenv: 16.3.2 + dotenv-expand: 10.0.0 + enquirer: 2.3.6 + figures: 3.2.0 + flat: 5.0.2 + fs-extra: 11.3.2 + glob: 7.1.4 + ignore: 5.3.2 + jest-diff: 29.7.0 + js-yaml: 4.1.0 + jsonc-parser: 3.2.0 + lines-and-columns: 2.0.4 + minimatch: 3.0.5 + node-machine-id: 1.1.12 + npm-run-path: 4.0.1 + open: 8.4.2 + semver: 7.5.3 + string-width: 4.2.3 + strong-log-transformer: 2.1.0 + tar-stream: 2.2.0 + tmp: 0.2.5 + tsconfig-paths: 4.2.0 + tslib: 2.8.1 + v8-compile-cache: 2.3.0 + yargs: 17.7.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@nx/nx-darwin-arm64': 16.10.0 + '@nx/nx-darwin-x64': 16.10.0 + '@nx/nx-freebsd-x64': 16.10.0 + '@nx/nx-linux-arm-gnueabihf': 16.10.0 + '@nx/nx-linux-arm64-gnu': 16.10.0 + '@nx/nx-linux-arm64-musl': 16.10.0 + '@nx/nx-linux-x64-gnu': 16.10.0 + '@nx/nx-linux-x64-musl': 16.10.0 + '@nx/nx-win32-arm64-msvc': 16.10.0 + '@nx/nx-win32-x64-msvc': 16.10.0 + transitivePeerDependencies: + - debug + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-finally@1.0.0: {} + + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-map-series@2.1.0: {} + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-pipe@3.1.0: {} + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-reduce@2.1.0: {} + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + p-try@1.0.0: {} + + p-try@2.2.0: {} + + p-waterfall@2.1.1: + dependencies: + p-reduce: 2.1.0 + + package-json-from-dist@1.0.1: {} + + pacote@15.2.0: + dependencies: + '@npmcli/git': 4.1.0 + '@npmcli/installed-package-contents': 2.1.0 + '@npmcli/promise-spawn': 6.0.2 + '@npmcli/run-script': 6.0.2 + cacache: 17.1.4 + fs-minipass: 3.0.3 + minipass: 5.0.0 + npm-package-arg: 10.1.0 + npm-packlist: 7.0.4 + npm-pick-manifest: 8.0.2 + npm-registry-fetch: 14.0.5 + proc-log: 3.0.0 + promise-retry: 2.0.1 + read-package-json: 6.0.4 + read-package-json-fast: 3.0.2 + sigstore: 1.9.0 + ssri: 10.0.6 + tar: 6.1.11 + transitivePeerDependencies: + - bluebird + - supports-color + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@4.0.0: + dependencies: + error-ex: 1.3.4 + json-parse-better-errors: 1.0.2 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-path@7.1.0: + dependencies: + protocols: 2.0.2 + + parse-url@8.1.0: + dependencies: + parse-path: 7.1.0 + + path-exists@3.0.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@2.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-type@3.0.0: + dependencies: + pify: 3.0.0 + + path-type@4.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pidtree@0.3.1: {} + + pify@2.3.0: {} + + pify@3.0.0: {} + + pify@4.0.1: {} + + pify@5.0.0: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + possible-typed-array-names@1.1.0: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + proc-log@3.0.0: {} + + process-nextick-args@2.0.1: {} + + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + promzard@1.0.2: + dependencies: + read: 3.0.1 + + protocols@2.0.2: {} + + proxy-from-env@1.1.0: {} + + queue-microtask@1.2.3: {} + + quick-lru@4.0.1: {} + + react-is@18.3.1: {} + + react@19.2.0: {} + + read-cmd-shim@4.0.0: {} + + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + + read-package-json@6.0.4: + dependencies: + glob: 10.4.5 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 5.0.0 + npm-normalize-package-bin: 3.0.1 + + read-pkg-up@3.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 3.0.0 + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg@3.0.0: + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + read@2.1.0: + dependencies: + mute-stream: 1.0.0 + + read@3.0.1: + dependencies: + mute-stream: 1.0.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + require-directory@2.1.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.12.0: {} + + reusify@1.1.0: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@4.4.1: + dependencies: + glob: 9.3.5 + + run-async@2.4.1: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + semver@5.7.2: {} + + semver@7.5.3: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.3: {} + + set-blocking@2.0.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + shell-quote@1.8.3: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sigstore@1.9.0: + dependencies: + '@sigstore/bundle': 1.1.0 + '@sigstore/protobuf-specs': 0.2.1 + '@sigstore/sign': 1.0.0 + '@sigstore/tuf': 1.0.3 + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + + slash@3.0.0: {} + + smart-buffer@4.2.0: {} + + socks-proxy-agent@7.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + + socks@2.8.7: + dependencies: + ip-address: 10.0.1 + smart-buffer: 4.2.0 + + sort-keys@2.0.0: + dependencies: + is-plain-obj: 1.1.0 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 + + spdx-license-ids@3.0.22: {} + + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + + split@1.0.1: + dependencies: + through: 2.3.8 + + sprintf-js@1.0.3: {} + + ssri@10.0.6: + dependencies: + minipass: 7.1.2 + + ssri@9.0.1: + dependencies: + minipass: 3.3.6 + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string.prototype.padend@3.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strong-log-transformer@2.1.0: + dependencies: + duplexer: 0.1.2 + minimist: 1.2.8 + through: 2.3.8 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar@6.1.11: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 3.3.6 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + temp-dir@1.0.0: {} + + text-extensions@1.9.0: {} + + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + + through@2.3.8: {} + + tmp@0.2.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + trim-newlines@3.0.1: {} + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + tslog@3.3.3: + dependencies: + source-map-support: 0.5.21 + + tuf-js@1.1.7: + dependencies: + '@tufjs/models': 1.0.4 + debug: 4.4.3 + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color + + type-fest@0.18.1: {} + + type-fest@0.21.3: {} + + type-fest@0.4.1: {} + + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typedarray@0.0.6: {} + + typescript@5.9.3: {} + + uglify-js@3.19.3: + optional: true + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + unique-filename@2.0.1: + dependencies: + unique-slug: 3.0.0 + + unique-filename@3.0.0: + dependencies: + unique-slug: 4.0.0 + + unique-slug@3.0.0: + dependencies: + imurmurhash: 0.1.4 + + unique-slug@4.0.0: + dependencies: + imurmurhash: 0.1.4 + + universal-user-agent@6.0.1: {} + + universalify@2.0.1: {} + + upath@2.0.1: {} + + util-deprecate@1.0.2: {} + + uuid@9.0.1: {} + + v8-compile-cache@2.3.0: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@3.0.0: + dependencies: + builtins: 1.0.3 + + validate-npm-package-name@5.0.0: + dependencies: + builtins: 5.1.0 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@3.0.1: + dependencies: + isexe: 2.0.0 + + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + + wordwrap@1.0.0: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + wrappy@1.0.2: {} + + write-file-atomic@2.4.3: + dependencies: + graceful-fs: 4.2.11 + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + write-json-file@3.2.0: + dependencies: + detect-indent: 5.0.0 + graceful-fs: 4.2.11 + make-dir: 2.1.0 + pify: 4.0.1 + sort-keys: 2.0.0 + write-file-atomic: 2.4.3 + + write-pkg@4.0.0: + dependencies: + sort-keys: 2.0.0 + type-fest: 0.4.1 + write-json-file: 3.2.0 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@4.0.0: {} + + yargs-parser@20.2.4: {} + + yargs-parser@21.1.1: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index d9d19008d1c..15c7717b8fd 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -2,7 +2,7 @@ use crate::mixnet::client::MixnetClientBuilder; use crate::mixnet::traits::MixnetMessageSender; use crate::{Error, Result}; use async_trait::async_trait; -use futures::{ready, Stream, StreamExt}; +use futures::{ready, AsyncRead, Stream, StreamExt}; use log::{debug, error}; use nym_client_core::client::base_client::GatewayConnection; use nym_client_core::client::mix_traffic::ClientRequestSender; @@ -60,6 +60,24 @@ pub struct MixnetClient { _buffered: Vec, pub(crate) forget_me: ForgetMe, pub(crate) remember_me: RememberMe, + + // internal state used for the `AsyncRead` implementation + _read: ReadBuffer, +} + +#[derive(Debug, Default)] +struct ReadBuffer { + buffer: Vec, +} + +impl ReadBuffer { + fn clear(&mut self) { + self.buffer.clear(); + } + + fn pending(&self) -> bool { + !self.buffer.is_empty() + } } impl MixnetClient { @@ -90,6 +108,7 @@ impl MixnetClient { _buffered: Vec::new(), forget_me, remember_me, + _read: ReadBuffer::default(), } } @@ -280,6 +299,25 @@ impl MixnetClient { } } } + + fn read_buffer_to_slice( + &mut self, + buf: &mut [u8], + cx: &mut Context<'_>, + ) -> Poll> { + if self._read.buffer.len() < buf.len() { + let written = self._read.buffer.len(); + buf[..written].copy_from_slice(&self._read.buffer); + self._read.clear(); + Poll::Ready(Ok(written)) + } else { + let written = buf.len(); + buf.copy_from_slice(&self._read.buffer[..written]); + self._read.buffer = self._read.buffer[written..].to_vec(); + cx.waker().wake_by_ref(); + Poll::Ready(Ok(written)) + } + } } #[derive(Clone)] @@ -288,6 +326,28 @@ pub struct MixnetClientSender { packet_type: Option, } +impl AsyncRead for MixnetClient { + fn poll_read( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut [u8], + ) -> Poll> { + if self._read.pending() { + return self.read_buffer_to_slice(buf, cx); + } + + let msg = match self.as_mut().poll_next(cx) { + Poll::Ready(Some(msg)) => msg, + Poll::Ready(None) => return Poll::Ready(Ok(0)), + Poll::Pending => return Poll::Pending, + }; + + self._read.buffer = msg.message; + + self.read_buffer_to_slice(buf, cx) + } +} + impl Stream for MixnetClient { type Item = ReconstructedMessage; From 8dc2ae94afb503b86e514d78e4d365300c7beca7 Mon Sep 17 00:00:00 2001 From: Drazen Date: Wed, 12 Jun 2024 17:58:07 +0200 Subject: [PATCH 003/139] Switch to PollSender --- common/client-core/Cargo.toml | 1 + common/client-core/src/client/base_client/mod.rs | 10 ++++++++-- common/client-core/src/client/inbound_messages.rs | 2 +- common/socks5-client-core/Cargo.toml | 1 + common/socks5-client-core/src/socks/client.rs | 1 + common/socks5/proxy-helpers/src/ordered_sender.rs | 10 ++++++---- .../proxy-helpers/src/proxy_runner/inbound.rs | 2 +- common/socks5/proxy-helpers/src/proxy_runner/mod.rs | 3 ++- service-providers/network-requester/Cargo.toml | 13 +++++++++++-- service-providers/network-requester/src/core.rs | 8 ++++++-- 10 files changed, 38 insertions(+), 13 deletions(-) diff --git a/common/client-core/Cargo.toml b/common/client-core/Cargo.toml index 2f6d87dbc41..aa99967918d 100644 --- a/common/client-core/Cargo.toml +++ b/common/client-core/Cargo.toml @@ -25,6 +25,7 @@ sha2 = { workspace = true } si-scale = { workspace = true } thiserror = { workspace = true } url = { workspace = true, features = ["serde"] } +tokio-util = { workspace = true } time = { workspace = true } tokio = { workspace = true, features = ["sync", "macros"] } tracing = { workspace = true } diff --git a/common/client-core/src/client/base_client/mod.rs b/common/client-core/src/client/base_client/mod.rs index 600085b4cf8..f1e6e611f9b 100644 --- a/common/client-core/src/client/base_client/mod.rs +++ b/common/client-core/src/client/base_client/mod.rs @@ -67,6 +67,8 @@ use std::path::Path; use std::sync::Arc; use time::OffsetDateTime; use tokio::sync::mpsc::Sender; +use tracing::*; +use tokio_util::sync::PollSender; use url::Url; #[cfg(target_arch = "wasm32")] @@ -116,7 +118,11 @@ impl ClientInput { &self, message: InputMessage, ) -> Result<(), tokio::sync::mpsc::error::SendError> { - self.input_sender.send(message).await + if let Some(channel) = self.input_sender.get_ref() { + channel.send(message).await + } else { + Err(tokio::sync::mpsc::error::SendError(message)) + } } } @@ -1139,7 +1145,7 @@ where client_input: ClientInputStatus::AwaitingProducer { client_input: ClientInput { connection_command_sender: client_connection_tx, - input_sender, + input_sender: PollSender::new(input_sender), client_request_sender, }, }, diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index b74c9195bea..16b63981cae 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -7,7 +7,7 @@ use nym_sphinx::forwarding::packet::MixPacket; use nym_sphinx::params::PacketType; use nym_task::connections::TransmissionLane; -pub type InputMessageSender = tokio::sync::mpsc::Sender; +pub type InputMessageSender = tokio_util::sync::PollSender; pub type InputMessageReceiver = tokio::sync::mpsc::Receiver; #[derive(Debug)] diff --git a/common/socks5-client-core/Cargo.toml b/common/socks5-client-core/Cargo.toml index ce8421f3d73..d5019e3c403 100644 --- a/common/socks5-client-core/Cargo.toml +++ b/common/socks5-client-core/Cargo.toml @@ -19,6 +19,7 @@ serde = { workspace = true, features = ["derive"] } # for config serialization/d tap = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true, features = ["rt-multi-thread", "net", "signal"] } +tokio-util = { workspace = true } url = { workspace = true } nym-bandwidth-controller = { path = "../../common/bandwidth-controller" } diff --git a/common/socks5-client-core/src/socks/client.rs b/common/socks5-client-core/src/socks/client.rs index ffdca82a70f..868ced71b59 100644 --- a/common/socks5-client-core/src/socks/client.rs +++ b/common/socks5-client-core/src/socks/client.rs @@ -7,6 +7,7 @@ use super::{SocksVersion, RESERVED, SOCKS4_VERSION, SOCKS5_VERSION}; use crate::config; use futures::channel::mpsc; use futures::task::{Context, Poll}; +use futures::SinkExt; use log::*; use nym_client_core::client::inbound_messages::{InputMessage, InputMessageSender}; use nym_service_providers_common::interface::{ProviderInterfaceVersion, RequestVersion}; diff --git a/common/socks5/proxy-helpers/src/ordered_sender.rs b/common/socks5/proxy-helpers/src/ordered_sender.rs index d71f8435587..a94cfe97dc6 100644 --- a/common/socks5/proxy-helpers/src/ordered_sender.rs +++ b/common/socks5/proxy-helpers/src/ordered_sender.rs @@ -7,7 +7,7 @@ use log::{debug, error}; use nym_socks5_requests::{ConnectionId, SocketData}; use std::io; -pub(crate) struct OrderedMessageSender { +pub(crate) struct OrderedMessageSender { connection_id: ConnectionId, // addresses are provided for better logging local_destination_address: String, @@ -18,7 +18,7 @@ pub(crate) struct OrderedMessageSender { mix_message_adapter: F, } -impl OrderedMessageSender +impl OrderedMessageSender where F: Fn(SocketData) -> S, { @@ -56,8 +56,10 @@ where } async fn send_message(&self, message: S) { - if self.mixnet_sender.send(message).await.is_err() { - panic!("BatchRealMessageReceiver has stopped receiving!") + if let Some(sender) = self.mixnet_sender.get_ref() { + if sender.send(message).await.is_err() { + panic!("BatchRealMessageReceiver has stopped receiving!") + } } } diff --git a/common/socks5/proxy-helpers/src/proxy_runner/inbound.rs b/common/socks5/proxy-helpers/src/proxy_runner/inbound.rs index 2e3087bbc02..d1b5653d6ea 100644 --- a/common/socks5/proxy-helpers/src/proxy_runner/inbound.rs +++ b/common/socks5/proxy-helpers/src/proxy_runner/inbound.rs @@ -74,7 +74,7 @@ async fn wait_for_lane( } } -pub(super) async fn run_inbound( +pub(super) async fn run_inbound( mut reader: OwnedReadHalf, mut message_sender: OrderedMessageSender, connection_id: ConnectionId, diff --git a/common/socks5/proxy-helpers/src/proxy_runner/mod.rs b/common/socks5/proxy-helpers/src/proxy_runner/mod.rs index 75a51e366a5..66da2ca6fe2 100644 --- a/common/socks5/proxy-helpers/src/proxy_runner/mod.rs +++ b/common/socks5/proxy-helpers/src/proxy_runner/mod.rs @@ -6,6 +6,7 @@ use crate::ordered_sender::OrderedMessageSender; use nym_socks5_requests::{ConnectionId, SocketData}; use nym_task::connections::LaneQueueLengths; use nym_task::ShutdownTracker; +use tokio_util::sync::PollSender; use std::fmt::Debug; use std::{sync::Arc, time::Duration}; use tokio::{net::TcpStream, sync::Notify}; @@ -35,7 +36,7 @@ impl From<(Vec, bool)> for ProxyMessage { } } -pub type MixProxySender = tokio::sync::mpsc::Sender; +pub type MixProxySender = PollSender; pub type MixProxyReader = tokio::sync::mpsc::Receiver; // TODO: when we finally get to implementing graceful shutdown, diff --git a/service-providers/network-requester/Cargo.toml b/service-providers/network-requester/Cargo.toml index 1731d38bef2..53b99a4de60 100644 --- a/service-providers/network-requester/Cargo.toml +++ b/service-providers/network-requester/Cargo.toml @@ -37,14 +37,23 @@ tap = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true, features = ["net", "rt-multi-thread", "macros"] } tokio-tungstenite = { workspace = true } +tokio-util = { workspace = true } url = { workspace = true } time = { workspace = true } zeroize = { workspace = true } # internal + + nym-async-file-watcher = { path = "../../common/async-file-watcher" } -nym-bin-common = { path = "../../common/bin-common", features = ["output_format", "clap", "basic_tracing"] } -nym-client-core = { path = "../../common/client-core", features = ["cli", "fs-gateways-storage", "fs-surb-storage"] } +nym-client-core = { path = "../../common/client-core", features = [ + "cli", + "fs-gateways-storage", + "fs-surb-storage", +] } +nym-bin-common = { path = "../../common/bin-common", features = [ + "output_format", +] } nym-client-websocket-requests = { path = "../../clients/native/websocket-requests" } nym-config = { path = "../../common/config" } nym-credentials = { path = "../../common/credentials" } diff --git a/service-providers/network-requester/src/core.rs b/service-providers/network-requester/src/core.rs index 6ca9b3b588c..2e81fab6f61 100644 --- a/service-providers/network-requester/src/core.rs +++ b/service-providers/network-requester/src/core.rs @@ -9,6 +9,7 @@ use crate::{reply, socks5}; use async_trait::async_trait; use futures::channel::{mpsc, oneshot}; use futures::stream::StreamExt; +use futures::SinkExt; use log::{debug, error, warn}; use nym_bin_common::bin_info_owned; use nym_client_core::HardcodedTopologyProvider; @@ -37,6 +38,7 @@ use nym_task::ShutdownTracker; use nym_task::connections::LaneQueueLengths; use std::path::Path; use std::sync::atomic::{AtomicUsize, Ordering}; +use tokio_util::sync::PollSender; // Since it's an atomic, it's safe to be kept static and shared across threads static ACTIVE_PROXIES: AtomicUsize = AtomicUsize::new(0); @@ -240,6 +242,8 @@ impl NRServiceProviderBuilder { // going to be used by `mixnet_response_listener` let (mix_input_sender, mix_input_receiver) = tokio::sync::mpsc::channel::(1); + let mix_input_sender = PollSender::new(mix_input_sender); + // Controller for managing all active connections. let (mut active_connections_controller, controller_sender) = Controller::new( mixnet_client.connection_command_sender(), @@ -364,7 +368,7 @@ impl NRServiceProvider { return_address: reply::MixnetAddress, biggest_packet_size: PacketSize, controller_sender: ControllerSender, - mix_input_sender: MixProxySender, + mut mix_input_sender: MixProxySender, lane_queue_lengths: LaneQueueLengths, shutdown: ShutdownTracker, ) { @@ -457,7 +461,7 @@ impl NRServiceProvider { .unwrap_or(traffic_config.primary_packet_size); let controller_sender_clone = self.controller_sender.clone(); - let mix_input_sender_clone = self.mix_input_sender.clone(); + let mut mix_input_sender_clone = self.mix_input_sender.clone(); let lane_queue_lengths_clone = self.mixnet_client.shared_lane_queue_lengths(); // we're just cloning the underlying pointer, nothing expensive is happening here From 9fc4b295e7636e9c9ee36895e6879cb836ed7d2f Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 18 Jun 2025 16:43:13 +0200 Subject: [PATCH 004/139] temp --- Cargo.lock | 12732 ++++++++++++++++ .../client-core/src/client/base_client/mod.rs | 6 +- 2 files changed, 12736 insertions(+), 2 deletions(-) create mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000000..c3d0e2a0645 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,12732 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "accessory" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28e416a3ab45838bac2ab2d81b1088d738d7b2d2c5272a54d39366565a29bd80" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "addr" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" +dependencies = [ + "psl", + "psl-types", +] + +[[package]] +name = "adler2" +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", + "generic-array 0.14.9", +] + +[[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 2.6.1", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "ammonia" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" +dependencies = [ + "cssparser", + "html5ever", + "maplit", + "tendril", + "url", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2 0.10.6", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "askama" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7" +dependencies = [ + "askama_derive", + "itoa", + "percent-encoding", + "serde", + "serde_json", +] + +[[package]] +name = "askama_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac" +dependencies = [ + "askama_parser", + "basic-toml", + "memchr", + "proc-macro2", + "quote", + "rustc-hash", + "serde", + "serde_derive", + "syn 2.0.106", +] + +[[package]] +name = "askama_parser" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f" +dependencies = [ + "memchr", + "serde", + "serde_derive", + "winnow", +] + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-compression" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" +dependencies = [ + "compression-codecs", + "compression-core", + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "async-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3609af4bbf701ddaf1f6bb4e6257dff4ff8932327d0e685d3f653724c258b1ac" +dependencies = [ + "futures-io", + "futures-util", + "log", + "pin-project-lite", + "rustls-native-certs 0.7.3", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tungstenite 0.21.0", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-future" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "autodoc" +version = "0.1.0" +dependencies = [ + "env_logger", + "log", +] + +[[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.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "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.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-client-ip" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" +dependencies = [ + "axum", + "forwarded-header-value", + "serde", +] + +[[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.3.1", + "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-extra" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" +dependencies = [ + "axum", + "axum-core", + "bytes", + "fastrand 2.3.0", + "futures-util", + "headers", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "multer", + "pin-project-lite", + "serde", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[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.106", +] + +[[package]] +name = "axum-test" +version = "16.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e3a443d2608936a02a222da7b746eb412fede7225b3030b64fe9be99eab8dc" +dependencies = [ + "anyhow", + "assert-json-diff", + "auto-future", + "axum", + "bytes", + "bytesize", + "cookie", + "http 1.3.1", + "http-body-util", + "hyper 1.7.0", + "hyper-util", + "mime", + "pretty_assertions", + "reserve-port", + "rust-multipart-rfc7578_2", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tokio", + "tower 0.5.2", + "url", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "base85rs" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87678d33a2af71f019ed11f52db246ca6c5557edee2cccbe689676d1ad9c6b5a" + +[[package]] +name = "basic-toml" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" +dependencies = [ + "serde", +] + +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "binstring" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" + +[[package]] +name = "bip32" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" +dependencies = [ + "bs58", + "hmac", + "k256", + "rand_core 0.6.4", + "ripemd", + "secp256k1", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bip39" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", + "zeroize", +] + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +dependencies = [ + "byte-tools", + "crypto-mac", + "digest 0.8.1", + "opaque-debug 0.2.3", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "bloomfilter" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" +dependencies = [ + "getrandom 0.2.16", + "siphasher 1.0.1", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/jstuczyn/bls12_381?branch=temp/experimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" +dependencies = [ + "digest 0.10.7", + "ff", + "group", + "pairing", + "rand_core 0.6.4", + "serde", + "serdect 0.3.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bnum" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.9", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytecodec" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" +dependencies = [ + "byteorder", + "trackable 0.2.24", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "bytesize" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" + +[[package]] +name = "camino" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "castaway" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" + +[[package]] +name = "cc" +version = "1.2.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "celes" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" +dependencies = [ + "phf 0.11.3", + "serde", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" +dependencies = [ + "byteorder", + "keystream", +] + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link 0.2.1", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "clap" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_complete" +version = "4.5.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" +dependencies = [ + "clap", +] + +[[package]] +name = "clap_complete_fig" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" +dependencies = [ + "clap", + "clap_complete", +] + +[[package]] +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "clap_lex" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" + +[[package]] +name = "coarsetime" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + +[[package]] +name = "comfy-table" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" +dependencies = [ + "crossterm 0.29.0", + "unicode-segmentation", + "unicode-width 0.2.2", +] + +[[package]] +name = "compression-codecs" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "console-api" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime", + "hyper-util", + "prost", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-str" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462e1f6a8e005acc8835d32d60cbd7973ed65ea2a8d8473830e675f050956427" +dependencies = [ + "prost", + "tendermint-proto", +] + +[[package]] +name = "cosmrs" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1394c263335da09e8ba8c4b2c675d804e3e0deb44cce0866a5f838d3ddd43d02" +dependencies = [ + "bip32", + "cosmos-sdk-proto", + "ecdsa", + "eyre", + "k256", + "rand_core 0.6.4", + "serde", + "serde_json", + "signature", + "subtle-encoding", + "tendermint", + "tendermint-rpc", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-core" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" + +[[package]] +name = "cosmwasm-crypto" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "cosmwasm-core", + "curve25519-dalek", + "digest 0.10.7", + "ecdsa", + "ed25519-zebra", + "k256", + "num-traits", + "p256", + "rand_core 0.6.4", + "rayon", + "sha2 0.10.9", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "cosmwasm-schema" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" +dependencies = [ + "cosmwasm-schema-derive", + "schemars 0.8.22", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "cosmwasm-std" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" +dependencies = [ + "base64 0.22.1", + "bech32", + "bnum", + "cosmwasm-core", + "cosmwasm-crypto", + "cosmwasm-derive", + "derive_more 1.0.0", + "hex", + "rand_core 0.6.4", + "rmp-serde", + "schemars 0.8.22", + "serde", + "serde-json-wasm", + "sha2 0.10.9", + "static_assertions", + "thiserror 1.0.69", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "futures", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "tokio", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.9.4", + "crossterm_winapi", + "document-features", + "parking_lot", + "rustix", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.9", + "rand_core 0.6.4", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.9", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +dependencies = [ + "generic-array 0.12.4", + "subtle 1.0.0", +] + +[[package]] +name = "cssparser" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf 0.11.3", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.106", +] + +[[package]] +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +dependencies = [ + "memchr", +] + +[[package]] +name = "ct-codecs" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8" + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "cupid" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1" +dependencies = [ + "gcc", + "rustc_version 0.2.3", +] + +[[package]] +name = "curl" +version = "0.4.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.6.1", + "windows-sys 0.59.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.83+curl-8.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.59.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "serde", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "cw-controllers" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw-multi-test" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" +dependencies = [ + "anyhow", + "bech32", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "itertools 0.14.0", + "prost", + "schemars 0.8.22", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", +] + +[[package]] +name = "cw-storage-plus" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" +dependencies = [ + "cosmwasm-std", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "cw-utils" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw20" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "cw3" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw20", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw4" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", + "serde", +] + +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "defguard_wireguard_rs" +version = "0.4.7" +source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.4.7#ef1cf3714629bf5016fb38cbb7320451dc69fb09" +dependencies = [ + "base64 0.22.1", + "libc", + "log", + "netlink-packet-core 0.7.0", + "netlink-packet-generic 0.3.3", + "netlink-packet-route", + "netlink-packet-utils", + "netlink-packet-wireguard", + "netlink-sys", + "nix 0.29.0", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "delegate-display" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9926686c832494164c33a36bf65118f4bd6e704000b58c94681bf62e9ad67a74" +dependencies = [ + "impartial-ord", + "itoa", + "macroific", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "unicode-xid", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "dkg-bypass-contract" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "nym-coconut-dkg-common", + "nym-contracts-common", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "dtoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "easy-addr" +version = "0.1.0" +dependencies = [ + "cosmwasm-std", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect 0.2.0", + "signature", + "spki", +] + +[[package]] +name = "echo-server" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "bytecodec", + "bytes", + "clap", + "dashmap", + "dirs", + "futures", + "nym-bin-common", + "nym-crypto", + "nym-sdk", + "serde", + "tempfile", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + +[[package]] +name = "ed25519-compact" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" +dependencies = [ + "ct-codecs", + "getrandom 0.2.16", +] + +[[package]] +name = "ed25519-consensus" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" +dependencies = [ + "curve25519-dalek-ng", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core 0.6.4", + "sha2 0.10.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.9", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect 0.2.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "env_filter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "etherparse" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "827292ea592108849932ad8e30218f8b1f21c0dfd0696698a18b5d0aed62d990" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.1", + "pin-project-lite", +] + +[[package]] +name = "extension-storage" +version = "1.4.0-rc.0" +dependencies = [ + "bip39", + "console_error_panic_hook", + "js-sys", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-storage", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fancy_constructor" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "filetime" +version = "0.2.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.60.2", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "eyre", + "paste", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "forwarded-header-value" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +dependencies = [ + "nonempty", + "thiserror 1.0.69", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "serde", + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug 0.3.1", + "polyval", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 1.3.1", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "goblin" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.11.4", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.11.4", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "zerocopy", +] + +[[package]] +name = "handlebars" +version = "3.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" +dependencies = [ + "log", + "pest", + "pest_derive", + "quick-error", + "serde", + "serde_json", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64 0.22.1", + "bytes", + "headers-core", + "http 1.3.1", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.3.1", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + +[[package]] +name = "hickory-proto" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +dependencies = [ + "async-trait", + "bytes", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "h2 0.4.12", + "http 1.3.1", + "idna", + "ipnet", + "once_cell", + "rand 0.9.2", + "ring", + "rustls 0.23.32", + "thiserror 2.0.17", + "tinyvec", + "tokio", + "tokio-rustls 0.26.4", + "tracing", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "moka", + "once_cell", + "parking_lot", + "rand 0.9.2", + "resolv-conf", + "rustls 0.23.32", + "smallvec", + "thiserror 2.0.17", + "tokio", + "tokio-rustls 0.26.4", + "tracing", + "webpki-roots 0.26.11", +] + +[[package]] +name = "hidapi" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "winapi", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha1-compact" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" + +[[package]] +name = "hmac-sha256" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha512" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "html5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" +dependencies = [ + "log", + "markup5ever", + "match_token", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpcodec" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" +dependencies = [ + "bytecodec", + "trackable 0.2.24", +] + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "humantime" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" + +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +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", + "hyper-util", + "rustls 0.23.32", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower-service", + "webpki-roots 1.0.3", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper 1.7.0", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.7.0", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.1", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impartial-ord" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "importer-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "bip39", + "clap", + "dirs", + "importer-contract", + "nym-bin-common", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-validator-client", + "nym-vesting-contract-common", + "serde", + "serde_json", + "tokio", + "tracing", +] + +[[package]] +name = "importer-contract" +version = "0.1.0" +dependencies = [ + "base85rs", + "cosmwasm-schema", + "cosmwasm-std", +] + +[[package]] +name = "indenter" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" + +[[package]] +name = "indexed_db_futures" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" +dependencies = [ + "accessory", + "cfg-if", + "delegate-display", + "derive_more 2.0.1", + "fancy_constructor", + "indexed_db_futures_macros_internal", + "js-sys", + "sealed", + "smallvec", + "thiserror 2.0.17", + "tokio", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "indexed_db_futures_macros_internal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caeba94923b68f254abef921cea7e7698bf4675fdd89d7c58bf1ed885b49a27d" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", + "serde", + "serde_core", +] + +[[package]] +name = "indicatif" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +dependencies = [ + "console", + "portable-atomic", + "unicode-width 0.2.2", + "unit-prefix", + "vt100", + "web-time", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding", + "generic-array 0.14.9", +] + +[[package]] +name = "inquire" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" +dependencies = [ + "bitflags 1.3.2", + "crossterm 0.25.0", + "dyn-clone", + "lazy_static", + "newline-converter", + "thiserror 1.0.69", + "unicode-segmentation", + "unicode-width 0.1.14", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "inventory" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +dependencies = [ + "rustversion", +] + +[[package]] +name = "ip_network" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.10", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "isahc" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel", + "castaway", + "crossbeam-utils", + "curl", + "curl-sys", + "event-listener 2.5.3", + "futures-lite", + "http 0.2.12", + "log", + "once_cell", + "polling", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jwt-simple" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "731011e9647a71ff4f8474176ff6ce6e0d2de87a0173f15613af3a84c3e3401a" +dependencies = [ + "anyhow", + "binstring", + "blake2b_simd", + "coarsetime", + "ct-codecs", + "ed25519-compact", + "hmac-sha1-compact", + "hmac-sha256", + "hmac-sha512", + "k256", + "p256", + "p384", + "rand 0.8.5", + "serde", + "serde_json", + "superboring", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.9", + "signature", +] + +[[package]] +name = "keystream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" + +[[package]] +name = "kqueue" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "ledger-apdu" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" +dependencies = [ + "arrayref", + "no-std-compat", + "snafu", +] + +[[package]] +name = "ledger-transport" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" +dependencies = [ + "async-trait", + "ledger-apdu", +] + +[[package]] +name = "ledger-transport-hid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" +dependencies = [ + "byteorder", + "cfg-if", + "hex", + "hidapi", + "ledger-transport", + "libc", + "log", + "thiserror 1.0.69", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags 2.9.4", + "libc", + "redox_syscall", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "lioness" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" +dependencies = [ + "arrayref", + "blake2 0.8.1", + "chacha", + "keystream", +] + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "macroific" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89f276537b4b8f981bf1c13d79470980f71134b7bdcc5e6e911e910e556b0285" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "macroific_macro", +] + +[[package]] +name = "macroific_attr_parse" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad4023761b45fcd36abed8fb7ae6a80456b0a38102d55e89a57d9a594a236be9" +dependencies = [ + "proc-macro2", + "quote", + "sealed", + "syn 2.0.106", +] + +[[package]] +name = "macroific_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a7594d3c14916fa55bef7e9d18c5daa9ed410dd37504251e4b75bbdeec33e3" +dependencies = [ + "proc-macro2", + "quote", + "sealed", + "syn 2.0.106", +] + +[[package]] +name = "macroific_macro" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da6f2ed796261b0a74e2b52b42c693bb6dee1effba3a482c49592659f824b3b" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "markup5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minicov" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +dependencies = [ + "cc", + "walkdir", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.59.0", +] + +[[package]] +name = "mix-fetch-wasm" +version = "1.4.0-rc.0" +dependencies = [ + "async-trait", + "futures", + "js-sys", + "nym-bin-common", + "nym-http-api-client", + "nym-ordered-buffer", + "nym-service-providers-common", + "nym-socks5-requests", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "tokio", + "tsify", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-client-core", + "wasm-utils", +] + +[[package]] +name = "mixnet-connectivity-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "futures", + "nym-bin-common", + "nym-crypto", + "nym-network-defaults", + "nym-sdk", + "tokio", + "tracing", +] + +[[package]] +name = "mock_instant" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" + +[[package]] +name = "moka" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" +dependencies = [ + "async-lock", + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "equivalent", + "event-listener 5.4.1", + "futures-util", + "parking_lot", + "portable-atomic", + "rustc_version 0.4.1", + "smallvec", + "tagptr", + "uuid", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.3.1", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-core" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" +dependencies = [ + "paste", +] + +[[package]] +name = "netlink-packet-generic" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-core 0.7.0", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-generic" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f891b2e0054cac5a684a06628f59568f841c93da4e551239da6e518f539e775" +dependencies = [ + "netlink-packet-core 0.8.1", +] + +[[package]] +name = "netlink-packet-route" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" +dependencies = [ + "anyhow", + "bitflags 2.9.4", + "byteorder", + "libc", + "log", + "netlink-packet-core 0.7.0", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-packet-wireguard" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598962d9067d3153a00106da10e7b8276cea68f396f4a22f5b4a079270d92e29" +dependencies = [ + "libc", + "log", + "netlink-packet-core 0.8.1", + "netlink-packet-generic 0.4.0", +] + +[[package]] +name = "netlink-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +dependencies = [ + "bytes", + "libc", + "log", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "newline-converter" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "notify" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" +dependencies = [ + "bitflags 1.3.2", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "mio 0.8.11", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "nym-api" +version = "1.1.67" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "axum-test", + "bincode", + "bip39", + "bs58", + "cfg-if", + "clap", + "console-subscriber", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw3", + "cw4", + "dashmap", + "dotenvy", + "futures", + "humantime-serde", + "moka", + "nym-api-requests", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-cache", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-credential-storage", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-dkg", + "nym-ecash-contract-common", + "nym-ecash-signer-check", + "nym-ecash-time", + "nym-gateway-client", + "nym-http-api-client", + "nym-http-api-common", + "nym-mixnet-contract-common", + "nym-node-requests", + "nym-node-tester-utils", + "nym-pemstore", + "nym-serde-helpers", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-ticketbooks-merkle", + "nym-topology", + "nym-types", + "nym-validator-client", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.24", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx", + "tempfile", + "tendermint", + "test-with", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "ts-rs", + "url", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", + "zeroize", +] + +[[package]] +name = "nym-api-requests" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmrs", + "cosmwasm-std", + "ecdsa", + "hex", + "humantime-serde", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-signer-check-types", + "nym-ecash-time", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-node-requests", + "nym-noise-keys", + "nym-serde-helpers", + "nym-ticketbooks-merkle", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tracing", + "ts-rs", + "utoipa", +] + +[[package]] +name = "nym-async-file-watcher" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "notify", + "tokio", +] + +[[package]] +name = "nym-authenticator-client" +version = "0.1.0" +dependencies = [ + "bincode", + "futures", + "nym-authenticator-requests", + "nym-bandwidth-controller", + "nym-credentials-interface", + "nym-crypto", + "nym-registration-common", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-validator-client", + "nym-wireguard-types", + "semver 1.0.27", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-authenticator-requests" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bincode", + "hmac", + "nym-credentials-interface", + "nym-crypto", + "nym-network-defaults", + "nym-service-provider-requests-common", + "nym-sphinx", + "nym-wireguard-types", + "rand 0.8.5", + "semver 1.0.27", + "serde", + "sha2 0.10.9", + "strum_macros", + "thiserror 2.0.17", + "x25519-dalek", +] + +[[package]] +name = "nym-bandwidth-controller" +version = "0.1.0" +dependencies = [ + "async-trait", + "bip39", + "log", + "nym-credential-storage", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", + "nym-network-defaults", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "thiserror 2.0.17", + "url", + "zeroize", +] + +[[package]] +name = "nym-bin-common" +version = "0.6.0" +dependencies = [ + "clap", + "clap_complete", + "clap_complete_fig", + "const-str", + "log", + "opentelemetry", + "opentelemetry-jaeger", + "schemars 0.8.22", + "serde", + "serde_json", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "tracing-tree", + "utoipa", + "vergen", +] + +[[package]] +name = "nym-cache" +version = "0.1.0" +dependencies = [ + "tokio", +] + +[[package]] +name = "nym-cli" +version = "1.1.64" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bip39", + "bs58", + "clap", + "clap_complete", + "clap_complete_fig", + "dotenvy", + "inquire", + "log", + "nym-bin-common", + "nym-cli-commands", + "nym-network-defaults", + "nym-validator-client", + "serde", + "serde_json", + "tap", + "tokio", +] + +[[package]] +name = "nym-cli-commands" +version = "1.0.0" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bip39", + "bs58", + "cfg-if", + "clap", + "colored", + "comfy-table", + "cosmrs", + "cosmwasm-std", + "csv", + "cw-utils", + "futures", + "handlebars", + "humantime-serde", + "inquire", + "k256", + "log", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-client-core", + "nym-coconut-dkg-common", + "nym-config", + "nym-contracts-common", + "nym-credential-proxy-requests", + "nym-credential-storage", + "nym-credential-utils", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", + "nym-http-api-client", + "nym-id", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-network-defaults", + "nym-pemstore", + "nym-sphinx", + "nym-types", + "nym-validator-client", + "nym-vesting-contract-common", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "toml 0.8.23", + "url", + "zeroize", +] + +[[package]] +name = "nym-client" +version = "1.1.64" +dependencies = [ + "bs58", + "clap", + "dirs", + "futures", + "log", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-client-core", + "nym-client-websocket-requests", + "nym-config", + "nym-credential-storage", + "nym-credentials", + "nym-crypto", + "nym-gateway-requests", + "nym-id", + "nym-network-defaults", + "nym-pemstore", + "nym-sphinx", + "nym-task", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tungstenite", + "url", + "zeroize", +] + +[[package]] +name = "nym-client-core" +version = "1.1.15" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bs58", + "cfg-if", + "clap", + "comfy-table", + "futures", + "gloo-timers", + "http-body-util", + "humantime", + "hyper 1.7.0", + "hyper-util", + "nym-bandwidth-controller", + "nym-client-core-config-types", + "nym-client-core-gateways-storage", + "nym-client-core-surb-storage", + "nym-credential-storage", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", + "nym-gateway-client", + "nym-gateway-requests", + "nym-http-api-client", + "nym-id", + "nym-mixnet-client", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-nonexhaustive-delayqueue", + "nym-pemstore", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "sha2 0.10.9", + "si-scale", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "tungstenite 0.20.1", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-client-core-config-types" +version = "0.1.0" +dependencies = [ + "humantime-serde", + "nym-config", + "nym-pemstore", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-statistics-common", + "serde", + "thiserror 2.0.17", + "url", +] + +[[package]] +name = "nym-client-core-gateways-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "cosmrs", + "nym-crypto", + "nym-gateway-requests", + "serde", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-client-core-surb-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "dashmap", + "nym-crypto", + "nym-sphinx", + "nym-task", + "sqlx", + "sqlx-pool-guard", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-client-wasm" +version = "1.4.0-rc.0" +dependencies = [ + "anyhow", + "futures", + "js-sys", + "nym-bin-common", + "nym-node-tester-utils", + "nym-node-tester-wasm", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_json", + "thiserror 2.0.17", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "wasm-client-core", + "wasm-utils", +] + +[[package]] +name = "nym-client-websocket-requests" +version = "0.1.0" +dependencies = [ + "nym-sphinx", + "serde", + "serde_json", +] + +[[package]] +name = "nym-coconut-dkg-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw4", + "nym-contracts-common", + "nym-multisig-contract-common", +] + +[[package]] +name = "nym-compact-ecash" +version = "0.1.0" +dependencies = [ + "bincode", + "bls12_381", + "bs58", + "cfg-if", + "criterion", + "digest 0.10.7", + "ff", + "group", + "itertools 0.14.0", + "nym-network-defaults", + "nym-pemstore", + "rand 0.8.5", + "rayon", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-config" +version = "0.1.0" +dependencies = [ + "dirs", + "handlebars", + "log", + "nym-network-defaults", + "serde", + "thiserror 2.0.17", + "toml 0.8.23", + "url", +] + +[[package]] +name = "nym-contracts-common" +version = "0.5.0" +dependencies = [ + "anyhow", + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "serde", + "serde_json", + "thiserror 2.0.17", + "utoipa", + "vergen", +] + +[[package]] +name = "nym-contracts-common-testing" +version = "0.1.0" +dependencies = [ + "anyhow", + "cosmwasm-std", + "cw-multi-test", + "cw-storage-plus", + "nym-contracts-common", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", +] + +[[package]] +name = "nym-cpp-ffi" +version = "0.1.2" +dependencies = [ + "anyhow", + "bs58", + "lazy_static", + "nym-bin-common", + "nym-ffi-shared", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "tokio", +] + +[[package]] +name = "nym-credential-proxy" +version = "0.3.0" +dependencies = [ + "anyhow", + "axum", + "bip39", + "bs58", + "cfg-if", + "clap", + "futures", + "humantime", + "nym-bin-common", + "nym-compact-ecash", + "nym-config", + "nym-credential-proxy-lib", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-signer-check", + "nym-http-api-common", + "nym-network-defaults", + "nym-validator-client", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "strum", + "strum_macros", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "url", + "utoipa", + "utoipa-swagger-ui", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-credential-proxy-lib" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "bip39", + "bs58", + "futures", + "humantime", + "nym-cache", + "nym-compact-ecash", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-signer-check", + "nym-network-defaults", + "nym-validator-client", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "strum", + "strum_macros", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tracing", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-credential-proxy-requests" +version = "0.1.0" +dependencies = [ + "async-trait", + "nym-credentials", + "nym-credentials-interface", + "nym-http-api-client", + "nym-http-api-common", + "nym-serde-helpers", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "serde_json", + "time", + "tsify", + "utoipa", + "uuid", + "wasm-bindgen", + "wasmtimer", +] + +[[package]] +name = "nym-credential-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "log", + "nym-compact-ecash", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", + "nym-test-utils", + "serde", + "sqlx", + "sqlx-pool-guard", + "thiserror 2.0.17", + "tokio", + "zeroize", +] + +[[package]] +name = "nym-credential-utils" +version = "0.1.0" +dependencies = [ + "log", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config", + "nym-credential-storage", + "nym-credentials", + "nym-credentials-interface", + "nym-ecash-time", + "nym-validator-client", + "thiserror 2.0.17", + "time", + "tokio", +] + +[[package]] +name = "nym-credential-verification" +version = "0.1.0" +dependencies = [ + "async-trait", + "bs58", + "cosmwasm-std", + "cw-utils", + "dyn-clone", + "futures", + "nym-api-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-ecash-contract-common", + "nym-gateway-requests", + "nym-gateway-storage", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "si-scale", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-credentials" +version = "0.1.0" +dependencies = [ + "bincode", + "bls12_381", + "cosmrs", + "log", + "nym-api-requests", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", + "nym-http-api-client", + "nym-network-defaults", + "nym-serde-helpers", + "nym-validator-client", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "zeroize", +] + +[[package]] +name = "nym-credentials-interface" +version = "0.1.0" +dependencies = [ + "bls12_381", + "nym-compact-ecash", + "nym-ecash-time", + "nym-network-defaults", + "rand 0.8.5", + "serde", + "strum", + "strum_macros", + "thiserror 2.0.17", + "time", + "utoipa", +] + +[[package]] +name = "nym-crypto" +version = "0.4.0" +dependencies = [ + "aead", + "aes", + "aes-gcm-siv", + "base64 0.22.1", + "blake3", + "bs58", + "cipher", + "ctr", + "digest 0.10.7", + "ed25519-dalek", + "generic-array 0.14.9", + "hkdf", + "hmac", + "jwt-simple", + "nym-pemstore", + "nym-sphinx-types", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_bytes", + "sha2 0.10.9", + "subtle-encoding", + "thiserror 2.0.17", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-dkg" +version = "0.1.0" +dependencies = [ + "bitvec", + "bls12_381", + "bs58", + "criterion", + "ff", + "group", + "lazy_static", + "nym-contracts-common", + "nym-pemstore", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", + "serde_derive", + "sha2 0.10.9", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-ecash-contract-common" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "nym-multisig-contract-common", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-ecash-signer-check" +version = "0.1.0" +dependencies = [ + "futures", + "nym-ecash-signer-check-types", + "nym-http-api-client", + "nym-network-defaults", + "nym-validator-client", + "semver 1.0.27", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nym-ecash-signer-check-types" +version = "0.1.0" +dependencies = [ + "nym-coconut-dkg-common", + "nym-crypto", + "semver 1.0.27", + "serde", + "thiserror 2.0.17", + "time", + "tracing", + "url", + "utoipa", +] + +[[package]] +name = "nym-ecash-time" +version = "0.1.0" +dependencies = [ + "nym-compact-ecash", + "time", +] + +[[package]] +name = "nym-exit-policy" +version = "0.1.0" +dependencies = [ + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "tracing", + "utoipa", +] + +[[package]] +name = "nym-ffi-shared" +version = "0.2.1" +dependencies = [ + "anyhow", + "bs58", + "lazy_static", + "nym-bin-common", + "nym-crypto", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "tokio", + "uniffi", + "uniffi_build", +] + +[[package]] +name = "nym-gateway" +version = "1.1.36" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bip39", + "bs58", + "dashmap", + "defguard_wireguard_rs", + "fastrand 2.3.0", + "futures", + "ipnetwork", + "mock_instant", + "nym-api-requests", + "nym-authenticator-requests", + "nym-client-core", + "nym-credential-verification", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-gateway-requests", + "nym-gateway-stats-storage", + "nym-gateway-storage", + "nym-id", + "nym-ip-packet-router", + "nym-mixnet-client", + "nym-mixnode-common", + "nym-network-defaults", + "nym-network-requester", + "nym-node-metrics", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-types", + "nym-validator-client", + "nym-wireguard", + "nym-wireguard-private-metadata-server", + "nym-wireguard-types", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-gateway-client" +version = "0.1.0" +dependencies = [ + "futures", + "getrandom 0.2.16", + "gloo-utils 0.2.0", + "nym-bandwidth-controller", + "nym-credential-storage", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-gateway-requests", + "nym-http-api-client", + "nym-network-defaults", + "nym-pemstore", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "serde", + "si-scale", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tracing", + "tungstenite 0.20.1", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-gateway-requests" +version = "0.1.0" +dependencies = [ + "anyhow", + "bs58", + "futures", + "generic-array 0.14.9", + "nym-compact-ecash", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-pemstore", + "nym-serde-helpers", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-test-utils", + "rand 0.8.5", + "serde", + "serde_json", + "strum", + "subtle 2.6.1", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "tungstenite 0.20.1", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-gateway-stats-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "nym-node-metrics", + "nym-sphinx", + "nym-statistics-common", + "sqlx", + "strum", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-gateway-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "defguard_wireguard_rs", + "dyn-clone", + "nym-credentials-interface", + "nym-gateway-requests", + "nym-sphinx", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-go-ffi" +version = "0.2.2" +dependencies = [ + "anyhow", + "lazy_static", + "nym-bin-common", + "nym-crypto", + "nym-ffi-shared", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "thiserror 2.0.17", + "tokio", + "uniffi", + "uniffi_build", +] + +[[package]] +name = "nym-group-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cw-controllers", + "cw4", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "nym-http-api-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "bincode", + "bytes", + "cfg-if", + "encoding_rs", + "hickory-resolver", + "http 1.3.1", + "inventory", + "itertools 0.14.0", + "mime", + "nym-bin-common", + "nym-http-api-client-macro", + "nym-http-api-common", + "nym-network-defaults", + "once_cell", + "reqwest 0.12.24", + "serde", + "serde_json", + "serde_plain", + "serde_yaml", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", + "wasmtimer", +] + +[[package]] +name = "nym-http-api-client-macro" +version = "0.1.0" +dependencies = [ + "nym-http-api-client", + "proc-macro-crate", + "proc-macro2", + "quote", + "reqwest 0.12.24", + "syn 2.0.106", + "uuid", +] + +[[package]] +name = "nym-http-api-common" +version = "0.1.0" +dependencies = [ + "axum", + "axum-client-ip", + "bincode", + "bytes", + "colored", + "futures", + "mime", + "serde", + "serde_json", + "serde_yaml", + "subtle 2.6.1", + "time", + "tower 0.5.2", + "tracing", + "utoipa", + "zeroize", +] + +[[package]] +name = "nym-id" +version = "0.1.0" +dependencies = [ + "nym-credential-storage", + "nym-credentials", + "thiserror 2.0.17", + "time", + "tracing", + "zeroize", +] + +[[package]] +name = "nym-id-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "bs58", + "clap", + "nym-bin-common", + "nym-credential-storage", + "nym-id", + "tokio", + "tracing", +] + +[[package]] +name = "nym-inclusion-probability" +version = "0.1.0" +dependencies = [ + "log", + "rand 0.8.5", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-ip-packet-client" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "futures", + "nym-ip-packet-requests", + "nym-sdk", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-ip-packet-requests" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "nym-bin-common", + "nym-crypto", + "nym-service-provider-requests-common", + "nym-sphinx", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "nym-ip-packet-router" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bs58", + "bytes", + "clap", + "etherparse", + "futures", + "log", + "nym-bin-common", + "nym-client-core", + "nym-config", + "nym-crypto", + "nym-exit-policy", + "nym-id", + "nym-ip-packet-requests", + "nym-network-defaults", + "nym-network-requester", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-service-providers-common", + "nym-sphinx", + "nym-task", + "nym-tun", + "nym-types", + "nym-wireguard", + "nym-wireguard-types", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tun", + "tokio-util", + "url", +] + +[[package]] +name = "nym-ledger" +version = "0.1.0" +dependencies = [ + "bip32", + "k256", + "ledger-transport", + "ledger-transport-hid", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-metrics" +version = "0.1.0" +dependencies = [ + "dashmap", + "lazy_static", + "prometheus", + "tracing", +] + +[[package]] +name = "nym-mixnet-client" +version = "0.1.0" +dependencies = [ + "dashmap", + "futures", + "nym-crypto", + "nym-noise", + "nym-sphinx", + "nym-task", + "rand 0.8.5", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-mixnet-contract-common" +version = "0.6.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-storage-plus", + "cw2", + "humantime-serde", + "nym-contracts-common", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "serde_repr", + "thiserror 2.0.17", + "time", + "ts-rs", + "utoipa", +] + +[[package]] +name = "nym-mixnode-common" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "humantime-serde", + "log", + "nym-crypto", + "nym-metrics", + "nym-network-defaults", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-types", + "nym-task", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "nym-multisig-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "cw3", + "cw4", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-network-defaults" +version = "0.1.0" +dependencies = [ + "cargo_metadata 0.19.2", + "dotenvy", + "log", + "regex", + "schemars 0.8.22", + "serde", + "url", + "utoipa", +] + +[[package]] +name = "nym-network-monitor" +version = "1.0.2" +dependencies = [ + "anyhow", + "axum", + "clap", + "dashmap", + "futures", + "log", + "nym-bin-common", + "nym-client-core", + "nym-crypto", + "nym-gateway-requests", + "nym-http-api-client", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-sdk", + "nym-sphinx", + "nym-topology", + "nym-types", + "nym-validator-client", + "petgraph", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.24", + "serde", + "serde_json", + "tokio", + "tokio-postgres", + "tokio-util", + "utoipa", + "utoipa-swagger-ui", +] + +[[package]] +name = "nym-network-requester" +version = "1.1.65" +dependencies = [ + "addr", + "anyhow", + "async-trait", + "bs58", + "clap", + "dirs", + "futures", + "humantime-serde", + "ipnetwork", + "log", + "nym-async-file-watcher", + "nym-bin-common", + "nym-client-core", + "nym-client-websocket-requests", + "nym-config", + "nym-credential-storage", + "nym-credentials", + "nym-crypto", + "nym-exit-policy", + "nym-id", + "nym-network-defaults", + "nym-ordered-buffer", + "nym-sdk", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", + "nym-sphinx", + "nym-task", + "nym-types", + "publicsuffix", + "rand 0.8.5", + "regex", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tungstenite", + "tokio-util", + "url", + "zeroize", +] + +[[package]] +name = "nym-node" +version = "1.19.0" +dependencies = [ + "anyhow", + "arc-swap", + "arrayref", + "async-trait", + "axum", + "bip39", + "blake2 0.8.1", + "bloomfilter", + "bs58", + "cargo_metadata 0.19.2", + "celes", + "cfg-if", + "chacha", + "clap", + "colored", + "console-subscriber", + "criterion", + "csv", + "cupid", + "futures", + "hkdf", + "human-repr", + "humantime-serde", + "indicatif", + "ipnetwork", + "lioness", + "nym-bin-common", + "nym-client-core-config-types", + "nym-config", + "nym-crypto", + "nym-gateway", + "nym-gateway-stats-storage", + "nym-http-api-client", + "nym-http-api-common", + "nym-ip-packet-router", + "nym-metrics", + "nym-mixnet-client", + "nym-network-requester", + "nym-node-metrics", + "nym-node-requests", + "nym-noise", + "nym-noise-keys", + "nym-nonexhaustive-delayqueue", + "nym-pemstore", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-types", + "nym-validator-client", + "nym-verloc", + "nym-wireguard", + "nym-wireguard-types", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "sha2 0.10.9", + "sysinfo", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "toml 0.8.23", + "tower-http 0.5.2", + "tracing", + "tracing-indicatif", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "zeroize", +] + +[[package]] +name = "nym-node-metrics" +version = "0.1.0" +dependencies = [ + "dashmap", + "futures", + "nym-metrics", + "nym-statistics-common", + "strum", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-node-requests" +version = "0.1.0" +dependencies = [ + "async-trait", + "celes", + "humantime", + "humantime-serde", + "nym-bin-common", + "nym-crypto", + "nym-exit-policy", + "nym-http-api-client", + "nym-noise-keys", + "nym-wireguard-types", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "serde", + "serde_json", + "strum", + "strum_macros", + "thiserror 2.0.17", + "time", + "tokio", + "utoipa", +] + +[[package]] +name = "nym-node-status-agent" +version = "1.0.7" +dependencies = [ + "anyhow", + "clap", + "futures", + "nym-bin-common", + "nym-crypto", + "nym-node-status-client", + "rand 0.8.5", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "nym-node-status-api" +version = "4.0.5" +dependencies = [ + "ammonia", + "anyhow", + "axum", + "axum-test", + "bip39", + "bs58", + "celes", + "clap", + "cosmwasm-std", + "futures-util", + "humantime", + "itertools 0.14.0", + "moka", + "nym-bin-common", + "nym-contracts-common", + "nym-credential-proxy-lib", + "nym-credentials", + "nym-crypto", + "nym-ecash-time", + "nym-http-api-client", + "nym-http-api-common", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-node-metrics", + "nym-node-requests", + "nym-node-status-client", + "nym-serde-helpers", + "nym-statistics-common", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "rand_chacha 0.3.1", + "regex", + "reqwest 0.12.24", + "semver 1.0.27", + "serde", + "serde_json", + "serde_json_path", + "sqlx", + "strum", + "strum_macros", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-log 0.2.0", + "tracing-subscriber", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", + "zeroize", +] + +[[package]] +name = "nym-node-status-client" +version = "0.2.0" +dependencies = [ + "anyhow", + "bincode", + "bs58", + "nym-credentials", + "nym-crypto", + "reqwest 0.12.24", + "serde", + "serde_json", + "time", + "tracing", +] + +[[package]] +name = "nym-node-tester-utils" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "nym-crypto", + "nym-sphinx", + "nym-sphinx-params", + "nym-task", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "wasm-utils", +] + +[[package]] +name = "nym-node-tester-wasm" +version = "1.3.0-rc.0" +dependencies = [ + "futures", + "js-sys", + "nym-node-tester-utils", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "tokio", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-client-core", + "wasm-utils", + "wasmtimer", +] + +[[package]] +name = "nym-noise" +version = "0.1.0" +dependencies = [ + "anyhow", + "arc-swap", + "bytes", + "futures", + "nym-crypto", + "nym-noise-keys", + "nym-test-utils", + "pin-project", + "rand_chacha 0.3.1", + "sha2 0.10.9", + "snow", + "strum", + "strum_macros", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-noise-keys" +version = "0.1.0" +dependencies = [ + "nym-crypto", + "schemars 0.8.22", + "serde", + "utoipa", +] + +[[package]] +name = "nym-nonexhaustive-delayqueue" +version = "0.1.0" +dependencies = [ + "tokio", + "tokio-stream", + "tokio-util", + "wasmtimer", +] + +[[package]] +name = "nym-nr-query" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "log", + "nym-bin-common", + "nym-network-defaults", + "nym-sdk", + "nym-service-providers-common", + "nym-socks5-requests", + "serde", + "tokio", +] + +[[package]] +name = "nym-ordered-buffer" +version = "0.1.0" +dependencies = [ + "log", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-outfox" +version = "0.1.0" +dependencies = [ + "blake3", + "chacha20", + "chacha20poly1305", + "criterion", + "fastrand 2.3.0", + "getrandom 0.2.16", + "log", + "rand 0.8.5", + "rayon", + "sphinx-packet", + "thiserror 2.0.17", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-pemstore" +version = "0.3.0" +dependencies = [ + "pem", + "tracing", + "zeroize", +] + +[[package]] +name = "nym-performance-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "nym-contracts-common", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-pool-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", + "time", +] + +[[package]] +name = "nym-registration-client" +version = "0.1.0" +dependencies = [ + "nym-authenticator-client", + "nym-bandwidth-controller", + "nym-credential-storage", + "nym-credentials-interface", + "nym-ip-packet-client", + "nym-registration-common", + "nym-sdk", + "nym-validator-client", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-registration-common" +version = "0.1.0" +dependencies = [ + "nym-authenticator-requests", + "nym-crypto", + "nym-ip-packet-requests", + "nym-sphinx", + "tokio-util", +] + +[[package]] +name = "nym-sdk" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bip39", + "bytecodec", + "bytes", + "clap", + "dashmap", + "dirs", + "dotenvy", + "futures", + "hex", + "http 1.3.1", + "httpcodec", + "log", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-client-core", + "nym-credential-storage", + "nym-credential-utils", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-gateway-requests", + "nym-http-api-client", + "nym-network-defaults", + "nym-ordered-buffer", + "nym-service-providers-common", + "nym-socks5-client-core", + "nym-socks5-requests", + "nym-sphinx", + "nym-sphinx-addressing", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client", + "parking_lot", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "toml 0.8.23", + "tracing", + "tracing-subscriber", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-serde-helpers" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bs58", + "hex", + "serde", + "time", +] + +[[package]] +name = "nym-service-provider-requests-common" +version = "0.1.0" +dependencies = [ + "bincode", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-service-providers-common" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "log", + "nym-bin-common", + "nym-sdk", + "nym-socks5-requests", + "nym-sphinx-anonymous-replies", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", +] + +[[package]] +name = "nym-signers-monitor" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "humantime", + "itertools 0.14.0", + "nym-bin-common", + "nym-ecash-signer-check", + "nym-network-defaults", + "nym-task", + "nym-validator-client", + "time", + "tokio", + "tracing", + "url", + "zulip-client", +] + +[[package]] +name = "nym-socks5-client" +version = "1.1.64" +dependencies = [ + "bs58", + "clap", + "log", + "nym-bin-common", + "nym-client-core", + "nym-config", + "nym-credential-storage", + "nym-credentials", + "nym-crypto", + "nym-gateway-requests", + "nym-id", + "nym-network-defaults", + "nym-ordered-buffer", + "nym-pemstore", + "nym-socks5-client-core", + "nym-sphinx", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", + "time", + "tokio", + "url", + "zeroize", +] + +[[package]] +name = "nym-socks5-client-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "dirs", + "futures", + "log", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config", + "nym-contracts-common", + "nym-credential-storage", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", + "nym-sphinx", + "nym-task", + "nym-validator-client", + "pin-project", + "rand 0.8.5", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "tap", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "nym-socks5-proxy-helpers" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "log", + "nym-ordered-buffer", + "nym-socks5-requests", + "nym-task", + "tokio", + "tokio-test", + "tokio-util", +] + +[[package]] +name = "nym-socks5-requests" +version = "0.1.0" +dependencies = [ + "bincode", + "log", + "nym-exit-policy", + "nym-service-providers-common", + "nym-sphinx-addressing", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx" +version = "0.1.0" +dependencies = [ + "bincode", + "log", + "nym-crypto", + "nym-metrics", + "nym-mixnet-contract-common", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-anonymous-replies", + "nym-sphinx-chunking", + "nym-sphinx-cover", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "serde", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "nym-sphinx-acknowledgements" +version = "0.1.0" +dependencies = [ + "generic-array 0.14.9", + "nym-crypto", + "nym-pemstore", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-topology", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-sphinx-addressing" +version = "0.1.0" +dependencies = [ + "bincode", + "nym-crypto", + "nym-sphinx-types", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-anonymous-replies" +version = "0.1.0" +dependencies = [ + "bs58", + "nym-crypto", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "thiserror 2.0.17", + "tracing", + "wasm-bindgen", +] + +[[package]] +name = "nym-sphinx-chunking" +version = "0.1.0" +dependencies = [ + "dashmap", + "log", + "nym-crypto", + "nym-metrics", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-types", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "utoipa", +] + +[[package]] +name = "nym-sphinx-cover" +version = "0.1.0" +dependencies = [ + "nym-crypto", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-chunking", + "nym-sphinx-forwarding", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-topology", + "rand 0.8.5", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-forwarding" +version = "0.1.0" +dependencies = [ + "nym-sphinx-addressing", + "nym-sphinx-anonymous-replies", + "nym-sphinx-params", + "nym-sphinx-types", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-framing" +version = "0.1.0" +dependencies = [ + "bytes", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-params", + "nym-sphinx-types", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-sphinx-params" +version = "0.1.0" +dependencies = [ + "nym-crypto", + "nym-sphinx-types", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-routing" +version = "0.1.0" +dependencies = [ + "nym-sphinx-addressing", + "nym-sphinx-types", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-types" +version = "0.2.0" +dependencies = [ + "nym-outfox", + "sphinx-packet", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-statistics-api" +version = "0.2.1" +dependencies = [ + "anyhow", + "axum", + "axum-client-ip", + "axum-extra", + "celes", + "clap", + "nym-bin-common", + "nym-http-api-client", + "nym-http-api-common", + "nym-statistics-common", + "nym-task", + "nym-validator-client", + "serde", + "serde_json", + "sqlx", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nym-statistics-common" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "nym-credentials-interface", + "nym-crypto", + "nym-metrics", + "nym-sphinx", + "nym-task", + "serde", + "serde_json", + "sha2 0.10.9", + "si-scale", + "strum", + "strum_macros", + "sysinfo", + "thiserror 2.0.17", + "time", + "tokio", + "utoipa", + "wasmtimer", +] + +[[package]] +name = "nym-store-cipher" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "argon2", + "generic-array 0.14.9", + "getrandom 0.2.16", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-task" +version = "0.1.0" +dependencies = [ + "anyhow", + "cfg-if", + "futures", + "log", + "nym-test-utils", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasmtimer", +] + +[[package]] +name = "nym-test-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "futures", + "rand_chacha 0.3.1", + "tokio", +] + +[[package]] +name = "nym-ticketbooks-merkle" +version = "0.1.0" +dependencies = [ + "nym-credentials-interface", + "nym-serde-helpers", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rs_merkle", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "time", + "utoipa", +] + +[[package]] +name = "nym-topology" +version = "0.1.0" +dependencies = [ + "async-trait", + "nym-api-requests", + "nym-crypto", + "nym-mixnet-contract-common", + "nym-sphinx-addressing", + "nym-sphinx-types", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tracing", + "tsify", + "wasm-bindgen", + "wasm-utils", +] + +[[package]] +name = "nym-tun" +version = "0.1.0" +dependencies = [ + "etherparse", + "log", + "nym-wireguard-types", + "thiserror 2.0.17", + "tokio", + "tokio-tun", +] + +[[package]] +name = "nym-types" +version = "1.0.0" +dependencies = [ + "base64 0.22.1", + "cosmrs", + "cosmwasm-std", + "eyre", + "hmac", + "itertools 0.14.0", + "log", + "nym-config", + "nym-crypto", + "nym-mixnet-contract-common", + "nym-validator-client", + "nym-vesting-contract-common", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "strum", + "strum_macros", + "tempfile", + "thiserror 2.0.17", + "ts-rs", + "url", + "utoipa", + "x25519-dalek", +] + +[[package]] +name = "nym-upgrade-mode-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "jwt-simple", + "nym-crypto", + "nym-http-api-client", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tracing", +] + +[[package]] +name = "nym-validator-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bip32", + "bip39", + "colored", + "cosmrs", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "cw3", + "cw4", + "eyre", + "flate2", + "futures", + "itertools 0.14.0", + "nym-api-requests", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-ecash-contract-common", + "nym-group-contract-common", + "nym-http-api-client", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-network-defaults", + "nym-performance-contract-common", + "nym-serde-helpers", + "nym-vesting-contract-common", + "prost", + "reqwest 0.12.24", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "ts-rs", + "url", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-validator-rewarder" +version = "0.3.0" +dependencies = [ + "anyhow", + "bip39", + "clap", + "cosmwasm-std", + "futures", + "humantime", + "humantime-serde", + "nym-bin-common", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", + "nym-http-api-client", + "nym-network-defaults", + "nym-pemstore", + "nym-serde-helpers", + "nym-task", + "nym-ticketbooks-merkle", + "nym-validator-client", + "nyxd-scraper", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "serde_with", + "sha2 0.10.9", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-verloc" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "humantime", + "nym-api-requests", + "nym-crypto", + "nym-http-api-client", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-vesting-contract-common" +version = "0.7.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "nym-contracts-common", + "nym-mixnet-contract-common", + "serde", + "thiserror 2.0.17", + "ts-rs", +] + +[[package]] +name = "nym-vpn-api-lib-wasm" +version = "0.1.0" +dependencies = [ + "bs58", + "getrandom 0.2.16", + "js-sys", + "nym-bin-common", + "nym-compact-ecash", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_json", + "thiserror 2.0.17", + "time", + "tsify", + "wasm-bindgen", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "nym-wallet-types" +version = "1.0.0" +dependencies = [ + "cosmrs", + "cosmwasm-std", + "hex-literal", + "nym-config", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-types", + "nym-validator-client", + "nym-vesting-contract-common", + "serde", + "serde_json", + "strum", + "strum_macros", + "ts-rs", +] + +[[package]] +name = "nym-wireguard" +version = "0.1.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bincode", + "chrono", + "dashmap", + "defguard_wireguard_rs", + "dyn-clone", + "futures", + "ip_network", + "log", + "nym-authenticator-requests", + "nym-credential-verification", + "nym-credentials-interface", + "nym-crypto", + "nym-gateway-requests", + "nym-gateway-storage", + "nym-network-defaults", + "nym-node-metrics", + "nym-task", + "nym-wireguard-types", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tracing", + "x25519-dalek", +] + +[[package]] +name = "nym-wireguard-private-metadata-client" +version = "1.0.0" +dependencies = [ + "async-trait", + "nym-http-api-client", + "nym-wireguard-private-metadata-shared", + "tracing", +] + +[[package]] +name = "nym-wireguard-private-metadata-server" +version = "1.0.0" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "futures", + "nym-credential-verification", + "nym-credentials-interface", + "nym-http-api-common", + "nym-wireguard", + "nym-wireguard-private-metadata-shared", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "utoipa", + "utoipa-swagger-ui", +] + +[[package]] +name = "nym-wireguard-private-metadata-shared" +version = "1.0.0" +dependencies = [ + "axum", + "bincode", + "nym-credentials-interface", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", + "utoipa", +] + +[[package]] +name = "nym-wireguard-private-metadata-tests" +version = "1.0.0" +dependencies = [ + "async-trait", + "axum", + "nym-credential-verification", + "nym-credentials-interface", + "nym-http-api-client", + "nym-http-api-common", + "nym-wireguard", + "nym-wireguard-private-metadata-client", + "nym-wireguard-private-metadata-server", + "nym-wireguard-private-metadata-shared", + "tokio", + "tower-http 0.5.2", + "utoipa", +] + +[[package]] +name = "nym-wireguard-types" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "log", + "nym-config", + "nym-crypto", + "nym-network-defaults", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "x25519-dalek", +] + +[[package]] +name = "nymvisor" +version = "0.1.29" +dependencies = [ + "anyhow", + "bytes", + "clap", + "dotenvy", + "flate2", + "futures", + "hex", + "humantime", + "humantime-serde", + "nix 0.27.1", + "nym-async-file-watcher", + "nym-bin-common", + "nym-config", + "nym-task", + "reqwest 0.12.24", + "serde", + "serde_json", + "sha2 0.10.9", + "tar", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nyx-chain-watcher" +version = "0.1.14" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "chrono", + "clap", + "nym-bin-common", + "nym-config", + "nym-network-defaults", + "nym-task", + "nym-validator-client", + "nyxd-scraper", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nyxd-scraper" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "const_format", + "cosmrs", + "eyre", + "futures", + "humantime", + "serde", + "sha2 0.10.9", + "sqlx", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "libc", + "objc2-core-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "critical-section", + "portable-atomic", +] + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[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.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-http" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" +dependencies = [ + "async-trait", + "bytes", + "http 0.2.12", + "isahc", + "opentelemetry_api", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "http 0.2.12", + "isahc", + "once_cell", + "opentelemetry", + "opentelemetry-http", + "opentelemetry-semantic-conventions", + "thiserror 1.0.69", + "thrift", + "tokio", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "once_cell", + "pin-project-lite", + "thiserror 1.0.69", + "urlencoding", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand 0.8.5", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "peg" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477" +dependencies = [ + "peg-macros", + "peg-runtime", +] + +[[package]] +name = "peg-macros" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71" +dependencies = [ + "peg-runtime", + "proc-macro2", + "quote", +] + +[[package]] +name = "peg-runtime" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca" + +[[package]] +name = "pem" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +dependencies = [ + "base64 0.13.1", + "once_cell", + "regex", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pest" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pest_meta" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" +dependencies = [ + "pest", + "sha2 0.10.9", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.11.4", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "plotters" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" + +[[package]] +name = "plotters-svg" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[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 0.3.1", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes", + "fallible-iterator", + "hmac", + "md-5", + "memchr", + "rand 0.9.2", + "sha2 0.10.9", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" +dependencies = [ + "bytes", + "fallible-iterator", + "postgres-protocol", +] + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc_pidinfo" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" +dependencies = [ + "libc", +] + +[[package]] +name = "prometheus" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror 2.0.17", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "prost-types" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" +dependencies = [ + "once_cell", + "protobuf-support", + "thiserror 1.0.69", +] + +[[package]] +name = "protobuf-support" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" +dependencies = [ + "thiserror 1.0.69", +] + +[[package]] +name = "psl" +version = "2.1.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c569a9577fe28cc82ac9969ec31778511f1912b3468fe236c24393bebf8a571" +dependencies = [ + "psl-types", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.32", + "socket2 0.6.1", + "thiserror 2.0.17", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash", + "rustls 0.23.32", + "rustls-pki-types", + "slab", + "thiserror 2.0.17", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.6.1", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +dependencies = [ + "async-compression", + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-rustls 0.27.7", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.32", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "tower 0.5.2", + "tower-http 0.6.6", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots 1.0.3", +] + +[[package]] +name = "reserve-port" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" +dependencies = [ + "thiserror 2.0.17", +] + +[[package]] +name = "resolv-conf" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle 2.6.1", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rs_merkle" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" +dependencies = [ + "sha2 0.10.9", +] + +[[package]] +name = "rsa" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "sha2 0.10.9", + "signature", + "spki", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rust-embed" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.106", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" +dependencies = [ + "sha2 0.10.9", + "walkdir", +] + +[[package]] +name = "rust-multipart-rfc7578_2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" +dependencies = [ + "bytes", + "futures-core", + "futures-util", + "http 0.2.12", + "mime", + "mime_guess", + "rand 0.8.5", + "thiserror 1.0.69", +] + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.103.7", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals 0.29.1", + "syn 2.0.106", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sealed" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.9", + "pkcs8", + "serdect 0.2.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" +dependencies = [ + "cc", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.9.4", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_derive_internals" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_json_path" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b992cea3194eea663ba99a042d61cea4bd1872da37021af56f6a37e0359b9d33" +dependencies = [ + "inventory", + "nom", + "regex", + "serde", + "serde_json", + "serde_json_path_core", + "serde_json_path_macros", + "thiserror 2.0.17", +] + +[[package]] +name = "serde_json_path_core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde67d8dfe7d4967b5a95e247d4148368ddd1e753e500adb34b3ffe40c6bc1bc" +dependencies = [ + "inventory", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "serde_json_path_macros" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "517acfa7f77ddaf5c43d5f119c44a683774e130b4247b7d3210f8924506cfac8" +dependencies = [ + "inventory", + "serde_json_path_core", + "serde_json_path_macros_internal", +] + +[[package]] +name = "serde_json_path_macros_internal" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[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", +] + +[[package]] +name = "serde_plain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.11.4", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.11.4", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "serdect" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "si-scale" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio 0.8.11", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2 0.10.6", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "rustc_version 0.4.1", + "sha2 0.10.9", + "subtle 2.6.1", +] + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "sphinx-packet" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" +dependencies = [ + "aes", + "arrayref", + "blake2 0.8.1", + "bs58", + "byteorder", + "chacha", + "ctr", + "curve25519-dalek", + "digest 0.10.7", + "hkdf", + "hmac", + "lioness", + "rand 0.8.5", + "rand_distr", + "sha2 0.10.9", + "subtle 2.6.1", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlx" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +dependencies = [ + "base64 0.22.1", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.4.1", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.15.5", + "hashlink", + "indexmap 2.11.4", + "log", + "memchr", + "once_cell", + "percent-encoding", + "rustls 0.23.32", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.106", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.106", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.9.4", + "byteorder", + "bytes", + "chrono", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array 0.14.9", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.17", + "time", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-pool-guard" +version = "0.1.0" +dependencies = [ + "proc_pidinfo", + "sqlx", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", + "windows", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.9.4", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.17", + "time", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "thiserror 2.0.17", + "time", + "tracing", + "url", +] + +[[package]] +name = "ssl-inject" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "hex", + "tokio", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "subtle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "superboring" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "515cce34a781d7250b8a65706e0f2a5b99236ea605cb235d4baed6685820478f" +dependencies = [ + "getrandom 0.2.16", + "hmac-sha256", + "hmac-sha512", + "rand 0.8.5", + "rsa", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "sysinfo" +version = "0.37.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "objc2-io-kit", + "windows", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand 2.3.0", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendermint" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" +dependencies = [ + "bytes", + "digest 0.10.7", + "ed25519", + "ed25519-consensus", + "flex-error", + "futures", + "k256", + "num-traits", + "once_cell", + "prost", + "ripemd", + "serde", + "serde_bytes", + "serde_json", + "serde_repr", + "sha2 0.10.9", + "signature", + "subtle 2.6.1", + "subtle-encoding", + "tendermint-proto", + "time", + "zeroize", +] + +[[package]] +name = "tendermint-config" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" +dependencies = [ + "flex-error", + "serde", + "serde_json", + "tendermint", + "toml 0.8.23", + "url", +] + +[[package]] +name = "tendermint-proto" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" +dependencies = [ + "bytes", + "flex-error", + "prost", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "tendermint-rpc" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" +dependencies = [ + "async-trait", + "async-tungstenite", + "bytes", + "flex-error", + "futures", + "getrandom 0.2.16", + "peg", + "pin-project", + "rand 0.8.5", + "reqwest 0.11.27", + "semver 1.0.27", + "serde", + "serde_bytes", + "serde_json", + "subtle 2.6.1", + "subtle-encoding", + "tendermint", + "tendermint-config", + "tendermint-proto", + "thiserror 1.0.69", + "time", + "tokio", + "tracing", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "test-with" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f370b9efbfbbc5f057cbce9888373eaeb146a3095bb8cc869b199c94d15559" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "regex", + "syn 2.0.106", +] + +[[package]] +name = "testnet-manager" +version = "0.1.0" +dependencies = [ + "anyhow", + "bip39", + "bs58", + "clap", + "console", + "cw-utils", + "dkg-bypass-contract", + "humantime", + "indicatif", + "nym-bin-common", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-crypto", + "nym-ecash-contract-common", + "nym-group-contract-common", + "nym-http-api-client", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-pemstore", + "nym-performance-contract-common", + "nym-validator-client", + "nym-vesting-contract-common", + "rand 0.8.5", + "serde", + "serde_json", + "sqlx", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "toml 0.8.23", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "textwrap" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" +dependencies = [ + "smawk", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "js-sys", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio 1.0.4", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.1", + "tokio-macros", + "tracing", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf 0.13.1", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "rand 0.9.2", + "socket2 0.6.1", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls 0.23.32", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-tun" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5381752d5832fc811f89d54fc334951aa435022f494190ba7151661f206df" +dependencies = [ + "libc", + "nix 0.29.0", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", + "webpki-roots 0.25.4", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "futures-util", + "pin-project-lite", + "slab", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap 2.11.4", + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.11.4", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.22.1", + "bytes", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "socket2 0.5.10", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "async-compression", + "bitflags 2.9.4", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.4", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "iri-string", + "pin-project-lite", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-indicatif" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d4e11e0e27acef25a47f27e9435355fecdc488867fa2bc90e75b0700d2823d" +dependencies = [ + "indicatif", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "matchers", + "nu-ansi-term 0.50.3", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "tracing-tree" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" +dependencies = [ + "nu-ansi-term 0.46.0", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "trackable" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" +dependencies = [ + "trackable 1.3.0", + "trackable_derive", +] + +[[package]] +name = "trackable" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" +dependencies = [ + "trackable_derive", +] + +[[package]] +name = "trackable_derive" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "ts-rs" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" +dependencies = [ + "lazy_static", + "thiserror 2.0.17", + "ts-rs-macros", +] + +[[package]] +name = "ts-rs-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "nym-api-requests", + "nym-mixnet-contract-common", + "nym-types", + "nym-validator-client", + "nym-vesting-contract-common", + "nym-wallet-types", + "ts-rs", + "walkdir", +] + +[[package]] +name = "ts-rs-macros" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "termcolor", +] + +[[package]] +name = "tsify" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" +dependencies = [ + "gloo-utils 0.1.7", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_json", + "tsify-macros", + "wasm-bindgen", +] + +[[package]] +name = "tsify-macros" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals 0.28.0", + "syn 2.0.106", +] + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.21.12", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", + "webpki-roots 0.24.0", +] + +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.3.1", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.22.4", + "rustls-pki-types", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "uniffi" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6d968cb62160c11f2573e6be724ef8b1b18a277aededd17033f8a912d73e2b4" +dependencies = [ + "anyhow", + "camino", + "cargo_metadata 0.19.2", + "clap", + "uniffi_bindgen", + "uniffi_build", + "uniffi_core", + "uniffi_macros", + "uniffi_pipeline", +] + +[[package]] +name = "uniffi_bindgen" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b39ef1acbe1467d5d210f274fae344cb6f8766339330cb4c9688752899bf6b" +dependencies = [ + "anyhow", + "askama", + "camino", + "cargo_metadata 0.19.2", + "fs-err", + "glob", + "goblin", + "heck 0.5.0", + "indexmap 2.11.4", + "once_cell", + "serde", + "tempfile", + "textwrap", + "toml 0.5.11", + "uniffi_internal_macros", + "uniffi_meta", + "uniffi_pipeline", + "uniffi_udl", +] + +[[package]] +name = "uniffi_build" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6683e6b665423cddeacd89a3f97312cf400b2fb245a26f197adaf65c45d505b2" +dependencies = [ + "anyhow", + "camino", + "uniffi_bindgen", +] + +[[package]] +name = "uniffi_core" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d990b553d6b9a7ee9c3ae71134674739913d52350b56152b0e613595bb5a6f" +dependencies = [ + "anyhow", + "bytes", + "once_cell", + "static_assertions", +] + +[[package]] +name = "uniffi_internal_macros" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f4f224becf14885c10e6e400b95cc4d1985738140cb194ccc2044563f8a56b" +dependencies = [ + "anyhow", + "indexmap 2.11.4", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "uniffi_macros" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b481d385af334871d70904e6a5f129be7cd38c18fcf8dd8fd1f646b426a56d58" +dependencies = [ + "camino", + "fs-err", + "once_cell", + "proc-macro2", + "quote", + "serde", + "syn 2.0.106", + "toml 0.5.11", + "uniffi_meta", +] + +[[package]] +name = "uniffi_meta" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f817868a3b171bb7bf259e882138d104deafde65684689b4694c846d322491" +dependencies = [ + "anyhow", + "siphasher 0.3.11", + "uniffi_internal_macros", + "uniffi_pipeline", +] + +[[package]] +name = "uniffi_pipeline" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b147e133ad7824e32426b90bc41fda584363563f2ba747f590eca1fd6fd14e6" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.11.4", + "tempfile", + "uniffi_internal_macros", +] + +[[package]] +name = "uniffi_udl" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caed654fb73da5abbc7a7e9c741532284532ba4762d6fe5071372df22a41730a" +dependencies = [ + "anyhow", + "textwrap", + "uniffi_meta", + "weedle2", +] + +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "utoipa" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" +dependencies = [ + "indexmap 2.11.4", + "serde", + "serde_json", + "utoipa-gen", +] + +[[package]] +name = "utoipa-gen" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.106", + "uuid", +] + +[[package]] +name = "utoipa-swagger-ui" +version = "8.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" +dependencies = [ + "axum", + "base64 0.22.1", + "mime_guess", + "regex", + "rust-embed", + "serde", + "serde_json", + "url", + "utoipa", + "zip", +] + +[[package]] +name = "utoipauto" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cba36db2c397c614110554a60fbb4bb97d5f8c6823775c766e6f455e37377047" +dependencies = [ + "utoipauto-macro", +] + +[[package]] +name = "utoipauto-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "utoipauto-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "utoipauto-core", +] + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "getrandom 0.3.4", + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "validator-status-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "comfy-table", + "nym-bin-common", + "nym-http-api-client", + "nym-network-defaults", + "nym-validator-client", + "serde", + "serde_json", + "strum", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +dependencies = [ + "anyhow", + "cargo_metadata 0.18.1", + "cfg-if", + "regex", + "rustc_version 0.4.1", + "rustversion", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vt100" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" +dependencies = [ + "itoa", + "log", + "unicode-width 0.1.14", + "vte", +] + +[[package]] +name = "vte" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" +dependencies = [ + "arrayvec", + "utf8parse", + "vte_generate_state_changes", +] + +[[package]] +name = "vte_generate_state_changes" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.106", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" +dependencies = [ + "js-sys", + "minicov", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "wasm-client-core" +version = "0.1.0" +dependencies = [ + "async-trait", + "console_error_panic_hook", + "js-sys", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config", + "nym-credential-storage", + "nym-crypto", + "nym-gateway-client", + "nym-http-api-client", + "nym-sphinx", + "nym-sphinx-acknowledgements", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "time", + "tsify", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-storage", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "wasm-storage" +version = "0.1.0" +dependencies = [ + "async-trait", + "getrandom 0.2.16", + "indexed_db_futures", + "js-sys", + "nym-store-cipher", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "wasm-bindgen", + "wasm-utils", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm-utils" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "futures", + "getrandom 0.2.16", + "gloo-net", + "gloo-utils 0.2.0", + "js-sys", + "tungstenite 0.20.1", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmtimer" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "slab", + "wasm-bindgen", +] + +[[package]] +name = "web-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" +dependencies = [ + "phf 0.11.3", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webpki-roots" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +dependencies = [ + "rustls-webpki 0.101.7", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.3", +] + +[[package]] +name = "webpki-roots" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "weedle2" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" +dependencies = [ + "nom", +] + +[[package]] +name = "whoami" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" +dependencies = [ + "libredox", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[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", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "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", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[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-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", +] + +[[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", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[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_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zip" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", + "flate2", + "indexmap 2.11.4", + "memchr", + "thiserror 2.0.17", + "zopfli", +] + +[[package]] +name = "zknym-lib" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bs58", + "getrandom 0.2.16", + "js-sys", + "nym-bin-common", + "nym-compact-ecash", + "nym-credentials", + "nym-crypto", + "nym-http-api-client", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "thiserror 2.0.17", + "tokio", + "tsify", + "uuid", + "wasm-bindgen", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "zopfli" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zulip-client" +version = "0.1.0" +dependencies = [ + "itertools 0.14.0", + "nym-bin-common", + "nym-http-api-client", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", + "zeroize", +] diff --git a/common/client-core/src/client/base_client/mod.rs b/common/client-core/src/client/base_client/mod.rs index f1e6e611f9b..3069f2546db 100644 --- a/common/client-core/src/client/base_client/mod.rs +++ b/common/client-core/src/client/base_client/mod.rs @@ -36,6 +36,8 @@ use crate::init::{ types::{GatewaySetup, InitialisationResult}, }; use futures::channel::mpsc; +use futures::SinkExt; +use log::*; use nym_bandwidth_controller::BandwidthController; use nym_client_core_config_types::{ForgetMe, RememberMe}; use nym_client_core_gateways_storage::{GatewayDetails, GatewaysDetailsStore}; @@ -67,8 +69,8 @@ use std::path::Path; use std::sync::Arc; use time::OffsetDateTime; use tokio::sync::mpsc::Sender; -use tracing::*; use tokio_util::sync::PollSender; +use tracing::*; use url::Url; #[cfg(target_arch = "wasm32")] @@ -751,7 +753,7 @@ where config: &Config, user_agent: Option, client_stats_id: String, - input_sender: Sender, + input_sender: PollSender, shutdown_tracker: &ShutdownTracker, ) -> ClientStatsSender { tracing::info!("Starting statistics control..."); From 1a6708a381bb1d4829ed421bc3a78e6e0cab641b Mon Sep 17 00:00:00 2001 From: Drazen Date: Wed, 12 Jun 2024 21:35:17 +0200 Subject: [PATCH 005/139] Use Sink always --- common/client-core/src/client/base_client/mod.rs | 13 +++---------- common/socks5/proxy-helpers/src/ordered_sender.rs | 9 ++++----- common/socks5/proxy-helpers/src/proxy_runner/mod.rs | 4 ++-- .../examples/parallel_sending_and_receiving.rs | 2 +- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 4 ++-- sdk/rust/nym-sdk/src/mixnet/traits.rs | 8 ++++---- service-providers/network-requester/src/core.rs | 2 +- 7 files changed, 17 insertions(+), 25 deletions(-) diff --git a/common/client-core/src/client/base_client/mod.rs b/common/client-core/src/client/base_client/mod.rs index 3069f2546db..7edc42b7768 100644 --- a/common/client-core/src/client/base_client/mod.rs +++ b/common/client-core/src/client/base_client/mod.rs @@ -69,7 +69,7 @@ use std::path::Path; use std::sync::Arc; use time::OffsetDateTime; use tokio::sync::mpsc::Sender; -use tokio_util::sync::PollSender; +use tokio_util::sync::{PollSendError, PollSender}; use tracing::*; use url::Url; @@ -116,15 +116,8 @@ pub struct ClientInput { } impl ClientInput { - pub async fn send( - &self, - message: InputMessage, - ) -> Result<(), tokio::sync::mpsc::error::SendError> { - if let Some(channel) = self.input_sender.get_ref() { - channel.send(message).await - } else { - Err(tokio::sync::mpsc::error::SendError(message)) - } + pub async fn send(&mut self, message: InputMessage) -> Result<(), PollSendError> { + self.input_sender.send(message).await } } diff --git a/common/socks5/proxy-helpers/src/ordered_sender.rs b/common/socks5/proxy-helpers/src/ordered_sender.rs index a94cfe97dc6..02c465037bd 100644 --- a/common/socks5/proxy-helpers/src/ordered_sender.rs +++ b/common/socks5/proxy-helpers/src/ordered_sender.rs @@ -3,6 +3,7 @@ use crate::proxy_runner::MixProxySender; use bytes::Bytes; +use futures::SinkExt; use log::{debug, error}; use nym_socks5_requests::{ConnectionId, SocketData}; use std::io; @@ -55,11 +56,9 @@ where (self.mix_message_adapter)(data) } - async fn send_message(&self, message: S) { - if let Some(sender) = self.mixnet_sender.get_ref() { - if sender.send(message).await.is_err() { - panic!("BatchRealMessageReceiver has stopped receiving!") - } + async fn send_message(&mut self, message: S) { + if self.mixnet_sender.send(message).await.is_err() { + panic!("BatchRealMessageReceiver has stopped receiving!") } } diff --git a/common/socks5/proxy-helpers/src/proxy_runner/mod.rs b/common/socks5/proxy-helpers/src/proxy_runner/mod.rs index 66da2ca6fe2..0da23c5c5ab 100644 --- a/common/socks5/proxy-helpers/src/proxy_runner/mod.rs +++ b/common/socks5/proxy-helpers/src/proxy_runner/mod.rs @@ -5,11 +5,11 @@ use crate::connection_controller::ConnectionReceiver; use crate::ordered_sender::OrderedMessageSender; use nym_socks5_requests::{ConnectionId, SocketData}; use nym_task::connections::LaneQueueLengths; -use nym_task::ShutdownTracker; -use tokio_util::sync::PollSender; +<<<<<<< HEAD use std::fmt::Debug; use std::{sync::Arc, time::Duration}; use tokio::{net::TcpStream, sync::Notify}; +use tokio_util::sync::PollSender; mod inbound; mod outbound; diff --git a/sdk/rust/nym-sdk/examples/parallel_sending_and_receiving.rs b/sdk/rust/nym-sdk/examples/parallel_sending_and_receiving.rs index b42ad5ef048..38f7c526e6d 100644 --- a/sdk/rust/nym-sdk/examples/parallel_sending_and_receiving.rs +++ b/sdk/rust/nym-sdk/examples/parallel_sending_and_receiving.rs @@ -16,7 +16,7 @@ async fn main() { let our_address = *client.nym_address(); println!("Our client nym address is: {our_address}"); - let sender = client.split_sender(); + let mut sender = client.split_sender(); // receiving task let receiving_task_handle = tokio::spawn(async move { diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index 15c7717b8fd..bdad52e6ad0 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -386,7 +386,7 @@ impl MixnetMessageSender for MixnetClient { self.packet_type } - async fn send(&self, message: InputMessage) -> Result<()> { + async fn send(&mut self, message: InputMessage) -> Result<()> { self.client_input .send(message) .await @@ -400,7 +400,7 @@ impl MixnetMessageSender for MixnetClientSender { self.packet_type } - async fn send(&self, message: InputMessage) -> Result<()> { + async fn send(&mut self, message: InputMessage) -> Result<()> { self.client_input .send(message) .await diff --git a/sdk/rust/nym-sdk/src/mixnet/traits.rs b/sdk/rust/nym-sdk/src/mixnet/traits.rs index 8eb78109f7a..a20a7cb9969 100644 --- a/sdk/rust/nym-sdk/src/mixnet/traits.rs +++ b/sdk/rust/nym-sdk/src/mixnet/traits.rs @@ -18,7 +18,7 @@ pub trait MixnetMessageSender { /// Sends a [`InputMessage`] to the mixnet. This is the most low-level sending function, for /// full customization. - async fn send(&self, message: InputMessage) -> Result<()>; + async fn send(&mut self, message: InputMessage) -> Result<()>; /// Sends data to the supplied Nym address with the default surb behaviour. /// @@ -35,7 +35,7 @@ pub trait MixnetMessageSender { /// client.send_plain_message(recipient, "hi").await.unwrap(); /// } /// ``` - async fn send_plain_message(&self, address: Recipient, message: M) -> Result<()> + async fn send_plain_message(&mut self, address: Recipient, message: M) -> Result<()> where M: AsRef<[u8]> + Send, { @@ -61,7 +61,7 @@ pub trait MixnetMessageSender { /// } /// ``` async fn send_message( - &self, + &mut self, address: Recipient, message: M, surbs: IncludedSurbs, @@ -103,7 +103,7 @@ pub trait MixnetMessageSender { /// client.send_reply(tag, b"hi").await.unwrap(); /// } /// ``` - async fn send_reply(&self, recipient_tag: AnonymousSenderTag, message: M) -> Result<()> + async fn send_reply(&mut self, recipient_tag: AnonymousSenderTag, message: M) -> Result<()> where M: AsRef<[u8]> + Send, { diff --git a/service-providers/network-requester/src/core.rs b/service-providers/network-requester/src/core.rs index 2e81fab6f61..fc0b1e082a9 100644 --- a/service-providers/network-requester/src/core.rs +++ b/service-providers/network-requester/src/core.rs @@ -341,7 +341,7 @@ impl NRServiceProvider { /// Listens for any messages from `mix_reader` that should be written back to the mix network /// via the `websocket_writer`. async fn mixnet_response_listener( - mixnet_client_sender: nym_sdk::mixnet::MixnetClientSender, + mut mixnet_client_sender: nym_sdk::mixnet::MixnetClientSender, mut mix_input_reader: MixProxyReader, packet_type: PacketType, ) { From a4653654a22d1f9c2230f5034d7c3547d1a13986 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 18 Jun 2025 16:59:55 +0200 Subject: [PATCH 006/139] minor changes with new files / fixes --- Cargo.lock | 648 +++++++++++++----- .../client-core/src/client/base_client/mod.rs | 2 +- .../src/client/statistics_control.rs | 2 +- sdk/rust/nym-sdk/src/mixnet/sink.rs | 2 +- .../nym-sdk/src/tcp_proxy/tcp_proxy_client.rs | 2 +- 5 files changed, 480 insertions(+), 176 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c3d0e2a0645..a2dce073d17 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "accessory" @@ -11,7 +11,7 @@ dependencies = [ "macroific", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -393,7 +393,7 @@ dependencies = [ "rustc-hash", "serde", "serde_derive", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -472,7 +472,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -483,7 +483,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -637,7 +637,7 @@ checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -791,11 +791,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]] @@ -896,7 +896,7 @@ dependencies = [ [[package]] name = "bls12_381" version = "0.8.0" -source = "git+https://github.com/jstuczyn/bls12_381?branch=temp/experimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" +source = "git+https://github.com/jstuczyn/bls12_381?branch=temp%2Fexperimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" dependencies = [ "digest 0.10.7", "ff", @@ -1169,9 +1169,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.49" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" dependencies = [ "clap_builder", "clap_derive", @@ -1179,9 +1179,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.49" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" dependencies = [ "anstream", "anstyle", @@ -1217,7 +1217,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1488,7 +1488,7 @@ checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1512,7 +1512,7 @@ checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1681,7 +1681,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crossterm_winapi", "document-features", "parking_lot", @@ -1757,26 +1757,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] @@ -1861,7 +1861,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1992,14 +1992,38 @@ dependencies = [ "serde", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.107", ] [[package]] @@ -2013,7 +2037,18 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.107", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.107", ] [[package]] @@ -2022,9 +2057,9 @@ version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2077,7 +2112,7 @@ dependencies = [ "macroific", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2120,7 +2155,38 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.107", ] [[package]] @@ -2149,7 +2215,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "unicode-xid", ] @@ -2161,7 +2227,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "unicode-xid", ] @@ -2203,23 +2269,23 @@ dependencies = [ [[package]] name = "dirs" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -2230,7 +2296,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2292,7 +2358,7 @@ version = "0.1.0" dependencies = [ "cosmwasm-std", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2386,16 +2452,15 @@ dependencies = [ [[package]] name = "ed25519-zebra" -version = "4.0.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +checksum = "0017d969298eec91e3db7a2985a8cab4df6341d86e6f3a6f5878b13fb7846bc9" dependencies = [ "curve25519-dalek", "ed25519", - "hashbrown 0.14.5", - "hex", "rand_core 0.6.4", "sha2 0.10.9", + "subtle 2.6.1", "zeroize", ] @@ -2454,7 +2519,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2584,7 +2649,7 @@ dependencies = [ "macroific", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2820,7 +2885,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -3016,7 +3081,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.4", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -3035,7 +3100,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.4", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -3087,10 +3152,6 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] [[package]] name = "hashbrown" @@ -3212,7 +3273,7 @@ dependencies = [ "once_cell", "rand 0.9.2", "ring", - "rustls 0.23.32", + "rustls 0.23.33", "thiserror 2.0.17", "tinyvec", "tokio", @@ -3237,7 +3298,7 @@ dependencies = [ "parking_lot", "rand 0.9.2", "resolv-conf", - "rustls 0.23.32", + "rustls 0.23.33", "smallvec", "thiserror 2.0.17", "tokio", @@ -3496,7 +3557,7 @@ dependencies = [ "http 1.3.1", "hyper 1.7.0", "hyper-util", - "rustls 0.23.32", + "rustls 0.23.33", "rustls-pki-types", "tokio", "tokio-rustls 0.26.4", @@ -3686,7 +3747,7 @@ checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -3755,7 +3816,7 @@ dependencies = [ "macroific", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -3771,9 +3832,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", @@ -3995,7 +4056,7 @@ checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4148,7 +4209,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "redox_syscall", ] @@ -4253,7 +4314,7 @@ dependencies = [ "proc-macro2", "quote", "sealed", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4265,7 +4326,7 @@ dependencies = [ "proc-macro2", "quote", "sealed", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4278,7 +4339,7 @@ dependencies = [ "macroific_core", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4306,7 +4367,7 @@ checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4405,13 +4466,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", "wasi", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4546,7 +4607,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" dependencies = [ "anyhow", - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "libc", "log", @@ -4610,7 +4671,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "libc", ] @@ -4621,7 +4682,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", @@ -4634,6 +4695,12 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + [[package]] name = "nom" version = "7.1.3" @@ -4780,7 +4847,7 @@ dependencies = [ [[package]] name = "nym-api" -version = "1.1.67" +version = "1.1.68" dependencies = [ "anyhow", "async-trait", @@ -4994,7 +5061,7 @@ dependencies = [ "tracing-subscriber", "tracing-tree", "utoipa", - "vergen", + "vergen 8.3.1", ] [[package]] @@ -5006,7 +5073,7 @@ dependencies = [ [[package]] name = "nym-cli" -version = "1.1.64" +version = "1.1.65" dependencies = [ "anyhow", "base64 0.22.1", @@ -5089,7 +5156,7 @@ dependencies = [ [[package]] name = "nym-client" -version = "1.1.64" +version = "1.1.65" dependencies = [ "bs58", "clap", @@ -5175,6 +5242,7 @@ dependencies = [ "tokio-stream", "tokio-tungstenite", "tokio-util", + "tokio_with_wasm", "tracing", "tungstenite 0.20.1", "url", @@ -5243,21 +5311,26 @@ version = "1.4.0-rc.0" dependencies = [ "anyhow", "futures", + "gloo-timers", "js-sys", "nym-bin-common", + "nym-gateway-requests", "nym-node-tester-utils", "nym-node-tester-wasm", + "once_cell", "rand 0.8.5", "serde", "serde-wasm-bindgen 0.6.5", "serde_json", "thiserror 2.0.17", + "tokio_with_wasm", "tsify", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test", "wasm-client-core", "wasm-utils", + "web-sys", ] [[package]] @@ -5282,6 +5355,14 @@ dependencies = [ "nym-multisig-contract-common", ] +[[package]] +name = "nym-common" +version = "1.18.0" +dependencies = [ + "tracing", + "tracing-test", +] + [[package]] name = "nym-compact-ecash" version = "0.1.0" @@ -5320,6 +5401,24 @@ dependencies = [ "url", ] +[[package]] +name = "nym-connection-monitor" +version = "1.18.0" +dependencies = [ + "bincode", + "bytes", + "futures", + "nym-common", + "nym-config", + "nym-ip-packet-requests", + "nym-sdk", + "pnet_packet", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "nym-contracts-common" version = "0.5.0" @@ -5334,7 +5433,7 @@ dependencies = [ "serde_json", "thiserror 2.0.17", "utoipa", - "vergen", + "vergen 8.3.1", ] [[package]] @@ -5387,8 +5486,11 @@ dependencies = [ "nym-crypto", "nym-ecash-contract-common", "nym-ecash-signer-check", + "nym-http-api-client", "nym-http-api-common", "nym-network-defaults", + "nym-pemstore", + "nym-upgrade-mode-check", "nym-validator-client", "rand 0.8.5", "reqwest 0.12.24", @@ -5459,10 +5561,12 @@ dependencies = [ "nym-http-api-client", "nym-http-api-common", "nym-serde-helpers", + "nym-upgrade-mode-check", "reqwest 0.12.24", "schemars 0.8.22", "serde", "serde_json", + "serde_with", "time", "tsify", "utoipa", @@ -5585,6 +5689,7 @@ dependencies = [ "aead", "aes", "aes-gcm-siv", + "anyhow", "base64 0.22.1", "blake3", "bs58", @@ -5598,10 +5703,12 @@ dependencies = [ "jwt-simple", "nym-pemstore", "nym-sphinx-types", + "nym-test-utils", "rand 0.8.5", "rand_chacha 0.3.1", "serde", "serde_bytes", + "serde_json", "sha2 0.10.9", "subtle-encoding", "thiserror 2.0.17", @@ -5619,7 +5726,6 @@ dependencies = [ "criterion", "ff", "group", - "lazy_static", "nym-contracts-common", "nym-pemstore", "rand 0.8.5", @@ -5808,6 +5914,51 @@ dependencies = [ "zeroize", ] +[[package]] +name = "nym-gateway-probe" +version = "1.18.0" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bincode", + "bs58", + "bytes", + "clap", + "futures", + "hex", + "nym-authenticator-client", + "nym-authenticator-requests", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-client-core", + "nym-config", + "nym-connection-monitor", + "nym-credential-utils", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-http-api-client", + "nym-http-api-client-macro", + "nym-ip-packet-client", + "nym-ip-packet-requests", + "nym-node-status-client", + "nym-sdk", + "nym-topology", + "nym-validator-client", + "pnet_packet", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "tracing-subscriber", + "url", + "vergen-gitcl", + "x25519-dalek", +] + [[package]] name = "nym-gateway-requests" version = "0.1.0" @@ -5943,7 +6094,7 @@ dependencies = [ "proc-macro2", "quote", "reqwest 0.12.24", - "syn 2.0.106", + "syn 2.0.107", "uuid", ] @@ -6234,7 +6385,7 @@ dependencies = [ [[package]] name = "nym-network-requester" -version = "1.1.65" +version = "1.1.66" dependencies = [ "addr", "anyhow", @@ -6285,7 +6436,7 @@ dependencies = [ [[package]] name = "nym-node" -version = "1.19.0" +version = "1.20.0" dependencies = [ "anyhow", "arc-swap", @@ -6427,7 +6578,7 @@ dependencies = [ [[package]] name = "nym-node-status-api" -version = "4.0.5" +version = "4.0.11-rc1" dependencies = [ "ammonia", "anyhow", @@ -6666,6 +6817,7 @@ dependencies = [ name = "nym-registration-client" version = "0.1.0" dependencies = [ + "futures", "nym-authenticator-client", "nym-bandwidth-controller", "nym-credential-storage", @@ -6678,6 +6830,7 @@ dependencies = [ "tokio", "tokio-util", "tracing", + "typed-builder", "url", ] @@ -6810,7 +6963,7 @@ dependencies = [ [[package]] name = "nym-socks5-client" -version = "1.1.64" +version = "1.1.65" dependencies = [ "bs58", "clap", @@ -6997,6 +7150,7 @@ dependencies = [ "serde", "thiserror 2.0.17", "utoipa", + "wasmtimer", ] [[package]] @@ -7260,12 +7414,14 @@ dependencies = [ "jwt-simple", "nym-crypto", "nym-http-api-client", + "nym-test-utils", "reqwest 0.12.24", "serde", "serde_json", "thiserror 2.0.17", "time", "tracing", + "utoipa", ] [[package]] @@ -7552,7 +7708,7 @@ dependencies = [ [[package]] name = "nymvisor" -version = "0.1.29" +version = "0.1.30" dependencies = [ "anyhow", "bytes", @@ -7642,7 +7798,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", ] [[package]] @@ -7697,9 +7853,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", @@ -7980,7 +8136,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -8000,7 +8156,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.11.4", + "indexmap 2.12.0", ] [[package]] @@ -8053,7 +8209,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -8091,7 +8247,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -8167,6 +8323,48 @@ dependencies = [ "plotters-backend", ] +[[package]] +name = "pnet_base" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" +dependencies = [ + "no-std-net", +] + +[[package]] +name = "pnet_macros" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.107", +] + +[[package]] +name = "pnet_macros_support" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" +dependencies = [ + "pnet_base", +] + +[[package]] +name = "pnet_packet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" +dependencies = [ + "glob", + "pnet_base", + "pnet_macros", + "pnet_macros_support", +] + [[package]] name = "polling" version = "2.8.0" @@ -8327,7 +8525,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -8383,7 +8581,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -8417,9 +8615,9 @@ dependencies = [ [[package]] name = "psl" -version = "2.1.150" +version = "2.1.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c569a9577fe28cc82ac9969ec31778511f1912b3468fe236c24393bebf8a571" +checksum = "6fd2e88c2c28854abe53489ce679f9dad712e2ac01a342dbeccae851cf0654d9" dependencies = [ "psl-types", ] @@ -8458,7 +8656,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.32", + "rustls 0.23.33", "socket2 0.6.1", "thiserror 2.0.17", "tokio", @@ -8478,7 +8676,7 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash", - "rustls 0.23.32", + "rustls 0.23.33", "rustls-pki-types", "slab", "thiserror 2.0.17", @@ -8617,18 +8815,18 @@ 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_users" -version = "0.4.6" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 1.0.69", + "thiserror 2.0.17", ] [[package]] @@ -8648,7 +8846,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -8743,7 +8941,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.32", + "rustls 0.23.33", "rustls-pki-types", "serde", "serde_json", @@ -8865,9 +9063,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.7.2" +version = "8.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" +checksum = "fb44e1917075637ee8c7bcb865cf8830e3a92b5b1189e44e3a0ab5a0d5be314b" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -8876,22 +9074,22 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.7.2" +version = "8.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" +checksum = "382499b49db77a7c19abd2a574f85ada7e9dbe125d5d1160fa5cad7c4cf71fc9" dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.106", + "syn 2.0.107", "walkdir", ] [[package]] name = "rust-embed-utils" -version = "8.7.2" +version = "8.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" +checksum = "21fcbee55c2458836bcdbfffb6ec9ba74bbc23ca7aa6816015a3dd2c4d8fc185" dependencies = [ "sha2 0.10.9", "walkdir", @@ -8943,7 +9141,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys", @@ -8978,9 +9176,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.32" +version = "0.23.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c" dependencies = [ "log", "once_cell", @@ -9153,7 +9351,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.29.1", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9179,7 +9377,7 @@ checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9200,7 +9398,7 @@ checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9242,7 +9440,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", "core-foundation-sys", "libc", @@ -9352,7 +9550,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9363,7 +9561,7 @@ checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9374,7 +9572,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9437,7 +9635,7 @@ checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9468,7 +9666,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9502,7 +9700,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.4", + "indexmap 2.12.0", "schemars 0.9.0", "schemars 1.0.4", "serde_core", @@ -9517,10 +9715,10 @@ version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9529,7 +9727,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "itoa", "ryu", "serde", @@ -9837,12 +10035,12 @@ dependencies = [ "futures-util", "hashbrown 0.15.5", "hashlink", - "indexmap 2.11.4", + "indexmap 2.12.0", "log", "memchr", "once_cell", "percent-encoding", - "rustls 0.23.32", + "rustls 0.23.33", "serde", "serde_json", "sha2 0.10.9", @@ -9866,7 +10064,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -9889,7 +10087,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.106", + "syn 2.0.107", "tokio", "url", ] @@ -9902,7 +10100,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "bytes", "chrono", @@ -9959,7 +10157,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "chrono", "crc", @@ -10098,7 +10296,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -10154,9 +10352,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" dependencies = [ "proc-macro2", "quote", @@ -10186,7 +10384,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -10383,7 +10581,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -10463,7 +10661,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -10474,7 +10672,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -10585,7 +10783,7 @@ checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ "bytes", "libc", - "mio 1.0.4", + "mio 1.1.0", "parking_lot", "pin-project-lite", "signal-hook-registry", @@ -10603,7 +10801,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -10659,7 +10857,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.32", + "rustls 0.23.33", "tokio", ] @@ -10730,6 +10928,30 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio_with_wasm" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dfba9b946459940fb564dcf576631074cdfb0bfe4c962acd4c31f0dca7897e6" +dependencies = [ + "js-sys", + "tokio", + "tokio_with_wasm_proc", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "tokio_with_wasm_proc" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e04c1865c281139e5ccf633cb9f76ffdaabeebfe53b703984cf82878e2aabb" +dependencies = [ + "quote", + "syn 2.0.107", +] + [[package]] name = "toml" version = "0.5.11" @@ -10775,7 +10997,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "serde", "serde_spanned", "toml_datetime 0.6.11", @@ -10789,7 +11011,7 @@ version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "toml_datetime 0.7.3", "toml_parser", "winnow", @@ -10883,7 +11105,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "async-compression", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "futures-core", "futures-util", @@ -10909,7 +11131,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "futures-util", "http 1.3.1", @@ -10953,7 +11175,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -11042,6 +11264,27 @@ dependencies = [ "tracing-log 0.2.0", ] +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote", + "syn 2.0.107", +] + [[package]] name = "tracing-tree" version = "0.2.5" @@ -11123,7 +11366,7 @@ checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "termcolor", ] @@ -11150,7 +11393,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.28.0", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -11195,6 +11438,26 @@ dependencies = [ "utf-8", ] +[[package]] +name = "typed-builder" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0dd654273fc253fde1df4172c31fb6615cf8b041d3a4008a028ef8b1119e66" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c26257f448222014296978b2c8456e2cad4de308c35bdb1e383acd569ef5b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + [[package]] name = "typenum" version = "1.19.0" @@ -11221,9 +11484,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-normalization" @@ -11295,7 +11558,7 @@ dependencies = [ "glob", "goblin", "heck 0.5.0", - "indexmap 2.11.4", + "indexmap 2.12.0", "once_cell", "serde", "tempfile", @@ -11337,10 +11600,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f4f224becf14885c10e6e400b95cc4d1985738140cb194ccc2044563f8a56b" dependencies = [ "anyhow", - "indexmap 2.11.4", + "indexmap 2.12.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -11355,7 +11618,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.106", + "syn 2.0.107", "toml 0.5.11", "uniffi_meta", ] @@ -11380,7 +11643,7 @@ checksum = "4b147e133ad7824e32426b90bc41fda584363563f2ba747f590eca1fd6fd14e6" dependencies = [ "anyhow", "heck 0.5.0", - "indexmap 2.11.4", + "indexmap 2.12.0", "tempfile", "uniffi_internal_macros", ] @@ -11467,7 +11730,7 @@ version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "serde", "serde_json", "utoipa-gen", @@ -11482,7 +11745,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.106", + "syn 2.0.107", "uuid", ] @@ -11521,7 +11784,7 @@ checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -11532,7 +11795,7 @@ checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "utoipauto-core", ] @@ -11594,6 +11857,47 @@ dependencies = [ "time", ] +[[package]] +name = "vergen" +version = "9.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b2bf58be11fc9414104c6d3a2e464163db5ef74b12296bda593cac37b6e4777" +dependencies = [ + "anyhow", + "cargo_metadata 0.19.2", + "derive_builder", + "regex", + "rustc_version 0.4.1", + "rustversion", + "time", + "vergen-lib", +] + +[[package]] +name = "vergen-gitcl" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9dfc1de6eb2e08a4ddf152f1b179529638bedc0ea95e6d667c014506377aefe" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", + "time", + "vergen 9.0.6", + "vergen-lib", +] + +[[package]] +name = "vergen-lib" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", +] + [[package]] name = "version_check" version = "0.9.5" @@ -11711,7 +12015,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "wasm-bindgen-shared", ] @@ -11746,7 +12050,7 @@ checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -11781,7 +12085,7 @@ checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -12066,7 +12370,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -12077,7 +12381,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -12532,7 +12836,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "synstructure", ] @@ -12553,7 +12857,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -12573,7 +12877,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "synstructure", ] @@ -12594,7 +12898,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -12627,7 +12931,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -12641,7 +12945,7 @@ dependencies = [ "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.11.4", + "indexmap 2.12.0", "memchr", "thiserror 2.0.17", "zopfli", diff --git a/common/client-core/src/client/base_client/mod.rs b/common/client-core/src/client/base_client/mod.rs index 7edc42b7768..40601df018c 100644 --- a/common/client-core/src/client/base_client/mod.rs +++ b/common/client-core/src/client/base_client/mod.rs @@ -1014,7 +1014,7 @@ where &self.config, self.user_agent.clone(), generate_client_stats_id(*self_address.identity()), - input_sender.clone(), + tokio_util::sync::PollSender::new(input_sender.clone()), &shutdown_tracker.clone(), ); diff --git a/common/client-core/src/client/statistics_control.rs b/common/client-core/src/client/statistics_control.rs index dcfbd2e19c5..fd3d8a48ecd 100644 --- a/common/client-core/src/client/statistics_control.rs +++ b/common/client-core/src/client/statistics_control.rs @@ -17,7 +17,7 @@ #![warn(clippy::dbg_macro)] use crate::client::inbound_messages::{InputMessage, InputMessageSender}; -use futures::StreamExt; +use futures::{SinkExt, StreamExt}; use nym_client_core_config_types::StatsReporting; use nym_sphinx::addressing::Recipient; use nym_statistics_common::clients::{ diff --git a/sdk/rust/nym-sdk/src/mixnet/sink.rs b/sdk/rust/nym-sdk/src/mixnet/sink.rs index a3b8fd8adab..b6f865f7f56 100644 --- a/sdk/rust/nym-sdk/src/mixnet/sink.rs +++ b/sdk/rust/nym-sdk/src/mixnet/sink.rs @@ -175,7 +175,7 @@ where } fn start_sender_task( - mixnet_client_sender: Sender, + mut mixnet_client_sender: Sender, ) -> (mpsc::Sender, JoinHandle<()>) where Sender: MixnetMessageSender + Send + 'static, diff --git a/sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_client.rs b/sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_client.rs index f00a5b30c14..4721f4e4cdc 100644 --- a/sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_client.rs +++ b/sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_client.rs @@ -161,7 +161,7 @@ impl NymProxyClient { let codec = BytesCodec::new(); let mut framed_read = FramedRead::new(read, codec); // Much like the tcpstream, split our Nym client into a sender and receiver for concurrent read/write - let sender = client.split_sender(); + let mut sender = client.split_sender(); // The server / service provider address our client is sending messages to will remain static let server_addr = server_address; // Store outgoing messages in instance of Dashset abstraction From 614886617235d839cc47a0bf165949849b6f3829 Mon Sep 17 00:00:00 2001 From: Drazen Date: Wed, 12 Jun 2024 23:08:34 +0200 Subject: [PATCH 007/139] InputMessageCodec, Serde for MixPacket --- Cargo.lock | 5 +- common/client-core/Cargo.toml | 5 +- .../src/client/inbound_messages.rs | 51 ++++++++++++++++++- .../anonymous-replies/src/requests/mod.rs | 3 +- common/nymsphinx/forwarding/Cargo.toml | 1 + common/nymsphinx/forwarding/src/packet.rs | 42 +++++++++++++++ common/task/Cargo.toml | 3 +- common/task/src/connections.rs | 8 ++- sdk/rust/nym-sdk/Cargo.toml | 5 +- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 35 ++++++++++++- 10 files changed, 146 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a2dce073d17..7bb9027f83b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5196,7 +5196,8 @@ name = "nym-client-core" version = "1.1.15" dependencies = [ "async-trait", - "base64 0.22.1", + "base64 0.21.7", + "bincode", "bs58", "cfg-if", "clap", @@ -7178,6 +7179,7 @@ dependencies = [ "nym-sphinx-anonymous-replies", "nym-sphinx-params", "nym-sphinx-types", + "serde", "thiserror 2.0.17", ] @@ -7305,6 +7307,7 @@ dependencies = [ "futures", "log", "nym-test-utils", + "serde", "thiserror 2.0.17", "tokio", "tokio-util", diff --git a/common/client-core/Cargo.toml b/common/client-core/Cargo.toml index aa99967918d..ea711ae5711 100644 --- a/common/client-core/Cargo.toml +++ b/common/client-core/Cargo.toml @@ -10,7 +10,8 @@ license.workspace = true [dependencies] async-trait = { workspace = true } -base64 = { workspace = true } +bincode = { workspace = true } +base64 = "0.21.2" bs58 = { workspace = true } clap = { workspace = true, optional = true } cfg-if = { workspace = true } @@ -25,7 +26,7 @@ sha2 = { workspace = true } si-scale = { workspace = true } thiserror = { workspace = true } url = { workspace = true, features = ["serde"] } -tokio-util = { workspace = true } +tokio-util = { workspace = true, features = ["codec"] } time = { workspace = true } tokio = { workspace = true, features = ["sync", "macros"] } tracing = { workspace = true } diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index 16b63981cae..384aa771339 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -1,16 +1,20 @@ +use hyper::body::Buf; // Copyright 2020-2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 - use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; use nym_sphinx::forwarding::packet::MixPacket; use nym_sphinx::params::PacketType; use nym_task::connections::TransmissionLane; +use serde::{Deserialize, Serialize}; +use tokio_util::{bytes::BytesMut, codec::{Decoder, Encoder}}; + +use crate::error::ClientCoreError; pub type InputMessageSender = tokio_util::sync::PollSender; pub type InputMessageReceiver = tokio::sync::mpsc::Receiver; -#[derive(Debug)] +#[derive(Serialize, Deserialize, Debug)] pub enum InputMessage { /// Fire an already prepared mix packets into the network. /// No guarantees are made about it. For example no retransmssion @@ -186,3 +190,46 @@ impl InputMessage { self } } + + +// TODO: Tests +pub struct InputMessageCodec; + +impl Encoder for InputMessageCodec { + type Error = ClientCoreError; + + fn encode(&mut self, item: InputMessage, buf: &mut BytesMut) -> Result<(), Self::Error> { + let encoded = bincode::serialize(&item).expect("failed to serialize InputMessage"); + let encoded_len = encoded.len() as u32; + let mut encoded_with_len = encoded_len.to_le_bytes().to_vec(); + encoded_with_len.extend(encoded); + buf.reserve(encoded_with_len.len()); + buf.extend_from_slice(&encoded_with_len); + Ok(()) + } +} + +impl Decoder for InputMessageCodec { + type Item = InputMessage; + type Error = ClientCoreError; + + fn decode(&mut self, buf: &mut BytesMut) -> Result, Self::Error> { + if buf.len() < 4 { + return Ok(None); + } + + let len = u32::from_le_bytes([buf[0], buf[1], buf[2], buf[3]]) as usize; + if buf.len() < len + 4 { + return Ok(None); + } + + let decoded = match bincode::deserialize(&buf[4..len]) { + Ok(decoded) => decoded, + Err(_) => return Ok(None) + }; + + buf.advance(len + 4); + + Ok(Some(decoded)) + } +} diff --git a/common/nymsphinx/anonymous-replies/src/requests/mod.rs b/common/nymsphinx/anonymous-replies/src/requests/mod.rs index ecb2fc7ac50..b6916a20e8b 100644 --- a/common/nymsphinx/anonymous-replies/src/requests/mod.rs +++ b/common/nymsphinx/anonymous-replies/src/requests/mod.rs @@ -7,6 +7,7 @@ use crate::{ReplySurbError, ReplySurbWithKeyRotation}; use nym_sphinx_addressing::clients::{Recipient, RecipientFormattingError}; use nym_sphinx_params::key_rotation::InvalidSphinxKeyRotation; use rand::{CryptoRng, RngCore}; +use serde::{Deserialize, Serialize}; use std::fmt::{Display, Formatter}; use std::mem; use thiserror::Error; @@ -30,7 +31,7 @@ pub enum InvalidAnonymousSenderTagRepresentation { InvalidLength { received: usize, expected: usize }, } -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen)] pub struct AnonymousSenderTag([u8; SENDER_TAG_SIZE]); diff --git a/common/nymsphinx/forwarding/Cargo.toml b/common/nymsphinx/forwarding/Cargo.toml index c8beb33b12f..b2b25bab0c2 100644 --- a/common/nymsphinx/forwarding/Cargo.toml +++ b/common/nymsphinx/forwarding/Cargo.toml @@ -13,3 +13,4 @@ nym-sphinx-params = { path = "../params" } nym-sphinx-types = { path = "../types", features = ["sphinx", "outfox"] } nym-sphinx-anonymous-replies = { path = "../anonymous-replies" } thiserror = { workspace = true } +serde = { workspace = true } \ No newline at end of file diff --git a/common/nymsphinx/forwarding/src/packet.rs b/common/nymsphinx/forwarding/src/packet.rs index 9fb9f3a9155..038c2112533 100644 --- a/common/nymsphinx/forwarding/src/packet.rs +++ b/common/nymsphinx/forwarding/src/packet.rs @@ -4,6 +4,10 @@ use nym_sphinx_addressing::nodes::{NymNodeRoutingAddress, NymNodeRoutingAddressError}; use nym_sphinx_params::{PacketSize, PacketType, SphinxKeyRotation}; use nym_sphinx_types::{NymPacket, NymPacketError}; +use serde::{ + de::{self, Visitor}, + Deserialize, Deserializer, Serialize, Serializer, +}; use nym_sphinx_anonymous_replies::reply_surb::AppliedReplySurb; use nym_sphinx_params::key_rotation::InvalidSphinxKeyRotation; @@ -181,6 +185,44 @@ impl MixPacket { .chain(self.packet.to_bytes()?) .collect()) } + + /* + * ======= + pub fn to_bytes(&self) -> Result, MixPacketFormattingError> { + Ok(std::iter::once(self.packet_type as u8) + >>>>>>> 1926e2950 (InputMessageCodec, Serde for MixPacket) + .chain(self.next_hop.as_bytes()) + .chain(self.packet.to_bytes()?) + .collect()) + */ +} + +// MAX TODO implement for v1 as well for back compat - this was added in the original asyncread/write work when we only had one v +impl Serialize for MixPacket { + fn serialize(&self, serializer: S) -> Result { + serializer.serialize_bytes(&self.into_v2_bytes().map_err(serde::ser::Error::custom)?) + // serializer.serialize_bytes(&self.to_bytes().map_err(serde::ser::Error::custom)?) + } +} + +struct MixPacketVisitor; + +impl<'de> Visitor<'de> for MixPacketVisitor { + type Value = MixPacket; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a byte array representing a mix packet") + } + + fn visit_bytes(self, v: &[u8]) -> Result { + MixPacket::try_from_v2_bytes(v).map_err(serde::de::Error::custom) + } +} + +impl<'de> Deserialize<'de> for MixPacket { + fn deserialize>(deserializer: D) -> Result { + deserializer.deserialize_bytes(MixPacketVisitor) + } } // TODO: test for serialization and errors! diff --git a/common/task/Cargo.toml b/common/task/Cargo.toml index d96fcbe0686..dd163d65a20 100644 --- a/common/task/Cargo.toml +++ b/common/task/Cargo.toml @@ -15,6 +15,7 @@ thiserror = { workspace = true } tokio = { workspace = true, features = ["macros", "sync"] } tokio-util = { workspace = true, features = ["rt"] } tracing = { workspace = true } +serde = { workspace = true } [target."cfg(not(target_arch = \"wasm32\"))".dependencies.tokio] workspace = true @@ -39,4 +40,4 @@ tokio = { workspace = true, features = ["rt-multi-thread", "net", "signal", "tes nym-test-utils = { path = "../test-utils" } [lints] -workspace = true \ No newline at end of file +workspace = true diff --git a/common/task/src/connections.rs b/common/task/src/connections.rs index b0e8fc6ecca..0bc1921438f 100644 --- a/common/task/src/connections.rs +++ b/common/task/src/connections.rs @@ -2,13 +2,17 @@ // SPDX-License-Identifier: Apache-2.0 use futures::channel::mpsc; -use std::collections::HashMap; +use serde::{Deserialize, Serialize}; +use std::{ + collections::HashMap, + time::{Duration, Instant}, +}; // const LANE_CONSIDERED_CLEAR: usize = 10; pub type ConnectionId = u64; -#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)] +#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)] pub enum TransmissionLane { General, // we need to treat surb-related requests and responses at higher priority diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index 523e5801c52..4984f35886d 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -15,13 +15,14 @@ name = "nym-proxy-client" path = "src/tcp_proxy/bin/proxy_client.rs" [dependencies] -async-trait = { workspace = true } -bip39 = { workspace = true } nym-client-core = { path = "../../../common/client-core", features = [ "fs-credentials-storage", "fs-surb-storage", "fs-gateways-storage", ] } +async-trait = { workspace = true } +bip39 = { workspace = true } + nym-crypto = { path = "../../../common/crypto" } nym-gateway-requests = { path = "../../../common/gateway-requests" } nym-bandwidth-controller = { path = "../../../common/bandwidth-controller" } diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index bdad52e6ad0..e84c1d9b25d 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -2,7 +2,7 @@ use crate::mixnet::client::MixnetClientBuilder; use crate::mixnet::traits::MixnetMessageSender; use crate::{Error, Result}; use async_trait::async_trait; -use futures::{ready, AsyncRead, Stream, StreamExt}; +use futures::{ready, AsyncRead, Sink, SinkExt, Stream, StreamExt}; use log::{debug, error}; use nym_client_core::client::base_client::GatewayConnection; use nym_client_core::client::mix_traffic::ClientRequestSender; @@ -348,6 +348,39 @@ impl AsyncRead for MixnetClient { } } +impl Sink for MixnetClient { + type Error = Error; + + fn poll_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match self.client_input.input_sender.poll_ready_unpin(cx) { + Poll::Ready(Ok(())) => Poll::Ready(Ok(())), + Poll::Ready(Err(_)) => Poll::Ready(Err(Error::MessageSendingFailure)), + Poll::Pending => Poll::Pending, + } + } + + fn start_send(mut self: Pin<&mut Self>, item: InputMessage) -> Result<()> { + self.client_input + .input_sender + .start_send_unpin(item) + .map_err(|_| Error::MessageSendingFailure) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + self.client_input + .input_sender + .poll_flush_unpin(cx) + .map_err(|_| Error::MessageSendingFailure) + } + + fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + self.client_input + .input_sender + .poll_close_unpin(cx) + .map_err(|_| Error::MessageSendingFailure) + } +} + impl Stream for MixnetClient { type Item = ReconstructedMessage; From 266942ae797cb9f35876da1e7eaed46499a247a3 Mon Sep 17 00:00:00 2001 From: durch Date: Thu, 13 Jun 2024 09:04:39 +0200 Subject: [PATCH 008/139] ReconstructedMessageCodec --- Cargo.lock | 1 + common/nymsphinx/Cargo.toml | 1 + common/nymsphinx/src/receiver.rs | 52 +++++++++++++++++++++++++++++++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 7bb9027f83b..f155696d073 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7084,6 +7084,7 @@ dependencies = [ "serde", "thiserror 2.0.17", "tokio", + "tokio-util", "tracing", ] diff --git a/common/nymsphinx/Cargo.toml b/common/nymsphinx/Cargo.toml index 815a034d7ac..5c9dae785ad 100644 --- a/common/nymsphinx/Cargo.toml +++ b/common/nymsphinx/Cargo.toml @@ -16,6 +16,7 @@ thiserror = { workspace = true } serde = { workspace = true, features = ["derive"] } bincode = { workspace = true } log = { workspace = true } +tokio-util = { workspace = true, features = ["codec"] } nym-sphinx-acknowledgements = { path = "acknowledgements" } nym-sphinx-addressing = { path = "addressing" } diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index eb83ec43ea0..ddd584109b3 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -1,6 +1,8 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +use std::io; + use crate::message::{NymMessage, NymMessageError, PaddedMessage, PlainMessage}; use nym_crypto::aes::cipher::{KeyIvInit, StreamCipher}; use nym_crypto::asymmetric::x25519; @@ -15,10 +17,13 @@ use nym_sphinx_chunking::reconstruction::MessageReconstructor; use nym_sphinx_params::{ PacketEncryptionAlgorithm, PacketHkdfAlgorithm, ReplySurbEncryptionAlgorithm, }; +use serde::{Deserialize, Serialize}; use thiserror::Error; +use tokio_util::bytes::{Buf, BytesMut}; +use tokio_util::codec::{Decoder, Encoder}; // TODO: should this live in this file? -#[derive(Debug)] +#[derive(Debug, Serialize, Deserialize)] pub struct ReconstructedMessage { /// The actual plaintext message that was received. pub message: Vec, @@ -56,6 +61,48 @@ impl From for ReconstructedMessage { } } +pub struct ReconstructedMessageCodec; + +impl Encoder for ReconstructedMessageCodec { + type Error = MessageRecoveryError; + + fn encode(&mut self, item: ReconstructedMessage, buf: &mut BytesMut) -> Result<(), Self::Error> { + let encoded = bincode::serialize(&item).expect("failed to serialize ReconstructedMessage"); + let encoded_len = encoded.len() as u32; + let mut encoded_with_len = encoded_len.to_le_bytes().to_vec(); + encoded_with_len.extend(encoded); + buf.reserve(encoded_with_len.len()); + buf.extend_from_slice(&encoded_with_len); + Ok(()) + } +} + +impl Decoder for ReconstructedMessageCodec { + type Item = ReconstructedMessage; + type Error = MessageRecoveryError; + + fn decode(&mut self, buf: &mut BytesMut) -> Result, Self::Error> { + if buf.len() < 4 { + return Ok(None); + } + + let len = u32::from_le_bytes([buf[0], buf[1], buf[2], buf[3]]) as usize; + if buf.len() < len + 4 { + return Ok(None); + } + + let decoded = match bincode::deserialize(&buf[4..len]) { + Ok(decoded) => decoded, + Err(_) => return Ok(None) + }; + + buf.advance(len + 4); + + Ok(Some(decoded)) + } +} + + #[derive(Debug, Error)] pub enum MessageRecoveryError { #[error( @@ -75,6 +122,9 @@ pub enum MessageRecoveryError { #[error("Failed to recover message fragment - {0}")] FragmentRecoveryError(#[from] ChunkingError), + + #[error("Failed to recover message fragment - {0}")] + MessageRecoveryError(#[from] io::Error), } pub trait MessageReceiver { From a449a7457d4c28dacad9cb9cfeb2af76fdb6326e Mon Sep 17 00:00:00 2001 From: durch Date: Thu, 13 Jun 2024 13:29:10 +0200 Subject: [PATCH 009/139] Use tokio AsyncRead --- Cargo.lock | 1 + .../client-core/src/client/base_client/mod.rs | 5 +- common/nymsphinx/anonymous-replies/Cargo.toml | 1 + common/nymsphinx/forwarding/src/packet.rs | 3 +- .../proxy-helpers/src/proxy_runner/mod.rs | 2 +- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 59 ++++++++++++++----- 6 files changed, 52 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f155696d073..cba59cf03d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7132,6 +7132,7 @@ dependencies = [ "nym-topology", "rand 0.8.5", "rand_chacha 0.3.1", + "serde", "thiserror 2.0.17", "tracing", "wasm-bindgen", diff --git a/common/client-core/src/client/base_client/mod.rs b/common/client-core/src/client/base_client/mod.rs index 40601df018c..6f1c5dcef7a 100644 --- a/common/client-core/src/client/base_client/mod.rs +++ b/common/client-core/src/client/base_client/mod.rs @@ -37,7 +37,7 @@ use crate::init::{ }; use futures::channel::mpsc; use futures::SinkExt; -use log::*; +// use log::*; use nym_bandwidth_controller::BandwidthController; use nym_client_core_config_types::{ForgetMe, RememberMe}; use nym_client_core_gateways_storage::{GatewayDetails, GatewaysDetailsStore}; @@ -70,7 +70,8 @@ use std::sync::Arc; use time::OffsetDateTime; use tokio::sync::mpsc::Sender; use tokio_util::sync::{PollSendError, PollSender}; -use tracing::*; +// use tracing::*; +use tracing::{debug, error, info}; use url::Url; #[cfg(target_arch = "wasm32")] diff --git a/common/nymsphinx/anonymous-replies/Cargo.toml b/common/nymsphinx/anonymous-replies/Cargo.toml index ef9c74b73da..278dbc60104 100644 --- a/common/nymsphinx/anonymous-replies/Cargo.toml +++ b/common/nymsphinx/anonymous-replies/Cargo.toml @@ -12,6 +12,7 @@ rand = { workspace = true } bs58 = { workspace = true } thiserror = { workspace = true } tracing = { workspace = true } +serde = { workspace = true } nym-crypto = { path = "../../crypto", features = ["stream_cipher", "rand"] } nym-sphinx-addressing = { path = "../addressing" } diff --git a/common/nymsphinx/forwarding/src/packet.rs b/common/nymsphinx/forwarding/src/packet.rs index 038c2112533..7bc83d91a6e 100644 --- a/common/nymsphinx/forwarding/src/packet.rs +++ b/common/nymsphinx/forwarding/src/packet.rs @@ -8,6 +8,7 @@ use serde::{ de::{self, Visitor}, Deserialize, Deserializer, Serialize, Serializer, }; +use std::fmt; use nym_sphinx_anonymous_replies::reply_surb::AppliedReplySurb; use nym_sphinx_params::key_rotation::InvalidSphinxKeyRotation; @@ -178,7 +179,7 @@ impl MixPacket { }) } - pub fn into_v2_bytes(self) -> Result, MixPacketFormattingError> { + pub fn into_v2_bytes(&self) -> Result, MixPacketFormattingError> { Ok(std::iter::once(self.packet_type as u8) .chain(std::iter::once(self.key_rotation as u8)) .chain(self.next_hop.as_bytes()) diff --git a/common/socks5/proxy-helpers/src/proxy_runner/mod.rs b/common/socks5/proxy-helpers/src/proxy_runner/mod.rs index 0da23c5c5ab..6da9fcd4664 100644 --- a/common/socks5/proxy-helpers/src/proxy_runner/mod.rs +++ b/common/socks5/proxy-helpers/src/proxy_runner/mod.rs @@ -5,7 +5,7 @@ use crate::connection_controller::ConnectionReceiver; use crate::ordered_sender::OrderedMessageSender; use nym_socks5_requests::{ConnectionId, SocketData}; use nym_task::connections::LaneQueueLengths; -<<<<<<< HEAD +use nym_task::ShutdownTracker; use std::fmt::Debug; use std::{sync::Arc, time::Duration}; use tokio::{net::TcpStream, sync::Notify}; diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index e84c1d9b25d..5f37033cfdc 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -2,6 +2,8 @@ use crate::mixnet::client::MixnetClientBuilder; use crate::mixnet::traits::MixnetMessageSender; use crate::{Error, Result}; use async_trait::async_trait; +use bytecodec::io::WriteBuf; +use bytes::{Buf as _, BytesMut}; use futures::{ready, AsyncRead, Sink, SinkExt, Stream, StreamExt}; use log::{debug, error}; use nym_client_core::client::base_client::GatewayConnection; @@ -15,6 +17,7 @@ use nym_client_core::config::{ForgetMe, RememberMe}; use nym_crypto::asymmetric::ed25519; use nym_gateway_requests::ClientRequest; use nym_sphinx::addressing::clients::Recipient; +use nym_sphinx::receiver::ReconstructedMessageCodec; use nym_sphinx::{params::PacketType, receiver::ReconstructedMessage}; use nym_statistics_common::clients::{ClientStatsEvents, ClientStatsSender}; use nym_task::connections::{ConnectionCommandSender, LaneQueueLengths}; @@ -23,7 +26,9 @@ use nym_topology::{NymRouteProvider, NymTopology}; use std::pin::Pin; use std::sync::Arc; use std::task::{Context, Poll}; +use tokio::io::{AsyncRead, ReadBuf}; use tokio::sync::RwLockReadGuard; +use tokio_util::codec::{Encoder, FramedWrite}; use tokio_util::sync::CancellationToken; /// Client connected to the Nym mixnet. @@ -67,7 +72,7 @@ pub struct MixnetClient { #[derive(Debug, Default)] struct ReadBuffer { - buffer: Vec, + buffer: BytesMut, } impl ReadBuffer { @@ -299,23 +304,41 @@ impl MixnetClient { } } } + // fn read_buffer_to_slice( + // &mut self, + // buf: &mut [u8], + // cx: &mut Context<'_>, + // ) -> Poll> { + // if self._read.buffer.len() < buf.len() { + // let written = self._read.buffer.len(); + // buf[..written].copy_from_slice(&self._read.buffer); + // self._read.clear(); + // Poll::Ready(Ok(written)) + // } else { + // let written = buf.len(); + // buf.copy_from_slice(&self._read.buffer[..written]); + // self._read.buffer = self._read.buffer[written..].to_vec(); + // cx.waker().wake_by_ref(); + // Poll::Ready(Ok(written)) + // } + // } fn read_buffer_to_slice( &mut self, - buf: &mut [u8], + buf: &mut ReadBuf, cx: &mut Context<'_>, - ) -> Poll> { - if self._read.buffer.len() < buf.len() { - let written = self._read.buffer.len(); - buf[..written].copy_from_slice(&self._read.buffer); + ) -> Poll> { + if self._read.buffer.len() < buf.capacity() { + // let written = self._read.buffer.len(); + buf.put_slice(&self._read.buffer); self._read.clear(); - Poll::Ready(Ok(written)) + Poll::Ready(Ok(())) } else { - let written = buf.len(); - buf.copy_from_slice(&self._read.buffer[..written]); - self._read.buffer = self._read.buffer[written..].to_vec(); + let written = buf.capacity(); + buf.put_slice(&self._read.buffer[..written]); + self._read.buffer.advance(written); cx.waker().wake_by_ref(); - Poll::Ready(Ok(written)) + Poll::Ready(Ok(())) } } } @@ -330,19 +353,25 @@ impl AsyncRead for MixnetClient { fn poll_read( mut self: Pin<&mut Self>, cx: &mut Context<'_>, - buf: &mut [u8], - ) -> Poll> { + buf: &mut ReadBuf, + ) -> Poll> { + let mut codec = ReconstructedMessageCodec {}; + if self._read.pending() { return self.read_buffer_to_slice(buf, cx); } let msg = match self.as_mut().poll_next(cx) { Poll::Ready(Some(msg)) => msg, - Poll::Ready(None) => return Poll::Ready(Ok(0)), + Poll::Ready(None) => return Poll::Ready(Ok(())), Poll::Pending => return Poll::Pending, }; - self._read.buffer = msg.message; + // let mut buffer = BytesMut::new(); + + codec.encode(msg, &mut self._read.buffer).unwrap(); + + // = buffer.to_vec(); self.read_buffer_to_slice(buf, cx) } From de2f26c732fb596ec192c818d3b182c1977b9ea0 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 18 Jun 2025 17:49:19 +0200 Subject: [PATCH 010/139] remove double asyncwrite --- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index 5f37033cfdc..2d66d6d6f64 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -4,7 +4,7 @@ use crate::{Error, Result}; use async_trait::async_trait; use bytecodec::io::WriteBuf; use bytes::{Buf as _, BytesMut}; -use futures::{ready, AsyncRead, Sink, SinkExt, Stream, StreamExt}; +use futures::{ready, Sink, SinkExt, Stream, StreamExt}; use log::{debug, error}; use nym_client_core::client::base_client::GatewayConnection; use nym_client_core::client::mix_traffic::ClientRequestSender; From 4b16e7a97170fe53bfff803d4cfcabd2723c1c0f Mon Sep 17 00:00:00 2001 From: durch Date: Thu, 13 Jun 2024 17:33:03 +0200 Subject: [PATCH 011/139] AsyncWrite --- .../src/client/inbound_messages.rs | 17 +- common/nymsphinx/src/receiver.rs | 35 +++- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 155 ++++++++++++++++-- sdk/rust/nym-sdk/src/mixnet/traits.rs | 2 + .../network-requester/src/core.rs | 2 +- 5 files changed, 189 insertions(+), 22 deletions(-) diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index 384aa771339..a859f7aa3bd 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -7,7 +7,10 @@ use nym_sphinx::forwarding::packet::MixPacket; use nym_sphinx::params::PacketType; use nym_task::connections::TransmissionLane; use serde::{Deserialize, Serialize}; -use tokio_util::{bytes::BytesMut, codec::{Decoder, Encoder}}; +use tokio_util::{ + bytes::BytesMut, + codec::{Decoder, Encoder}, +}; use crate::error::ClientCoreError; @@ -69,6 +72,10 @@ pub enum InputMessage { } impl InputMessage { + pub fn simple(data: &[u8], recipient: Recipient) -> Self { + InputMessage::new_regular(recipient, data.to_vec(), TransmissionLane::General, None) + } + pub fn new_premade( msgs: Vec, lane: TransmissionLane, @@ -191,6 +198,10 @@ impl InputMessage { } } + pub fn serialized_size(&self) -> u64 { + bincode::serialized_size(self).expect("failed to get serialized InputMessage size") + 4 + } +} // TODO: Tests pub struct InputMessageCodec; @@ -223,9 +234,9 @@ impl Decoder for InputMessageCodec { return Ok(None); } - let decoded = match bincode::deserialize(&buf[4..len]) { + let decoded = match bincode::deserialize(&buf[4..len + 4]) { Ok(decoded) => decoded, - Err(_) => return Ok(None) + Err(_) => return Ok(None), }; buf.advance(len + 4); diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index ddd584109b3..2aa7c6f7b94 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -62,11 +62,16 @@ impl From for ReconstructedMessage { } pub struct ReconstructedMessageCodec; +const OFFSET: usize = 4; impl Encoder for ReconstructedMessageCodec { type Error = MessageRecoveryError; - fn encode(&mut self, item: ReconstructedMessage, buf: &mut BytesMut) -> Result<(), Self::Error> { + fn encode( + &mut self, + item: ReconstructedMessage, + buf: &mut BytesMut, + ) -> Result<(), Self::Error> { let encoded = bincode::serialize(&item).expect("failed to serialize ReconstructedMessage"); let encoded_len = encoded.len() as u32; let mut encoded_with_len = encoded_len.to_le_bytes().to_vec(); @@ -82,18 +87,33 @@ impl Decoder for ReconstructedMessageCodec { type Error = MessageRecoveryError; fn decode(&mut self, buf: &mut BytesMut) -> Result, Self::Error> { - if buf.len() < 4 { + println!("decoder called with buf: {:?}", buf.to_vec()); + if buf.len() < OFFSET { return Ok(None); } - let len = u32::from_le_bytes([buf[0], buf[1], buf[2], buf[3]]) as usize; - if buf.len() < len + 4 { + let len = u32::from_le_bytes( + buf[0..OFFSET] + .try_into() + .expect("We know that we have at least OFFSET bytes in there"), + ) as usize; + + println!("len to decode {}", len); + println!("buf len {}", buf.len()); + + if buf.len() < len + OFFSET { return Ok(None); } - let decoded = match bincode::deserialize(&buf[4..len]) { - Ok(decoded) => decoded, - Err(_) => return Ok(None) + let decoded = match bincode::deserialize(&buf[OFFSET..len + OFFSET]) { + Ok(decoded) => { + println!("decoded: {:?}", decoded); + decoded + } + Err(e) => { + println!("error: {:?}", e); + return Ok(None); + } }; buf.advance(len + 4); @@ -102,7 +122,6 @@ impl Decoder for ReconstructedMessageCodec { } } - #[derive(Debug, Error)] pub enum MessageRecoveryError { #[error( diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index 2d66d6d6f64..ae9ea76e924 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -2,12 +2,11 @@ use crate::mixnet::client::MixnetClientBuilder; use crate::mixnet::traits::MixnetMessageSender; use crate::{Error, Result}; use async_trait::async_trait; -use bytecodec::io::WriteBuf; use bytes::{Buf as _, BytesMut}; -use futures::{ready, Sink, SinkExt, Stream, StreamExt}; +use futures::{ready, FutureExt, Sink, SinkExt, Stream, StreamExt}; use log::{debug, error}; use nym_client_core::client::base_client::GatewayConnection; -use nym_client_core::client::mix_traffic::ClientRequestSender; +use nym_client_core::client::inbound_messages::InputMessageCodec; use nym_client_core::client::{ base_client::{ClientInput, ClientOutput, ClientState}, inbound_messages::InputMessage, @@ -377,11 +376,61 @@ impl AsyncRead for MixnetClient { } } +impl AsyncWrite for MixnetClient { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + let codec = InputMessageCodec {}; + let mut reader = FramedRead::new(buf, codec); + let mut fut = reader.next(); + let msg = match fut.poll_unpin(cx) { + Poll::Ready(Some(Ok(msg))) => msg, + Poll::Ready(Some(Err(_))) => { + return Poll::Ready(Err(std::io::Error::new( + std::io::ErrorKind::Other, + "failed to read message from input", + ))) + } + Poll::Pending => return Poll::Pending, + Poll::Ready(None) => return Poll::Ready(Ok(0)), + }; + + let msg_size = msg.serialized_size(); + + let mut fut = pin!(self.client_input.send(msg)); + match fut.poll_unpin(cx) { + Poll::Ready(Ok(())) => Poll::Ready(Ok(msg_size as usize)), + Poll::Ready(Err(_)) => Poll::Ready(Err(std::io::Error::new( + std::io::ErrorKind::Other, + "failed to send message to mixnet", + ))), + Poll::Pending => Poll::Pending, + } + } + + fn poll_flush( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + ) -> Poll> { + Sink::poll_flush(self, cx) + .map_err(|_| std::io::Error::new(std::io::ErrorKind::Other, "failed to flush the sink")) + } + + fn poll_shutdown( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + ) -> Poll> { + AsyncWrite::poll_flush(self, cx) + } +} + impl Sink for MixnetClient { type Error = Error; fn poll_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - match self.client_input.input_sender.poll_ready_unpin(cx) { + match self.sender().poll_ready_unpin(cx) { Poll::Ready(Ok(())) => Poll::Ready(Ok(())), Poll::Ready(Err(_)) => Poll::Ready(Err(Error::MessageSendingFailure)), Poll::Pending => Poll::Pending, @@ -389,22 +438,100 @@ impl Sink for MixnetClient { } fn start_send(mut self: Pin<&mut Self>, item: InputMessage) -> Result<()> { - self.client_input - .input_sender + self.sender() .start_send_unpin(item) .map_err(|_| Error::MessageSendingFailure) } fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - self.client_input - .input_sender + self.sender() .poll_flush_unpin(cx) .map_err(|_| Error::MessageSendingFailure) } fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - self.client_input - .input_sender + self.sender() + .poll_close_unpin(cx) + .map_err(|_| Error::MessageSendingFailure) + } +} + +// TODO: there should be a better way of implementing Sink and AsyncWrite over T: MixnetMessageSender +impl AsyncWrite for MixnetClientSender { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + let codec = InputMessageCodec {}; + let mut reader = FramedRead::new(buf, codec); + let mut fut = reader.next(); + let msg = match fut.poll_unpin(cx) { + Poll::Ready(Some(Ok(msg))) => msg, + Poll::Ready(Some(Err(_))) => { + return Poll::Ready(Err(std::io::Error::new( + std::io::ErrorKind::Other, + "failed to read message from input", + ))) + } + Poll::Pending => return Poll::Pending, + Poll::Ready(None) => return Poll::Ready(Ok(0)), + }; + + let msg_size = msg.serialized_size(); + + let mut fut = pin!(self.client_input.send(msg)); + match fut.poll_unpin(cx) { + Poll::Ready(Ok(())) => Poll::Ready(Ok(msg_size as usize)), + Poll::Ready(Err(_)) => Poll::Ready(Err(std::io::Error::new( + std::io::ErrorKind::Other, + "failed to send message to mixnet", + ))), + Poll::Pending => Poll::Pending, + } + } + + fn poll_flush( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + ) -> Poll> { + Sink::poll_flush(self, cx) + .map_err(|_| std::io::Error::new(std::io::ErrorKind::Other, "failed to flush the sink")) + } + + fn poll_shutdown( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + ) -> Poll> { + AsyncWrite::poll_flush(self, cx) + } +} + +impl Sink for MixnetClientSender { + type Error = Error; + + fn poll_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match self.sender().poll_ready_unpin(cx) { + Poll::Ready(Ok(())) => Poll::Ready(Ok(())), + Poll::Ready(Err(_)) => Poll::Ready(Err(Error::MessageSendingFailure)), + Poll::Pending => Poll::Pending, + } + } + + fn start_send(mut self: Pin<&mut Self>, item: InputMessage) -> Result<()> { + self.sender() + .start_send_unpin(item) + .map_err(|_| Error::MessageSendingFailure) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + self.sender() + .poll_flush_unpin(cx) + .map_err(|_| Error::MessageSendingFailure) + } + + fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + self.sender() .poll_close_unpin(cx) .map_err(|_| Error::MessageSendingFailure) } @@ -454,6 +581,10 @@ impl MixnetMessageSender for MixnetClient { .await .map_err(|_| Error::MessageSendingFailure) } + + fn sender(&mut self) -> &mut tokio_util::sync::PollSender { + &mut self.client_input.input_sender + } } #[async_trait] @@ -468,4 +599,8 @@ impl MixnetMessageSender for MixnetClientSender { .await .map_err(|_| Error::MessageSendingFailure) } + + fn sender(&mut self) -> &mut tokio_util::sync::PollSender { + &mut self.client_input.input_sender + } } diff --git a/sdk/rust/nym-sdk/src/mixnet/traits.rs b/sdk/rust/nym-sdk/src/mixnet/traits.rs index a20a7cb9969..d8649dfa7b2 100644 --- a/sdk/rust/nym-sdk/src/mixnet/traits.rs +++ b/sdk/rust/nym-sdk/src/mixnet/traits.rs @@ -16,6 +16,8 @@ pub trait MixnetMessageSender { None } + fn sender(&mut self) -> &mut tokio_util::sync::PollSender; + /// Sends a [`InputMessage`] to the mixnet. This is the most low-level sending function, for /// full customization. async fn send(&mut self, message: InputMessage) -> Result<()>; diff --git a/service-providers/network-requester/src/core.rs b/service-providers/network-requester/src/core.rs index fc0b1e082a9..9810f995e6f 100644 --- a/service-providers/network-requester/src/core.rs +++ b/service-providers/network-requester/src/core.rs @@ -350,7 +350,7 @@ impl NRServiceProvider { socks5_msg = mix_input_reader.recv() => { if let Some(msg) = socks5_msg { let response_message = msg.into_input_message(packet_type); - mixnet_client_sender.send(response_message).await.unwrap(); + nym_sdk::mixnet::MixnetMessageSender::send(&mut mixnet_client_sender, response_message).await.unwrap(); } else { log::error!("Exiting: channel closed!"); break; From 316f4b5c4549a5df8c0da9c461ab08ef3e59e113 Mon Sep 17 00:00:00 2001 From: durch Date: Fri, 14 Jun 2024 11:23:36 +0200 Subject: [PATCH 012/139] WASM changes --- Cargo.lock | 1 + common/client-core/src/client/inbound_messages.rs | 2 +- common/socks5/proxy-helpers/src/ordered_sender.rs | 4 ++-- wasm/client/Cargo.toml | 1 + wasm/client/src/client.rs | 5 +++-- wasm/client/src/helpers.rs | 6 +++++- wasm/mix-fetch/src/client.rs | 11 +++++++++-- 7 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cba59cf03d0..f0f2c68eaa6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5324,6 +5324,7 @@ dependencies = [ "serde-wasm-bindgen 0.6.5", "serde_json", "thiserror 2.0.17", + "tokio", "tokio_with_wasm", "tsify", "wasm-bindgen", diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index a859f7aa3bd..9ea8f270fe5 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -1,4 +1,3 @@ -use hyper::body::Buf; // Copyright 2020-2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 use nym_sphinx::addressing::clients::Recipient; @@ -8,6 +7,7 @@ use nym_sphinx::params::PacketType; use nym_task::connections::TransmissionLane; use serde::{Deserialize, Serialize}; use tokio_util::{ + bytes::Buf, bytes::BytesMut, codec::{Decoder, Encoder}, }; diff --git a/common/socks5/proxy-helpers/src/ordered_sender.rs b/common/socks5/proxy-helpers/src/ordered_sender.rs index 02c465037bd..de30293eb04 100644 --- a/common/socks5/proxy-helpers/src/ordered_sender.rs +++ b/common/socks5/proxy-helpers/src/ordered_sender.rs @@ -8,7 +8,7 @@ use log::{debug, error}; use nym_socks5_requests::{ConnectionId, SocketData}; use std::io; -pub(crate) struct OrderedMessageSender { +pub(crate) struct OrderedMessageSender { connection_id: ConnectionId, // addresses are provided for better logging local_destination_address: String, @@ -19,7 +19,7 @@ pub(crate) struct OrderedMessageSender { mix_message_adapter: F, } -impl OrderedMessageSender +impl OrderedMessageSender where F: Fn(SocketData) -> S, { diff --git a/wasm/client/Cargo.toml b/wasm/client/Cargo.toml index 4b5d7d19e90..66d19dc2878 100644 --- a/wasm/client/Cargo.toml +++ b/wasm/client/Cargo.toml @@ -31,6 +31,7 @@ once_cell = { workspace = true } thiserror = { workspace = true } tsify = { workspace = true, features = ["js"] } web-sys = { workspace = true } +tokio = { workspace = true, default-features = false, features = ["sync"] } nym-bin-common = { path = "../../common/bin-common" } wasm-client-core = { path = "../../common/wasm/client-core" } diff --git a/wasm/client/src/client.rs b/wasm/client/src/client.rs index 8c006b7f09f..b6eff7af179 100644 --- a/wasm/client/src/client.rs +++ b/wasm/client/src/client.rs @@ -17,6 +17,7 @@ use nym_gateway_requests::ClientRequest; use serde::{Deserialize, Serialize}; use std::sync::Arc; use tokio_with_wasm::sync::mpsc; +use tokio::sync::RwLock; use tsify::Tsify; use wasm_bindgen::prelude::*; use wasm_bindgen_futures::future_to_promise; @@ -54,7 +55,7 @@ pub type ClientRequestSender = mpsc::Sender; #[wasm_bindgen] pub struct NymClient { self_address: String, - client_input: Arc, + client_input: Arc>, client_state: Arc, // keep track of the "old" topology for the purposes of node tester @@ -253,7 +254,7 @@ impl NymClientBuilder { Ok(NymClient { self_address, - client_input: Arc::new(client_input), + client_input: Arc::new(RwLock::new(client_input)), client_state: Arc::new(started_client.client_state), _full_topology: None, _task_manager: started_client.shutdown_handle, diff --git a/wasm/client/src/helpers.rs b/wasm/client/src/helpers.rs index b6cdba3d33c..20b786f4795 100644 --- a/wasm/client/src/helpers.rs +++ b/wasm/client/src/helpers.rs @@ -1,8 +1,10 @@ // Copyright 2022-2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +use futures::SinkExt; use js_sys::Promise; use std::sync::Arc; +use tokio::sync::RwLock; use wasm_bindgen::JsValue; use wasm_bindgen_futures::future_to_promise; use wasm_client_core::client::base_client::{ClientInput, ClientState}; @@ -48,10 +50,11 @@ pub(crate) trait InputSender { fn send_messages(&self, messages: Vec) -> Promise; } -impl InputSender for Arc { +impl InputSender for Arc> { fn send_message(&self, message: InputMessage) -> Promise { let this = Arc::clone(self); future_to_promise(async move { + let mut this = this.write().await; match this.input_sender.send(message).await { Ok(_) => Ok(JsValue::null()), Err(_) => Err(simple_js_error( @@ -64,6 +67,7 @@ impl InputSender for Arc { fn send_messages(&self, messages: Vec) -> Promise { let this = Arc::clone(self); future_to_promise(async move { + let mut this = this.write().await; for message in messages { if this.input_sender.send(message).await.is_err() { return Err(simple_js_error( diff --git a/wasm/mix-fetch/src/client.rs b/wasm/mix-fetch/src/client.rs index 736c82c4139..60a51f03c6c 100644 --- a/wasm/mix-fetch/src/client.rs +++ b/wasm/mix-fetch/src/client.rs @@ -8,11 +8,14 @@ use crate::go_bridge::goWasmSetMixFetchRequestTimeout; use crate::request_writer::RequestWriter; use crate::socks_helpers::{socks5_connect_request, socks5_data_request}; use crate::{config, RequestId}; +use futures::SinkExt; use js_sys::Promise; use nym_bin_common::bin_info; use nym_socks5_requests::RemoteAddress; use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::Arc; use tokio::sync::Mutex; +use tokio::sync::RwLock; use wasm_bindgen::prelude::*; use wasm_bindgen_futures::future_to_promise; use wasm_client_core::client::base_client::storage::GatewaysDetailsStore; @@ -36,7 +39,7 @@ pub struct MixFetchClient { self_address: Recipient, - client_input: ClientInput, + client_input: Arc>, requests: ActiveRequests, @@ -185,7 +188,7 @@ impl MixFetchClientBuilder { invalidated: AtomicBool::new(false), mix_fetch_config: self.config.mix_fetch, self_address, - client_input, + client_input: Arc::new(RwLock::new(client_input)), requests: active_requests, _shutdown_manager: Mutex::new(started_client.shutdown_handle), }) @@ -261,6 +264,8 @@ impl MixFetchClient { // the expect here is fine as it implies an unrecoverable failure since one of the client core // tasks has terminated self.client_input + .write() + .await .input_sender .send(input) .await @@ -288,6 +293,8 @@ impl MixFetchClient { // the expect here is fine as it implies an unrecoverable failure since one of the client core // tasks has terminated self.client_input + .write() + .await .input_sender .send(input) .await From 7b582d6b6aa32b39f4751aa80f09c27170ce52bc Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 18 Jun 2025 18:27:09 +0200 Subject: [PATCH 013/139] tweaks to tcpproxy example --- common/client-core/src/client/inbound_messages.rs | 1 - sdk/rust/nym-sdk/src/mixnet/native_client.rs | 7 ++++--- sdk/rust/nym-sdk/src/tcp_proxy.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index 9ea8f270fe5..4fd7ad134b0 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -196,7 +196,6 @@ impl InputMessage { self.set_max_retransmissions(max_retransmissions); self } -} pub fn serialized_size(&self) -> u64 { bincode::serialized_size(self).expect("failed to get serialized InputMessage size") + 4 diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index ae9ea76e924..8e92595007d 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -7,6 +7,7 @@ use futures::{ready, FutureExt, Sink, SinkExt, Stream, StreamExt}; use log::{debug, error}; use nym_client_core::client::base_client::GatewayConnection; use nym_client_core::client::inbound_messages::InputMessageCodec; +use nym_client_core::client::mix_traffic::ClientRequestSender; use nym_client_core::client::{ base_client::{ClientInput, ClientOutput, ClientState}, inbound_messages::InputMessage, @@ -22,13 +23,13 @@ use nym_statistics_common::clients::{ClientStatsEvents, ClientStatsSender}; use nym_task::connections::{ConnectionCommandSender, LaneQueueLengths}; use nym_task::ShutdownTracker; use nym_topology::{NymRouteProvider, NymTopology}; -use std::pin::Pin; +use std::pin::{pin, Pin}; use std::sync::Arc; use std::task::{Context, Poll}; -use tokio::io::{AsyncRead, ReadBuf}; +use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::sync::RwLockReadGuard; -use tokio_util::codec::{Encoder, FramedWrite}; use tokio_util::sync::CancellationToken; +use tokio_util::codec::{Encoder, FramedRead, FramedWrite}; /// Client connected to the Nym mixnet. pub struct MixnetClient { diff --git a/sdk/rust/nym-sdk/src/tcp_proxy.rs b/sdk/rust/nym-sdk/src/tcp_proxy.rs index a622e3f6cf1..ddc843adaee 100644 --- a/sdk/rust/nym-sdk/src/tcp_proxy.rs +++ b/sdk/rust/nym-sdk/src/tcp_proxy.rs @@ -163,7 +163,7 @@ //! let codec = BytesCodec::new(); //! let mut framed_read = FramedRead::new(read, codec); //! // Much like the tcpstream, split our Nym client into a sender and receiver for concurrent read/write -//! let sender = client.split_sender(); +//! let mut sender = client.split_sender(); //! // The server / service provider address our client is sending messages to will remain static //! let server_addr = server_address; //! // Store outgoing messages in instance of Dashset abstraction From 32270d26dac2a717ba87ff5528efbf852bfd9d33 Mon Sep 17 00:00:00 2001 From: durch Date: Tue, 18 Jun 2024 11:58:03 +0200 Subject: [PATCH 014/139] Update IPR sig --- .../authenticator/mixnet_listener.rs | 2 +- service-providers/ip-packet-router/src/mixnet_listener.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gateway/src/node/internal_service_providers/authenticator/mixnet_listener.rs b/gateway/src/node/internal_service_providers/authenticator/mixnet_listener.rs index c05d9d8cd6f..de341a1c1cc 100644 --- a/gateway/src/node/internal_service_providers/authenticator/mixnet_listener.rs +++ b/gateway/src/node/internal_service_providers/authenticator/mixnet_listener.rs @@ -935,7 +935,7 @@ impl MixnetListener { // When an incoming mixnet message triggers a response that we send back. async fn handle_response( - &self, + &mut self, response: Vec, recipient: Option, sender_tag: Option, diff --git a/service-providers/ip-packet-router/src/mixnet_listener.rs b/service-providers/ip-packet-router/src/mixnet_listener.rs index c0f36927bcf..e9ee8087b3e 100644 --- a/service-providers/ip-packet-router/src/mixnet_listener.rs +++ b/service-providers/ip-packet-router/src/mixnet_listener.rs @@ -430,7 +430,7 @@ impl MixnetListener { // When an incoming mixnet message triggers a response that we send back, such as during // connect handshake. - async fn handle_response(&self, response: VersionedResponse) -> Result<()> { + async fn handle_response(&mut self, response: VersionedResponse) -> Result<()> { let send_to = response.reply_to.clone(); let response_bytes = response.try_into_bytes()?; let input_message = @@ -445,7 +445,7 @@ impl MixnetListener { // A single incoming request can trigger multiple responses, such as when data requests contain // multiple IP packets. - async fn handle_responses(&self, responses: Vec) { + async fn handle_responses(&mut self, responses: Vec) { for response in responses { match response { Ok(Some(response)) => { From 30511d21218a1845e1e64e6103b86d646eb7be09 Mon Sep 17 00:00:00 2001 From: durch Date: Tue, 18 Jun 2024 19:54:39 +0200 Subject: [PATCH 015/139] Cleanup prints --- common/nymsphinx/src/receiver.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index 2aa7c6f7b94..3d4b8eabce1 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -87,7 +87,6 @@ impl Decoder for ReconstructedMessageCodec { type Error = MessageRecoveryError; fn decode(&mut self, buf: &mut BytesMut) -> Result, Self::Error> { - println!("decoder called with buf: {:?}", buf.to_vec()); if buf.len() < OFFSET { return Ok(None); } @@ -98,20 +97,15 @@ impl Decoder for ReconstructedMessageCodec { .expect("We know that we have at least OFFSET bytes in there"), ) as usize; - println!("len to decode {}", len); - println!("buf len {}", buf.len()); - if buf.len() < len + OFFSET { return Ok(None); } let decoded = match bincode::deserialize(&buf[OFFSET..len + OFFSET]) { Ok(decoded) => { - println!("decoded: {:?}", decoded); decoded } Err(e) => { - println!("error: {:?}", e); return Ok(None); } }; From 167b7b2156248ece57fc5cf920b0d2ebffc13bd5 Mon Sep 17 00:00:00 2001 From: durch Date: Wed, 19 Jun 2024 13:09:34 +0200 Subject: [PATCH 016/139] Log decoding error --- common/nymsphinx/src/receiver.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index 3d4b8eabce1..3dd40f454cb 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -4,6 +4,7 @@ use std::io; use crate::message::{NymMessage, NymMessageError, PaddedMessage, PlainMessage}; +use log::debug; use nym_crypto::aes::cipher::{KeyIvInit, StreamCipher}; use nym_crypto::asymmetric::x25519; use nym_crypto::shared_key::recompute_shared_key; @@ -106,6 +107,7 @@ impl Decoder for ReconstructedMessageCodec { decoded } Err(e) => { + debug!("Failed to decode the message - {:?}", e); return Ok(None); } }; From f0d99a1513c02ec6556d41c4584345712ace0f63 Mon Sep 17 00:00:00 2001 From: durch Date: Wed, 19 Jun 2024 13:11:18 +0200 Subject: [PATCH 017/139] fmt --- common/nymsphinx/src/receiver.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index 3dd40f454cb..c637c16e731 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -103,9 +103,7 @@ impl Decoder for ReconstructedMessageCodec { } let decoded = match bincode::deserialize(&buf[OFFSET..len + OFFSET]) { - Ok(decoded) => { - decoded - } + Ok(decoded) => decoded, Err(e) => { debug!("Failed to decode the message - {:?}", e); return Ok(None); From 649022fb7a804bb39314a5d336d4b3255977b149 Mon Sep 17 00:00:00 2001 From: durch Date: Tue, 25 Jun 2024 15:01:18 +0200 Subject: [PATCH 018/139] Address part of PR comments --- .../src/client/inbound_messages.rs | 35 +++++++++++++++---- common/nymsphinx/src/receiver.rs | 16 +++++---- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 17 +++++---- 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index 4fd7ad134b0..66e0b49a865 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -6,6 +6,7 @@ use nym_sphinx::forwarding::packet::MixPacket; use nym_sphinx::params::PacketType; use nym_task::connections::TransmissionLane; use serde::{Deserialize, Serialize}; +use std::convert::TryInto; use tokio_util::{ bytes::Buf, bytes::BytesMut, @@ -17,6 +18,8 @@ use crate::error::ClientCoreError; pub type InputMessageSender = tokio_util::sync::PollSender; pub type InputMessageReceiver = tokio::sync::mpsc::Receiver; +const LENGHT_ENCODING_PREFIX_SIZE: usize = 4; + #[derive(Serialize, Deserialize, Debug)] pub enum InputMessage { /// Fire an already prepared mix packets into the network. @@ -198,11 +201,25 @@ impl InputMessage { } pub fn serialized_size(&self) -> u64 { - bincode::serialized_size(self).expect("failed to get serialized InputMessage size") + 4 + bincode::serialized_size(self).expect("failed to get serialized InputMessage size") + + LENGHT_ENCODING_PREFIX_SIZE as u64 } } // TODO: Tests +pub struct AdressedInputMessageCodec(pub Recipient); + +impl Encoder<&[u8]> for AdressedInputMessageCodec { + type Error = ClientCoreError; + + fn encode(&mut self, item: &[u8], buf: &mut BytesMut) -> Result<(), Self::Error> { + let mut codec = InputMessageCodec; + let input_message = InputMessage::simple(item, self.0.clone()); + codec.encode(input_message, buf)?; + Ok(()) + } +} + pub struct InputMessageCodec; impl Encoder for InputMessageCodec { @@ -224,21 +241,27 @@ impl Decoder for InputMessageCodec { type Error = ClientCoreError; fn decode(&mut self, buf: &mut BytesMut) -> Result, Self::Error> { - if buf.len() < 4 { + if buf.len() < LENGHT_ENCODING_PREFIX_SIZE { return Ok(None); } - let len = u32::from_le_bytes([buf[0], buf[1], buf[2], buf[3]]) as usize; - if buf.len() < len + 4 { + let len = u32::from_le_bytes( + buf[0..LENGHT_ENCODING_PREFIX_SIZE] + .try_into() + .expect("Could not coarce to array"), + ) as usize; + if buf.len() < len + LENGHT_ENCODING_PREFIX_SIZE { return Ok(None); } - let decoded = match bincode::deserialize(&buf[4..len + 4]) { + let decoded = match bincode::deserialize( + &buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE], + ) { Ok(decoded) => decoded, Err(_) => return Ok(None), }; - buf.advance(len + 4); + buf.advance(len + LENGHT_ENCODING_PREFIX_SIZE); Ok(Some(decoded)) } diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index c637c16e731..e10f8803a4d 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -63,7 +63,7 @@ impl From for ReconstructedMessage { } pub struct ReconstructedMessageCodec; -const OFFSET: usize = 4; +const LENGHT_ENCODING_PREFIX_SIZE: usize = 4; impl Encoder for ReconstructedMessageCodec { type Error = MessageRecoveryError; @@ -88,21 +88,23 @@ impl Decoder for ReconstructedMessageCodec { type Error = MessageRecoveryError; fn decode(&mut self, buf: &mut BytesMut) -> Result, Self::Error> { - if buf.len() < OFFSET { + if buf.len() < LENGHT_ENCODING_PREFIX_SIZE { return Ok(None); } let len = u32::from_le_bytes( - buf[0..OFFSET] + buf[0..LENGHT_ENCODING_PREFIX_SIZE] .try_into() - .expect("We know that we have at least OFFSET bytes in there"), + .expect("We know that we have at least LENGHT_ENCODING_PREFIX_SIZE bytes in there"), ) as usize; - if buf.len() < len + OFFSET { + if buf.len() < len + LENGHT_ENCODING_PREFIX_SIZE { return Ok(None); } - let decoded = match bincode::deserialize(&buf[OFFSET..len + OFFSET]) { + let decoded = match bincode::deserialize( + &buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE], + ) { Ok(decoded) => decoded, Err(e) => { debug!("Failed to decode the message - {:?}", e); @@ -110,7 +112,7 @@ impl Decoder for ReconstructedMessageCodec { } }; - buf.advance(len + 4); + buf.advance(len + LENGHT_ENCODING_PREFIX_SIZE); Ok(Some(decoded)) } diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index 8e92595007d..e9a9609edb9 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -335,7 +335,7 @@ impl MixnetClient { Poll::Ready(Ok(())) } else { let written = buf.capacity(); - buf.put_slice(&self._read.buffer[..written]); + buf.put_slice(&self._read.buffer.split_off(written)); self._read.buffer.advance(written); cx.waker().wake_by_ref(); Poll::Ready(Ok(())) @@ -367,11 +367,16 @@ impl AsyncRead for MixnetClient { Poll::Pending => return Poll::Pending, }; - // let mut buffer = BytesMut::new(); - - codec.encode(msg, &mut self._read.buffer).unwrap(); - - // = buffer.to_vec(); + match codec.encode(msg, &mut self._read.buffer) { + Ok(_) => {} + Err(e) => { + error!("failed to encode reconstructed message: {:?}", e); + return Poll::Ready(Err(tokio::io::Error::new( + tokio::io::ErrorKind::Other, + "failed to encode reconstructed message", + ))); + } + }; self.read_buffer_to_slice(buf, cx) } From 9d9c968fa68d8008e48bfb99260d56e3a5d8fdb7 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 17 Jun 2025 17:29:57 +0200 Subject: [PATCH 019/139] initial pass streamwrapper --- sdk/rust/nym-sdk/src/lib.rs | 1 + sdk/rust/nym-sdk/src/stream_wrapper.rs | 343 +++++++++++++++++++++++++ 2 files changed, 344 insertions(+) create mode 100644 sdk/rust/nym-sdk/src/stream_wrapper.rs diff --git a/sdk/rust/nym-sdk/src/lib.rs b/sdk/rust/nym-sdk/src/lib.rs index 8b5bb45568d..5536e9ccc1c 100644 --- a/sdk/rust/nym-sdk/src/lib.rs +++ b/sdk/rust/nym-sdk/src/lib.rs @@ -10,6 +10,7 @@ pub mod bandwidth; pub mod client_pool; pub mod mixnet; pub mod tcp_proxy; +pub mod stream_wrapper; pub use error::{Error, Result}; #[allow(deprecated)] diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs new file mode 100644 index 00000000000..f908959858a --- /dev/null +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -0,0 +1,343 @@ +use crate::mixnet::{InputMessage, MixnetClient, MixnetClientSender, Recipient}; +use crate::Error; +use futures::SinkExt; +use nym_sphinx::receiver::ReconstructedMessage; +use std::io; +use std::pin::Pin; +use std::sync::Arc; +use std::task::{Context, Poll}; +use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; +use tokio::sync::Mutex; +use tracing::field::debug; +use tracing::{debug, info, warn}; + +/** + * TODO + * - make bytes on the interface + * - codec + check what sort of backpressure freaks everything out + * - check tls works + * - https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates/nym-ip-packet-client/src - hook into IPR + */ + +/// Socket-like wrapper for reading and writing bytes over the Mixnet. +pub struct MixnetSocket { + inner: MixnetClient, +} + +impl MixnetSocket { + pub fn new(client: MixnetClient) -> Self { + Self { inner: client } + } + + pub async fn connect() -> Result { + let client = MixnetClient::connect_new().await?; + Ok(Self::new(client)) + } + + pub fn nym_address(&self) -> &Recipient { + self.inner.nym_address() + } + + pub fn get_ref(&self) -> &MixnetClient { + &self.inner + } + + pub fn get_mut(&mut self) -> &mut MixnetClient { + &mut self.inner + } + + pub fn into_inner(self) -> MixnetClient { + self.inner + } + + /// Split the socket into separate reader and writer halves - like TcpSockets. + /// Wrap in Arc> for concurrent read/write. + pub fn split(self) -> (MixnetSocketReader, MixnetSocketWriter) { + let client = Arc::new(Mutex::new(self.inner)); + let sender = { + let mut client_guard = client.try_lock().expect("Failed to lock client for split"); + client_guard.split_sender() + }; + ( + MixnetSocketReader { + client: Arc::clone(&client), + }, + MixnetSocketWriter { inner: sender }, + ) + } + + /// Disconnect from the Mixnet + pub async fn disconnect(self) { + debug!("Disconnecting"); + self.inner.disconnect().await; + debug!("Disconnected"); + } + + /// Wait for incoming messages from the Mixnet + /// Returns None if the connection is closed, otherwise returns Some(Vec) of messages. + pub async fn wait_for_messages(&mut self) -> Option> { + self.inner.wait_for_messages().await + } + + /// Process incoming messages with a callback function - basically just moved this fn up a level + pub async fn on_messages(&mut self, fun: F) + where + F: Fn(ReconstructedMessage), + { + self.inner.on_messages(fun).await + } + + // TODO change to bytes as input, remove the need for importing/knowing about InputMessage type & do conversion below this level + pub async fn send(&mut self, message: InputMessage) -> Result<(), Error> { + self.inner.send(message).await + } +} + +impl AsyncRead for MixnetSocket { + fn poll_read( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut ReadBuf<'_>, + ) -> Poll> { + Pin::new(&mut self.inner).poll_read(cx, buf) + } +} + +impl AsyncWrite for MixnetSocket { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + Pin::new(&mut self.inner).poll_write(cx, buf) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.inner).poll_flush(cx) + } + + fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.inner).poll_shutdown(cx) + } +} + +/// Read half of a split MixnetSocket +pub struct MixnetSocketReader { + client: Arc>, +} + +impl AsyncRead for MixnetSocketReader { + fn poll_read( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut ReadBuf<'_>, + ) -> Poll> { + match self.client.try_lock() { + Ok(mut client) => { + debug!("Got lock"); + Pin::new(&mut *client).poll_read(cx, buf) + } + Err(_) => { + warn!("Couldn't immediately get lock"); + // If we can't get the lock immediately, wake the task and return Pending + cx.waker().wake_by_ref(); + Poll::Pending + } + } + } +} + +impl MixnetSocketReader { + /// Wait for messages from Mixnet + /// Returns None if connection is closed. + pub async fn wait_for_messages(&self) -> Option> { + let mut client = self.client.lock().await; + client.wait_for_messages().await + } + + pub async fn on_messages(&self, fun: F) + where + F: Fn(ReconstructedMessage), + { + let mut client = self.client.lock().await; + client.on_messages(fun).await + } + + pub async fn nym_address(&self) -> Recipient { + let client = self.client.lock().await; + client.nym_address().clone() + } +} + +/// Write half of a split MixnetSocket +pub struct MixnetSocketWriter { + inner: MixnetClientSender, +} + +impl AsyncWrite for MixnetSocketWriter { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + Pin::new(&mut self.inner).poll_write(cx, buf) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.inner).poll_flush(cx) + } + + fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.inner).poll_shutdown(cx) + } +} + +impl MixnetSocketWriter { + pub async fn send(&mut self, message: InputMessage) -> Result<(), Error> { + self.inner.send(message).await + } +} + +// Tests TODO: +// - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) +// - check we can push large amounts through and we dont lose anything - make a version of the simple test with codec + framing and try whack massive amounts through +#[cfg(test)] +mod tests { + use super::*; + use crate::mixnet::MixnetClientBuilder; + use log::info; + use tokio::io::AsyncReadExt; + use tokio::time::{timeout, Duration}; + + #[tokio::test] + async fn simple_string_communication() -> Result<(), Error> { + // nym_bin_common::logging::setup_logging(); + + let client1 = MixnetClientBuilder::new_ephemeral() + .build()? + .connect_to_mixnet() + .await?; + + let client2 = MixnetClientBuilder::new_ephemeral() + .build()? + .connect_to_mixnet() + .await?; + + let client1_address = client1.nym_address().clone(); + + let mut socket1 = MixnetSocket::new(client1); + let mut socket2 = MixnetSocket::new(client2); + + let test_message = "Hello, Mixnet Socket!"; + + let reader_task = tokio::spawn(async move { + let mut buffer = vec![0u8; 1024]; + let n = socket1.read(&mut buffer).await?; + let received = String::from_utf8_lossy(&buffer[..n]).to_string(); + info!("Received: {}", received); + Ok::<_, std::io::Error>(received) + }); + + // Wait for reader task to start + tokio::time::sleep(Duration::from_secs(1)).await; + + // TODO need Inputmessage to be from_bytes - want just bytes on interface + let input_message = InputMessage::simple(test_message.as_bytes(), client1_address); + socket2.send(input_message).await?; + + let result = timeout(Duration::from_secs(30), reader_task).await; + + // Clean up + socket2.disconnect().await; + + match result { + Ok(Ok(received)) => { + let unwrapped = received.unwrap(); + assert!( + unwrapped.contains(test_message), + "Split socket didn't receive the correct message - received {:?}", + unwrapped + ); + Ok(()) + } + Ok(Err(e)) => { + panic!("Reader task failed with IO error: {}", e); + } + Err(_) => { + panic!("Test timed out - failed to receive the message within 30 seconds"); + } + } + } + + #[tokio::test] + async fn split_socket_communication() -> Result<(), Error> { + // nym_bin_common::logging::setup_logging(); + + let client1 = MixnetClientBuilder::new_ephemeral() + .build()? + .connect_to_mixnet() + .await?; + + let client2 = MixnetClientBuilder::new_ephemeral() + .build()? + .connect_to_mixnet() + .await?; + + let client1_address = client1.nym_address().clone(); + + let socket1 = MixnetSocket::new(client1); + let (mut reader, _writer) = socket1.split(); + + let mut socket2 = MixnetSocket::new(client2); + + let test_message = "Hello from split socket!"; + + let reader_task = tokio::spawn(async move { + let messages = reader.wait_for_messages().await; + match messages { + Some(msgs) => { + if let Some(first_msg) = msgs.first() { + let content = String::from_utf8_lossy(&first_msg.message); + info!("Received via split socket: {}", content); + Ok(content.to_string()) + } else { + Err(std::io::Error::new( + std::io::ErrorKind::UnexpectedEof, + "No messages received", + )) + } + } + None => Err(std::io::Error::new( + std::io::ErrorKind::BrokenPipe, + "Connection closed", + )), + } + }); + + tokio::time::sleep(Duration::from_secs(1)).await; + + let input_message = InputMessage::simple(test_message.as_bytes(), client1_address); + socket2.send(input_message).await?; + + let result = timeout(Duration::from_secs(30), reader_task).await; + socket2.disconnect().await; + + match result { + Ok(Ok(received)) => { + let unwrapped = received.unwrap(); + assert!( + unwrapped.contains(test_message), + "Split socket didn't receive the correct message - received {:?}", + unwrapped + ); + Ok(()) + } + Ok(Err(e)) => { + panic!("Split socket reader failed: {}", e); + } + Err(e) => { + panic!("Split socket test failed: {}", e); + } + } + } +} From d51112e4a02b4ef20b014b6c8f30a7f849ad990b Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 20 Jun 2025 16:52:55 +0200 Subject: [PATCH 020/139] temp --- nym-network-monitor/src/handlers.rs | 2 +- sdk/rust/nym-sdk/src/stream_wrapper.rs | 339 +++++------------- .../src/clients/connected_client_handler.rs | 9 +- 3 files changed, 91 insertions(+), 259 deletions(-) diff --git a/nym-network-monitor/src/handlers.rs b/nym-network-monitor/src/handlers.rs index 3b848fdcdbb..05f753cd89d 100644 --- a/nym-network-monitor/src/handlers.rs +++ b/nym-network-monitor/src/handlers.rs @@ -220,7 +220,7 @@ async fn send_receive_mixnet(state: AppState) -> Result { }); let send_handle = tokio::spawn(async move { - let mixnet_sender = sender.read().await.split_sender(); + let mut mixnet_sender = sender.read().await.split_sender(); let our_address = *sender.read().await.nym_address(); match timeout( Duration::from_secs(5), diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index f908959858a..11cd6ff57f9 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -1,4 +1,4 @@ -use crate::mixnet::{InputMessage, MixnetClient, MixnetClientSender, Recipient}; +use crate::mixnet::{MixnetClient, MixnetClientSender, Recipient}; use crate::Error; use futures::SinkExt; use nym_sphinx::receiver::ReconstructedMessage; @@ -13,27 +13,33 @@ use tracing::{debug, info, warn}; /** * TODO - * - make bytes on the interface + * - make bytes on the interface instead of InputMessage - always want Anonymous enum or? * - codec + check what sort of backpressure freaks everything out * - check tls works * - https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates/nym-ip-packet-client/src - hook into IPR + * - builder pattern via MixSocket */ -/// Socket-like wrapper for reading and writing bytes over the Mixnet. -pub struct MixnetSocket { +/// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. +/// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. +/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. +pub struct MixSocket { inner: MixnetClient, } -impl MixnetSocket { - pub fn new(client: MixnetClient) -> Self { - Self { inner: client } +impl MixSocket { + /// Create a new socket that is disconnected from the Mixnet - kick off the Mixnet client with config for builder. + /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream + pub async fn new() -> Result { + todo!() } - pub async fn connect() -> Result { - let client = MixnetClient::connect_new().await?; - Ok(Self::new(client)) + /// Connect to a specific peer (Nym Client) and return a Stream (cf TcpSocket::connect() / TcpStream::new()) + pub async fn connect_to(_recipient: Recipient) -> Result { + todo!() } + /// Get our Nym address pub fn nym_address(&self) -> &Recipient { self.inner.nym_address() } @@ -49,295 +55,118 @@ impl MixnetSocket { pub fn into_inner(self) -> MixnetClient { self.inner } +} + +pub struct MixStream { + client: MixnetClient, + peer: Recipient, +} + +impl MixStream { + /// Create a MixStream and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient) + // TODO in future take config from MixSocket if exists in Option<> param, else spin up ephemeral client. Just doing ephemeral for initial sketch + pub async fn new(_socket: Option, peer: Recipient) -> Self { + Self { + client: MixnetClient::connect_new().await.unwrap(), + peer, + } + } + + /// Nym address of Stream's peer + pub fn peer_addr(&self) -> &Recipient { + &self.peer + } + + /// Our Nym address + pub fn local_addr(&self) -> &Recipient { + self.client.nym_address() + } - /// Split the socket into separate reader and writer halves - like TcpSockets. - /// Wrap in Arc> for concurrent read/write. - pub fn split(self) -> (MixnetSocketReader, MixnetSocketWriter) { - let client = Arc::new(Mutex::new(self.inner)); - let sender = { - let mut client_guard = client.try_lock().expect("Failed to lock client for split"); - client_guard.split_sender() - }; + /// TODO longer explanation TL;DR = following TcpStream's split into reader/writer for concurrency + // Split for concurrent read/write (like TcpStream::Split) + pub fn split(self) -> (MixStreamReader, MixStreamWriter) { + let sender = self.client.split_sender(); ( - MixnetSocketReader { - client: Arc::clone(&client), + MixStreamReader { + client: self.client, + peer: self.peer, + }, + MixStreamWriter { + sender, + peer: self.peer, }, - MixnetSocketWriter { inner: sender }, ) } /// Disconnect from the Mixnet pub async fn disconnect(self) { debug!("Disconnecting"); - self.inner.disconnect().await; + self.client.disconnect().await; debug!("Disconnected"); } - - /// Wait for incoming messages from the Mixnet - /// Returns None if the connection is closed, otherwise returns Some(Vec) of messages. - pub async fn wait_for_messages(&mut self) -> Option> { - self.inner.wait_for_messages().await - } - - /// Process incoming messages with a callback function - basically just moved this fn up a level - pub async fn on_messages(&mut self, fun: F) - where - F: Fn(ReconstructedMessage), - { - self.inner.on_messages(fun).await - } - - // TODO change to bytes as input, remove the need for importing/knowing about InputMessage type & do conversion below this level - pub async fn send(&mut self, message: InputMessage) -> Result<(), Error> { - self.inner.send(message).await - } } -impl AsyncRead for MixnetSocket { +impl AsyncRead for MixStream { fn poll_read( mut self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut ReadBuf<'_>, ) -> Poll> { - Pin::new(&mut self.inner).poll_read(cx, buf) + Pin::new(&mut self.client).poll_read(cx, buf) } } -impl AsyncWrite for MixnetSocket { +impl AsyncWrite for MixStream { fn poll_write( mut self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8], ) -> Poll> { - Pin::new(&mut self.inner).poll_write(cx, buf) + Pin::new(&mut self.client).poll_write(cx, buf) } fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.inner).poll_flush(cx) + Pin::new(&mut self.client).poll_flush(cx) } fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.inner).poll_shutdown(cx) - } -} - -/// Read half of a split MixnetSocket -pub struct MixnetSocketReader { - client: Arc>, -} - -impl AsyncRead for MixnetSocketReader { - fn poll_read( - self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &mut ReadBuf<'_>, - ) -> Poll> { - match self.client.try_lock() { - Ok(mut client) => { - debug!("Got lock"); - Pin::new(&mut *client).poll_read(cx, buf) - } - Err(_) => { - warn!("Couldn't immediately get lock"); - // If we can't get the lock immediately, wake the task and return Pending - cx.waker().wake_by_ref(); - Poll::Pending - } - } + Pin::new(&mut self.client).poll_shutdown(cx) } } -impl MixnetSocketReader { - /// Wait for messages from Mixnet - /// Returns None if connection is closed. - pub async fn wait_for_messages(&self) -> Option> { - let mut client = self.client.lock().await; - client.wait_for_messages().await - } - - pub async fn on_messages(&self, fun: F) - where - F: Fn(ReconstructedMessage), - { - let mut client = self.client.lock().await; - client.on_messages(fun).await - } - - pub async fn nym_address(&self) -> Recipient { - let client = self.client.lock().await; - client.nym_address().clone() - } +// TODO +pub struct MixStreamReader { + client: MixnetClient, + peer: Recipient, } +impl MixStreamReader {} +// impl AsyncRead for MixStreamWriter {} -/// Write half of a split MixnetSocket -pub struct MixnetSocketWriter { - inner: MixnetClientSender, +pub struct MixStreamWriter { + sender: MixnetClientSender, + peer: Recipient, } +impl MixStreamWriter {} +// impl AsyncWrite for MixStreamWriter {} -impl AsyncWrite for MixnetSocketWriter { - fn poll_write( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &[u8], - ) -> Poll> { - Pin::new(&mut self.inner).poll_write(cx, buf) - } - - fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.inner).poll_flush(cx) - } - - fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.inner).poll_shutdown(cx) - } -} - -impl MixnetSocketWriter { - pub async fn send(&mut self, message: InputMessage) -> Result<(), Error> { - self.inner.send(message).await - } -} +/** + * Tests TODO: + * - simple setup + create MixStream & read/write to self + * - "" & read/write to other + * - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) + * - check we can push large amounts through and we dont lose anything - make a version of the simple test with codec + framing and try whack massive amounts through + */ -// Tests TODO: -// - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) -// - check we can push large amounts through and we dont lose anything - make a version of the simple test with codec + framing and try whack massive amounts through #[cfg(test)] mod tests { use super::*; - use crate::mixnet::MixnetClientBuilder; - use log::info; - use tokio::io::AsyncReadExt; - use tokio::time::{timeout, Duration}; - - #[tokio::test] - async fn simple_string_communication() -> Result<(), Error> { - // nym_bin_common::logging::setup_logging(); - - let client1 = MixnetClientBuilder::new_ephemeral() - .build()? - .connect_to_mixnet() - .await?; - - let client2 = MixnetClientBuilder::new_ephemeral() - .build()? - .connect_to_mixnet() - .await?; - - let client1_address = client1.nym_address().clone(); - - let mut socket1 = MixnetSocket::new(client1); - let mut socket2 = MixnetSocket::new(client2); - - let test_message = "Hello, Mixnet Socket!"; - - let reader_task = tokio::spawn(async move { - let mut buffer = vec![0u8; 1024]; - let n = socket1.read(&mut buffer).await?; - let received = String::from_utf8_lossy(&buffer[..n]).to_string(); - info!("Received: {}", received); - Ok::<_, std::io::Error>(received) - }); - - // Wait for reader task to start - tokio::time::sleep(Duration::from_secs(1)).await; - - // TODO need Inputmessage to be from_bytes - want just bytes on interface - let input_message = InputMessage::simple(test_message.as_bytes(), client1_address); - socket2.send(input_message).await?; - - let result = timeout(Duration::from_secs(30), reader_task).await; - - // Clean up - socket2.disconnect().await; - - match result { - Ok(Ok(received)) => { - let unwrapped = received.unwrap(); - assert!( - unwrapped.contains(test_message), - "Split socket didn't receive the correct message - received {:?}", - unwrapped - ); - Ok(()) - } - Ok(Err(e)) => { - panic!("Reader task failed with IO error: {}", e); - } - Err(_) => { - panic!("Test timed out - failed to receive the message within 30 seconds"); - } - } - } - - #[tokio::test] - async fn split_socket_communication() -> Result<(), Error> { - // nym_bin_common::logging::setup_logging(); - - let client1 = MixnetClientBuilder::new_ephemeral() - .build()? - .connect_to_mixnet() - .await?; - - let client2 = MixnetClientBuilder::new_ephemeral() - .build()? - .connect_to_mixnet() - .await?; - - let client1_address = client1.nym_address().clone(); - - let socket1 = MixnetSocket::new(client1); - let (mut reader, _writer) = socket1.split(); - - let mut socket2 = MixnetSocket::new(client2); - - let test_message = "Hello from split socket!"; - - let reader_task = tokio::spawn(async move { - let messages = reader.wait_for_messages().await; - match messages { - Some(msgs) => { - if let Some(first_msg) = msgs.first() { - let content = String::from_utf8_lossy(&first_msg.message); - info!("Received via split socket: {}", content); - Ok(content.to_string()) - } else { - Err(std::io::Error::new( - std::io::ErrorKind::UnexpectedEof, - "No messages received", - )) - } - } - None => Err(std::io::Error::new( - std::io::ErrorKind::BrokenPipe, - "Connection closed", - )), - } - }); - - tokio::time::sleep(Duration::from_secs(1)).await; - - let input_message = InputMessage::simple(test_message.as_bytes(), client1_address); - socket2.send(input_message).await?; - - let result = timeout(Duration::from_secs(30), reader_task).await; - socket2.disconnect().await; + use tokio::io::{AsyncReadExt, AsyncWriteExt}; - match result { - Ok(Ok(received)) => { - let unwrapped = received.unwrap(); - assert!( - unwrapped.contains(test_message), - "Split socket didn't receive the correct message - received {:?}", - unwrapped - ); - Ok(()) - } - Ok(Err(e)) => { - panic!("Split socket reader failed: {}", e); - } - Err(e) => { - panic!("Split socket test failed: {}", e); - } + // Quick test fn for easy testing of sending to self + impl MixSocket { + pub async fn new_test() -> Result { + let inner = MixnetClient::connect_new().await?; + Ok(MixSocket { inner }) } } } diff --git a/service-providers/ip-packet-router/src/clients/connected_client_handler.rs b/service-providers/ip-packet-router/src/clients/connected_client_handler.rs index ba9f9b32901..d047819d315 100644 --- a/service-providers/ip-packet-router/src/clients/connected_client_handler.rs +++ b/service-providers/ip-packet-router/src/clients/connected_client_handler.rs @@ -219,14 +219,14 @@ impl MixnetMessageSinkTranslator for ToIprDataResponse { #[cfg(test)] mod tests { - use std::sync::{Arc, Mutex}; - use async_trait::async_trait; use bytes::Bytes; use futures::SinkExt; use nym_sdk::mixnet::{AnonymousSenderTag, MixnetMessageSender, MixnetMessageSink}; + use std::sync::{Arc, Mutex}; use tokio::sync::Notify; use tokio_util::codec::FramedWrite; + use tokio_util::sync::PollSender; use super::*; @@ -264,12 +264,15 @@ mod tests { #[async_trait] impl MixnetMessageSender for MockMixnetClientSender { - async fn send(&self, message: InputMessage) -> std::result::Result<(), nym_sdk::Error> { + async fn send(&mut self, message: InputMessage) -> std::result::Result<(), nym_sdk::Error> { let mut sent_messages = self.sent_messages.lock().unwrap(); sent_messages.push(message); self.notify.notify_one(); Ok(()) } + fn sender(&mut self) -> &mut PollSender { + todo!() + } } #[tokio::test] From bf58a8aea76c5b1f498935c4a07f04a54540bd93 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 24 Jun 2025 20:23:57 +0200 Subject: [PATCH 021/139] first full pass @ stream + split wrappers --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 359 +++++++++++++++++++++++-- 1 file changed, 331 insertions(+), 28 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index 11cd6ff57f9..a1f84b7c329 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -1,27 +1,31 @@ +use crate::mixnet::InputMessage; use crate::mixnet::{MixnetClient, MixnetClientSender, Recipient}; use crate::Error; +use bytes::BytesMut; use futures::SinkExt; -use nym_sphinx::receiver::ReconstructedMessage; +use nym_client_core::client::inbound_messages::InputMessageCodec; +use nym_sphinx::receiver::{ReconstructedMessage, ReconstructedMessageCodec}; use std::io; use std::pin::Pin; use std::sync::Arc; use std::task::{Context, Poll}; -use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; +use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, ReadBuf}; use tokio::sync::Mutex; +use tokio_util::codec::{Decoder, Encoder}; use tracing::field::debug; use tracing::{debug, info, warn}; /** * TODO - * - make bytes on the interface instead of InputMessage - always want Anonymous enum or? - * - codec + check what sort of backpressure freaks everything out - * - check tls works + * - check all works + * - Convenience methods? Depends on what we want to put in here and what might be used / impl-ed in consuming libraries + * - what InputMessage enum are we wanting to use? * - https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates/nym-ip-packet-client/src - hook into IPR - * - builder pattern via MixSocket + * - builder pattern via MixSocket + tests */ /// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. -/// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. +/// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). /// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. pub struct MixSocket { inner: MixnetClient, @@ -29,7 +33,7 @@ pub struct MixSocket { impl MixSocket { /// Create a new socket that is disconnected from the Mixnet - kick off the Mixnet client with config for builder. - /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream + /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream instance pub async fn new() -> Result { todo!() } @@ -63,13 +67,14 @@ pub struct MixStream { } impl MixStream { - /// Create a MixStream and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient) + /// Create a MixStream instance and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient) // TODO in future take config from MixSocket if exists in Option<> param, else spin up ephemeral client. Just doing ephemeral for initial sketch - pub async fn new(_socket: Option, peer: Recipient) -> Self { - Self { - client: MixnetClient::connect_new().await.unwrap(), - peer, - } + pub async fn new(socket: Option, peer: Recipient) -> Self { + let client = match socket { + Some(socket) => socket.into_inner(), + None => MixnetClient::connect_new().await.unwrap(), + }; + Self { client, peer } } /// Nym address of Stream's peer @@ -82,10 +87,11 @@ impl MixStream { self.client.nym_address() } - /// TODO longer explanation TL;DR = following TcpStream's split into reader/writer for concurrency - // Split for concurrent read/write (like TcpStream::Split) + /// Split for concurrent read/write (like TcpStream::Split) into MixnetStreamReader and MixnetStreamWriter pub fn split(self) -> (MixStreamReader, MixStreamWriter) { + debug!("Splitting MixStream"); let sender = self.client.split_sender(); + debug!("Split MixStream into Reader and Writer"); ( MixStreamReader { client: self.client, @@ -98,7 +104,30 @@ impl MixStream { ) } - /// Disconnect from the Mixnet + /// Convenience method for just piping bytes into the Mixnet + pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { + // TODO double check this is the correct encoding we want + let input_message = InputMessage::simple(data, self.peer); + let mut codec = InputMessageCodec {}; + let mut serialized_bytes = BytesMut::new(); + codec + .encode(input_message, &mut serialized_bytes) + .map_err(|_| Error::MessageSendingFailure)?; + info!("Serialized bytes: {:?}", serialized_bytes); + + self.write_all(&serialized_bytes) + .await + .map_err(|_| Error::MessageSendingFailure)?; + info!("Wrote serialized bytes"); + self.flush() + .await + .map_err(|_| Error::MessageSendingFailure)?; + debug!("Flushed"); + + Ok(()) + } + + /// Disconnect client from the Mixnet - note that disconnected clients cannot currently be reconnected pub async fn disconnect(self) { debug!("Disconnecting"); self.client.disconnect().await; @@ -134,39 +163,313 @@ impl AsyncWrite for MixStream { } } -// TODO pub struct MixStreamReader { client: MixnetClient, peer: Recipient, } -impl MixStreamReader {} -// impl AsyncRead for MixStreamWriter {} +impl MixStreamReader { + /// Nym address of StreamReader's peer + pub fn peer_addr(&self) -> &Recipient { + &self.peer + } + + /// Our Nym address + pub fn local_addr(&self) -> &Recipient { + self.client.nym_address() + } +} + +impl AsyncRead for MixStreamReader { + fn poll_read( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut ReadBuf<'_>, + ) -> Poll> { + Pin::new(&mut self.client).poll_read(cx, buf) + } +} pub struct MixStreamWriter { sender: MixnetClientSender, peer: Recipient, } -impl MixStreamWriter {} -// impl AsyncWrite for MixStreamWriter {} + +impl MixStreamWriter { + /// Convenience method for just piping bytes into the Mixnet + pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { + // TODO double check this is the correct encoding we want + let input_message = InputMessage::simple(data, self.peer); + let mut codec = InputMessageCodec {}; + let mut serialized_bytes = BytesMut::new(); + codec + .encode(input_message, &mut serialized_bytes) + .map_err(|_| Error::MessageSendingFailure)?; + info!("Serialized bytes: {:?}", serialized_bytes); + + self.write_all(&serialized_bytes) + .await + .map_err(|_| Error::MessageSendingFailure)?; + info!("Wrote serialized bytes"); + self.flush() + .await + .map_err(|_| Error::MessageSendingFailure)?; + debug!("Flushed"); + + Ok(()) + } +} + +impl AsyncWrite for MixStreamWriter { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + Pin::new(&mut self.sender).poll_write(cx, buf) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.sender).poll_flush(cx) + } + + fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.sender).poll_shutdown(cx) + } +} /** * Tests TODO: - * - simple setup + create MixStream & read/write to self - * - "" & read/write to other + * + * STREAM + STREAMREADER + STREAMWRITER * - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) - * - check we can push large amounts through and we dont lose anything - make a version of the simple test with codec + framing and try whack massive amounts through + * + * SOCKET + * - general tests + * */ - #[cfg(test)] mod tests { use super::*; - use tokio::io::{AsyncReadExt, AsyncWriteExt}; + use std::sync::Once; - // Quick test fn for easy testing of sending to self + // Quick test fn for easy testing of sending to self before writing Socket impl (see above todo) impl MixSocket { pub async fn new_test() -> Result { let inner = MixnetClient::connect_new().await?; Ok(MixSocket { inner }) } } + + static INIT: Once = Once::new(); + + fn init_logging() { + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); + } + + #[tokio::test] + async fn simple_send_and_receive() -> Result<(), Box> { + // init_logging(); + let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done + let receiver_address = receiver_socket.nym_address().clone(); + let receiver_stream = MixStream::new(Some(receiver_socket), receiver_address.clone()).await; + let mut sender_stream = MixStream::new(None, receiver_address).await; + + let message = b"Hello, Mixnet!"; + + let mut receiver_for_task = receiver_stream; + let receiver_task = tokio::spawn(async move { + let mut buffer = [0u8; 1024]; + match receiver_for_task.read(&mut buffer).await { + Ok(bytes_read) => { + if bytes_read > 0 { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..bytes_read]); + + match codec.decode(&mut buf) { + Ok(Some(decoded_message)) => { + let received_payload = decoded_message.message; + let payload_length = received_payload.len(); + + info!("Received {} bytes: {:?}", payload_length, received_payload); + return Ok((received_payload, payload_length)); + } + Ok(None) => println!( + "ReconstructedMessageCodec returned None - incomplete message?" + ), + Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), + } + } + Err(("No bytes read".to_string(), 0)) + } + Err(e) => Err((format!("Read error: {}", e), 0)), + } + }); + + sender_stream.write_bytes(message).await?; + info!("Sent {} bytes", message.len()); + + let result = + tokio::time::timeout(tokio::time::Duration::from_secs(15), receiver_task).await; + sender_stream.disconnect().await; + + match result { + Ok(Ok(Ok((received_payload, paylod_length)))) => { + assert_eq!( + paylod_length, + message.len(), + "Length mismatch: expected {}, got {}", + message.len(), + paylod_length + ); + + assert_eq!(received_payload.as_slice(), message, "Content mismatch"); + } + Ok(Ok(Err((error_msg, _)))) => { + panic!("Receiver task failed: {}", error_msg); + } + Ok(Err(e)) => { + panic!("Receiver task panicked: {:?}", e); + } + Err(_) => { + panic!("Test timed out"); + } + } + Ok(()) + } + + #[tokio::test] + async fn split_send_receive_split() -> Result<(), Box> { + // init_logging(); + let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done + let receiver_address = receiver_socket.nym_address().clone(); + let sender_socket = MixSocket::new_test().await?; + let sender_address = sender_socket.nym_address().clone(); + let receiver_stream = MixStream::new(Some(receiver_socket), sender_address.clone()).await; + let sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; + let (mut reader, _receiver_writer) = receiver_stream.split(); + let (_sender_reader, mut writer) = sender_stream.split(); + + let message = b"Hello, Mixnet Split!"; + + let receiver_task = tokio::spawn(async move { + let mut buffer = [0u8; 1024]; + match reader.read(&mut buffer).await { + Ok(bytes_read) => { + if bytes_read > 0 { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..bytes_read]); + + match codec.decode(&mut buf) { + Ok(Some(decoded_message)) => { + let received_payload = decoded_message.message; + let payload_length = received_payload.len(); + + info!("Received {} bytes: {:?}", payload_length, received_payload); + return Ok((received_payload, payload_length)); + } + Ok(None) => println!( + "ReconstructedMessageCodec returned None - incomplete message?" + ), + Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), + } + } + Err(("No bytes read".to_string(), 0)) + } + Err(e) => Err((format!("Read error: {}", e), 0)), + } + }); + + writer.write_bytes(message).await?; + info!("Sent {} bytes", message.len()); + + let result = + tokio::time::timeout(tokio::time::Duration::from_secs(15), receiver_task).await; + + drop(_receiver_writer); + drop(_sender_reader); + + match result { + Ok(Ok(Ok((received_payload, payload_length)))) => { + assert_eq!( + payload_length, + message.len(), + "Length mismatch: expected {}, got {}", + message.len(), + payload_length + ); + + assert_eq!(received_payload.as_slice(), message, "Content mismatch"); + } + Ok(Ok(Err((error_msg, _)))) => { + panic!("Receiver task failed: {}", error_msg); + } + Ok(Err(e)) => { + panic!("Receiver task panicked: {:?}", e); + } + Err(_) => { + panic!("Test timed out"); + } + } + Ok(()) + } + + #[tokio::test] + async fn concurrent_send_receive() -> Result<(), Box> { + // init_logging(); + let socket = MixSocket::new_test().await?; // TODO change once socket impl is done + let addr = socket.nym_address().clone(); + let stream = MixStream::new(Some(socket), addr.clone()).await; + let (mut reader, mut writer) = stream.split(); + + let writer_task = tokio::spawn(async move { + for i in 0..20 { + let msg = format!("Message {}", i); + match writer.write_bytes(msg.as_bytes()).await { + Ok(()) => {} + Err(e) => { + return Err(format!("Write failed: {:?}", e)); + } + } + } + Ok(()) + }); + + let reader_task = tokio::spawn(async move { + let mut received = 0; + let mut buffer = [0u8; 1024]; + + loop { + match tokio::time::timeout( + tokio::time::Duration::from_secs(5), + reader.read(&mut buffer), + ) + .await + { + Ok(Ok(n)) if n > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..n]); + if let Ok(Some(_)) = codec.decode(&mut buf) { + received += 1; + } + } + _ => break, + } + } + received + }); + + match writer_task.await { + Ok(Ok(())) => {} + Ok(Err(e)) => panic!("Writer task failed: {}", e), + Err(e) => panic!("Writer task panicked: {:?}", e), + } + + let count = reader_task.await?; + + info!("Sent 20 messages, received {}", count); + assert!(count == 20); + Ok(()) + } } From 7ad822cd7ef1bfb942ef2e8769b80ee58e4d27b0 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 25 Jun 2025 16:42:02 +0200 Subject: [PATCH 022/139] make inputmessage anonymous type over simple --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 74 ++++++++++++++++++-------- 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index a1f84b7c329..5d79388a64a 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -19,31 +19,30 @@ use tracing::{debug, info, warn}; * TODO * - check all works * - Convenience methods? Depends on what we want to put in here and what might be used / impl-ed in consuming libraries - * - what InputMessage enum are we wanting to use? * - https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates/nym-ip-packet-client/src - hook into IPR * - builder pattern via MixSocket + tests */ /// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. /// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). -/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. +/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances from a single MixSocket, all connected to different Recipients. pub struct MixSocket { inner: MixnetClient, } impl MixSocket { /// Create a new socket that is disconnected from the Mixnet - kick off the Mixnet client with config for builder. - /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream instance + /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream instance. pub async fn new() -> Result { todo!() } - /// Connect to a specific peer (Nym Client) and return a Stream (cf TcpSocket::connect() / TcpStream::new()) + /// Connect to a specific peer (Nym Client) and return a Stream (cf TcpSocket::connect() / TcpStream::new()). pub async fn connect_to(_recipient: Recipient) -> Result { todo!() } - /// Get our Nym address + /// Get our Nym address. pub fn nym_address(&self) -> &Recipient { self.inner.nym_address() } @@ -64,11 +63,12 @@ impl MixSocket { pub struct MixStream { client: MixnetClient, peer: Recipient, + // TODO do we need to include a SURB or something in here for the connection? } impl MixStream { - /// Create a MixStream instance and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient) - // TODO in future take config from MixSocket if exists in Option<> param, else spin up ephemeral client. Just doing ephemeral for initial sketch + /// Create a MixStream instance and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient). + // TODO in future take config from MixSocket if exists in Option<> param, else spin up ephemeral client. Just doing ephemeral for initial sketch. pub async fn new(socket: Option, peer: Recipient) -> Self { let client = match socket { Some(socket) => socket.into_inner(), @@ -77,17 +77,17 @@ impl MixStream { Self { client, peer } } - /// Nym address of Stream's peer + /// Nym address of Stream's peer (Nym Client it will communicate with). pub fn peer_addr(&self) -> &Recipient { &self.peer } - /// Our Nym address + /// Our Nym address. pub fn local_addr(&self) -> &Recipient { self.client.nym_address() } - /// Split for concurrent read/write (like TcpStream::Split) into MixnetStreamReader and MixnetStreamWriter + /// Split for concurrent read/write (like TcpStream::Split) into MixnetStreamReader and MixnetStreamWriter. pub fn split(self) -> (MixStreamReader, MixStreamWriter) { debug!("Splitting MixStream"); let sender = self.client.split_sender(); @@ -104,10 +104,15 @@ impl MixStream { ) } - /// Convenience method for just piping bytes into the Mixnet + /// Convenience method for just piping bytes into the Mixnet. pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - // TODO double check this is the correct encoding we want - let input_message = InputMessage::simple(data, self.peer); + let input_message = InputMessage::Anonymous { + recipient: (self.peer), + data: (data.to_owned()), + reply_surbs: (10), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + }; let mut codec = InputMessageCodec {}; let mut serialized_bytes = BytesMut::new(); codec @@ -127,7 +132,7 @@ impl MixStream { Ok(()) } - /// Disconnect client from the Mixnet - note that disconnected clients cannot currently be reconnected + /// Disconnect client from the Mixnet - note that disconnected clients cannot currently be reconnected. pub async fn disconnect(self) { debug!("Disconnecting"); self.client.disconnect().await; @@ -166,14 +171,15 @@ impl AsyncWrite for MixStream { pub struct MixStreamReader { client: MixnetClient, peer: Recipient, + // TODO do we need to include a SURB or something in here for the connection? Need to pass this to the StreamWriter } impl MixStreamReader { - /// Nym address of StreamReader's peer + /// Nym address of StreamReader's Recipient (Nym Client it will communicate with). pub fn peer_addr(&self) -> &Recipient { &self.peer } - /// Our Nym address + /// Our Nym address. pub fn local_addr(&self) -> &Recipient { self.client.nym_address() } @@ -192,13 +198,19 @@ impl AsyncRead for MixStreamReader { pub struct MixStreamWriter { sender: MixnetClientSender, peer: Recipient, + // TODO do we need to include a SURB or something in here for the connection? } impl MixStreamWriter { - /// Convenience method for just piping bytes into the Mixnet + /// Convenience method for just piping bytes into the Mixnet. pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - // TODO double check this is the correct encoding we want - let input_message = InputMessage::simple(data, self.peer); + let input_message = InputMessage::Anonymous { + recipient: (self.peer), + data: (data.to_owned()), + reply_surbs: (10), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + }; let mut codec = InputMessageCodec {}; let mut serialized_bytes = BytesMut::new(); codec @@ -241,10 +253,11 @@ impl AsyncWrite for MixStreamWriter { * Tests TODO: * * STREAM + STREAMREADER + STREAMWRITER + * - anonymous replies * - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) * * SOCKET - * - general tests + * - general tests: create new + various into() fns * */ #[cfg(test)] @@ -298,11 +311,14 @@ mod tests { Ok(None) => println!( "ReconstructedMessageCodec returned None - incomplete message?" ), + // TODO make panic Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), } } + // TODO make panic Err(("No bytes read".to_string(), 0)) } + // TODO make panic Err(e) => Err((format!("Read error: {}", e), 0)), } }); @@ -340,7 +356,7 @@ mod tests { } #[tokio::test] - async fn split_send_receive_split() -> Result<(), Box> { + async fn simple_send_receive_split() -> Result<(), Box> { // init_logging(); let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done let receiver_address = receiver_socket.nym_address().clone(); @@ -472,4 +488,20 @@ mod tests { assert!(count == 20); Ok(()) } + + #[tokio::test] + async fn surb_reply() -> Result<(), Box> { + // init_logging(); + let socket = MixSocket::new_test().await?; // TODO change once socket impl is done + let addr = socket.nym_address().clone(); + let stream = MixStream::new(Some(socket), addr.clone()).await; + let (mut reader, mut writer) = stream.split(); + + // send message + // parse message + // get surb + // use as reply + + Ok(()) + } } From 9f6b19b009acdf5b9e299d434dcd1ae499232a03 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 26 Jun 2025 16:55:23 +0200 Subject: [PATCH 023/139] adding surbs + anon reply functionality --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 575 ++++++++++++++----------- 1 file changed, 327 insertions(+), 248 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index 5d79388a64a..0c54a6a8e4f 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -4,6 +4,7 @@ use crate::Error; use bytes::BytesMut; use futures::SinkExt; use nym_client_core::client::inbound_messages::InputMessageCodec; +use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; use nym_sphinx::receiver::{ReconstructedMessage, ReconstructedMessageCodec}; use std::io; use std::pin::Pin; @@ -62,8 +63,8 @@ impl MixSocket { pub struct MixStream { client: MixnetClient, - peer: Recipient, - // TODO do we need to include a SURB or something in here for the connection? + peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. + peer_surbs: Option, // ..since we might just be using SURBs instead } impl MixStream { @@ -74,12 +75,17 @@ impl MixStream { Some(socket) => socket.into_inner(), None => MixnetClient::connect_new().await.unwrap(), }; - Self { client, peer } + Self { + client, + peer: Some(peer), + peer_surbs: None, + } } /// Nym address of Stream's peer (Nym Client it will communicate with). - pub fn peer_addr(&self) -> &Recipient { - &self.peer + pub fn peer_addr(&self) -> Recipient { + let peer = &self.peer.expect("No Peer set"); + peer.clone() } /// Our Nym address. @@ -87,6 +93,15 @@ impl MixStream { self.client.nym_address() } + pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { + self.peer_surbs = Some(surbs); + } + + /// Stored SURBs (if any). + pub fn surbs(&self) -> Option { + self.peer_surbs + } + /// Split for concurrent read/write (like TcpStream::Split) into MixnetStreamReader and MixnetStreamWriter. pub fn split(self) -> (MixStreamReader, MixStreamWriter) { debug!("Splitting MixStream"); @@ -95,24 +110,36 @@ impl MixStream { ( MixStreamReader { client: self.client, - peer: self.peer, + peer: self.peer.expect("No Peer set"), }, MixStreamWriter { sender, - peer: self.peer, + peer: self.peer.expect("No Peer set"), }, ) } /// Convenience method for just piping bytes into the Mixnet. pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - let input_message = InputMessage::Anonymous { - recipient: (self.peer), - data: (data.to_owned()), - reply_surbs: (10), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + let input_message = if self.peer_surbs.is_some() { + info!("Writing reply with SURBs"); + InputMessage::Reply { + recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), + data: (data.to_owned()), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + } + } else { + info!("Writing outgoing reply using Nym address"); + InputMessage::Anonymous { + recipient: (self.peer.expect("No Peer set")), + data: (data.to_owned()), + reply_surbs: (10), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + } }; + let mut codec = InputMessageCodec {}; let mut serialized_bytes = BytesMut::new(); codec @@ -168,10 +195,10 @@ impl AsyncWrite for MixStream { } } +// TODO make peer + peer surbs optional as in Stream pub struct MixStreamReader { client: MixnetClient, peer: Recipient, - // TODO do we need to include a SURB or something in here for the connection? Need to pass this to the StreamWriter } impl MixStreamReader { /// Nym address of StreamReader's Recipient (Nym Client it will communicate with). @@ -195,40 +222,52 @@ impl AsyncRead for MixStreamReader { } } +// TODO make peer + peer surbs optional as in Stream pub struct MixStreamWriter { sender: MixnetClientSender, peer: Recipient, - // TODO do we need to include a SURB or something in here for the connection? } impl MixStreamWriter { - /// Convenience method for just piping bytes into the Mixnet. - pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - let input_message = InputMessage::Anonymous { - recipient: (self.peer), - data: (data.to_owned()), - reply_surbs: (10), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here - }; - let mut codec = InputMessageCodec {}; - let mut serialized_bytes = BytesMut::new(); - codec - .encode(input_message, &mut serialized_bytes) - .map_err(|_| Error::MessageSendingFailure)?; - info!("Serialized bytes: {:?}", serialized_bytes); - - self.write_all(&serialized_bytes) - .await - .map_err(|_| Error::MessageSendingFailure)?; - info!("Wrote serialized bytes"); - self.flush() - .await - .map_err(|_| Error::MessageSendingFailure)?; - debug!("Flushed"); - - Ok(()) - } + // Convenience method for just piping bytes into the Mixnet. + // + // Commented out until new peer + surb model is added + // pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { + // let input_message = if self.peer_surbs.is_some() { + // InputMessage::Reply { + // recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), + // data: (data.to_owned()), + // lane: (nym_task::connections::TransmissionLane::General), + // max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + // } + // } else { + // InputMessage::Anonymous { + // recipient: (self.peer.expect("No Peer set")), + // data: (data.to_owned()), + // reply_surbs: (10), + // lane: (nym_task::connections::TransmissionLane::General), + // max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + // } + // }; + + // let mut codec = InputMessageCodec {}; + // let mut serialized_bytes = BytesMut::new(); + // codec + // .encode(input_message, &mut serialized_bytes) + // .map_err(|_| Error::MessageSendingFailure)?; + // info!("Serialized bytes: {:?}", serialized_bytes); + + // self.write_all(&serialized_bytes) + // .await + // .map_err(|_| Error::MessageSendingFailure)?; + // info!("Wrote serialized bytes"); + // self.flush() + // .await + // .map_err(|_| Error::MessageSendingFailure)?; + // debug!("Flushed"); + + // Ok(()) + // } } impl AsyncWrite for MixStreamWriter { @@ -281,226 +320,266 @@ mod tests { }); } - #[tokio::test] - async fn simple_send_and_receive() -> Result<(), Box> { - // init_logging(); - let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done - let receiver_address = receiver_socket.nym_address().clone(); - let receiver_stream = MixStream::new(Some(receiver_socket), receiver_address.clone()).await; - let mut sender_stream = MixStream::new(None, receiver_address).await; - - let message = b"Hello, Mixnet!"; - - let mut receiver_for_task = receiver_stream; - let receiver_task = tokio::spawn(async move { - let mut buffer = [0u8; 1024]; - match receiver_for_task.read(&mut buffer).await { - Ok(bytes_read) => { - if bytes_read > 0 { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..bytes_read]); - - match codec.decode(&mut buf) { - Ok(Some(decoded_message)) => { - let received_payload = decoded_message.message; - let payload_length = received_payload.len(); - - info!("Received {} bytes: {:?}", payload_length, received_payload); - return Ok((received_payload, payload_length)); - } - Ok(None) => println!( - "ReconstructedMessageCodec returned None - incomplete message?" - ), - // TODO make panic - Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), - } - } - // TODO make panic - Err(("No bytes read".to_string(), 0)) - } - // TODO make panic - Err(e) => Err((format!("Read error: {}", e), 0)), - } - }); - - sender_stream.write_bytes(message).await?; - info!("Sent {} bytes", message.len()); - - let result = - tokio::time::timeout(tokio::time::Duration::from_secs(15), receiver_task).await; - sender_stream.disconnect().await; - - match result { - Ok(Ok(Ok((received_payload, paylod_length)))) => { - assert_eq!( - paylod_length, - message.len(), - "Length mismatch: expected {}, got {}", - message.len(), - paylod_length - ); - - assert_eq!(received_payload.as_slice(), message, "Content mismatch"); - } - Ok(Ok(Err((error_msg, _)))) => { - panic!("Receiver task failed: {}", error_msg); - } - Ok(Err(e)) => { - panic!("Receiver task panicked: {:?}", e); - } - Err(_) => { - panic!("Test timed out"); - } - } - Ok(()) - } + // #[tokio::test] + // async fn simple_send_and_receive() -> Result<(), Box> { + // // init_logging(); + // let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done + // let receiver_address = receiver_socket.nym_address().clone(); + // let receiver_stream = MixStream::new(Some(receiver_socket), receiver_address.clone()).await; + // let mut sender_stream = MixStream::new(None, receiver_address).await; + + // let message = b"Hello, Mixnet!"; + + // let mut receiver_for_task = receiver_stream; + // let receiver_task = tokio::spawn(async move { + // let mut buffer = [0u8; 1024]; + // match receiver_for_task.read(&mut buffer).await { + // Ok(bytes_read) => { + // if bytes_read > 0 { + // let mut codec = ReconstructedMessageCodec {}; + // let mut buf = BytesMut::from(&buffer[..bytes_read]); + + // match codec.decode(&mut buf) { + // Ok(Some(decoded_message)) => { + // let received_payload = decoded_message.message; + // let received_surbs = decoded_message.sender_tag; + // let payload_length = received_payload.len(); + + // info!( + // "Received {} bytes: {:?} from {:?}", + // payload_length, received_payload, received_surbs + // ); + // return Ok((received_payload, payload_length)); + // } + // Ok(None) => println!( + // "ReconstructedMessageCodec returned None - incomplete message?" + // ), + // // TODO make panic + // Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), + // } + // } + // // TODO make panic + // Err(("No bytes read".to_string(), 0)) + // } + // // TODO make panic + // Err(e) => Err((format!("Read error: {}", e), 0)), + // } + // }); + + // sender_stream.write_bytes(message).await?; + // info!("Sent {} bytes", message.len()); + + // let result = + // tokio::time::timeout(tokio::time::Duration::from_secs(15), receiver_task).await; + // sender_stream.disconnect().await; + + // match result { + // Ok(Ok(Ok((received_payload, paylod_length)))) => { + // assert_eq!( + // paylod_length, + // message.len(), + // "Length mismatch: expected {}, got {}", + // message.len(), + // paylod_length + // ); + + // assert_eq!(received_payload.as_slice(), message, "Content mismatch"); + // } + // Ok(Ok(Err((error_msg, _)))) => { + // panic!("Receiver task failed: {}", error_msg); + // } + // Ok(Err(e)) => { + // panic!("Receiver task panicked: {:?}", e); + // } + // Err(_) => { + // panic!("Test timed out"); + // } + // } + // Ok(()) + // } + + // #[tokio::test] + // async fn simple_send_receive_split() -> Result<(), Box> { + // // init_logging(); + // let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done + // let receiver_address = receiver_socket.nym_address().clone(); + // let sender_socket = MixSocket::new_test().await?; + // let sender_address = sender_socket.nym_address().clone(); + // let receiver_stream = MixStream::new(Some(receiver_socket), sender_address.clone()).await; + // let sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; + // let (mut reader, _receiver_writer) = receiver_stream.split(); + // let (_sender_reader, mut writer) = sender_stream.split(); + + // let message = b"Hello, Mixnet Split!"; + + // let receiver_task = tokio::spawn(async move { + // let mut buffer = [0u8; 1024]; + // match reader.read(&mut buffer).await { + // Ok(bytes_read) => { + // if bytes_read > 0 { + // let mut codec = ReconstructedMessageCodec {}; + // let mut buf = BytesMut::from(&buffer[..bytes_read]); + + // match codec.decode(&mut buf) { + // Ok(Some(decoded_message)) => { + // let received_payload = decoded_message.message; + // let payload_length = received_payload.len(); + + // info!("Received {} bytes: {:?}", payload_length, received_payload); + // return Ok((received_payload, payload_length)); + // } + // Ok(None) => println!( + // "ReconstructedMessageCodec returned None - incomplete message?" + // ), + // Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), + // } + // } + // Err(("No bytes read".to_string(), 0)) + // } + // Err(e) => Err((format!("Read error: {}", e), 0)), + // } + // }); + + // writer.write_bytes(message).await?; + // info!("Sent {} bytes", message.len()); + + // let result = + // tokio::time::timeout(tokio::time::Duration::from_secs(15), receiver_task).await; + + // match result { + // Ok(Ok(Ok((received_payload, payload_length)))) => { + // assert_eq!( + // payload_length, + // message.len(), + // "Length mismatch: expected {}, got {}", + // message.len(), + // payload_length + // ); + + // assert_eq!(received_payload.as_slice(), message, "Content mismatch"); + // } + // Ok(Ok(Err((error_msg, _)))) => { + // panic!("Receiver task failed: {}", error_msg); + // } + // Ok(Err(e)) => { + // panic!("Receiver task panicked: {:?}", e); + // } + // Err(_) => { + // panic!("Test timed out"); + // } + // } + // Ok(()) + // } + + // #[tokio::test] + // async fn concurrent_send_receive() -> Result<(), Box> { + // // init_logging(); + // let socket = MixSocket::new_test().await?; // TODO change once socket impl is done + // let addr = socket.nym_address().clone(); + // let stream = MixStream::new(Some(socket), addr.clone()).await; + // let (mut reader, mut writer) = stream.split(); + + // let writer_task = tokio::spawn(async move { + // for i in 0..20 { + // let msg = format!("Message {}", i); + // match writer.write_bytes(msg.as_bytes()).await { + // Ok(()) => {} + // Err(e) => { + // return Err(format!("Write failed: {:?}", e)); + // } + // } + // } + // Ok(()) + // }); + + // let reader_task = tokio::spawn(async move { + // let mut received = 0; + // let mut buffer = [0u8; 1024]; + + // loop { + // match tokio::time::timeout( + // tokio::time::Duration::from_secs(5), + // reader.read(&mut buffer), + // ) + // .await + // { + // Ok(Ok(n)) if n > 0 => { + // let mut codec = ReconstructedMessageCodec {}; + // let mut buf = BytesMut::from(&buffer[..n]); + // if let Ok(Some(_)) = codec.decode(&mut buf) { + // received += 1; + // } + // } + // _ => break, + // } + // } + // received + // }); + + // match writer_task.await { + // Ok(Ok(())) => {} + // Ok(Err(e)) => panic!("Writer task failed: {}", e), + // Err(e) => panic!("Writer task panicked: {:?}", e), + // } + + // let count = reader_task.await?; + + // info!("Sent 20 messages, received {}", count); + // assert!(count == 20); + // Ok(()) + // } #[tokio::test] - async fn simple_send_receive_split() -> Result<(), Box> { - // init_logging(); - let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done + async fn simple_surb_reply() -> Result<(), Box> { + init_logging(); + + let receiver_socket = MixSocket::new_test().await?; let receiver_address = receiver_socket.nym_address().clone(); let sender_socket = MixSocket::new_test().await?; let sender_address = sender_socket.nym_address().clone(); - let receiver_stream = MixStream::new(Some(receiver_socket), sender_address.clone()).await; - let sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; - let (mut reader, _receiver_writer) = receiver_stream.split(); - let (_sender_reader, mut writer) = sender_stream.split(); - - let message = b"Hello, Mixnet Split!"; - - let receiver_task = tokio::spawn(async move { - let mut buffer = [0u8; 1024]; - match reader.read(&mut buffer).await { - Ok(bytes_read) => { - if bytes_read > 0 { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..bytes_read]); - - match codec.decode(&mut buf) { - Ok(Some(decoded_message)) => { - let received_payload = decoded_message.message; - let payload_length = received_payload.len(); - - info!("Received {} bytes: {:?}", payload_length, received_payload); - return Ok((received_payload, payload_length)); - } - Ok(None) => println!( - "ReconstructedMessageCodec returned None - incomplete message?" - ), - Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), - } - } - Err(("No bytes read".to_string(), 0)) + let mut receiver_stream = + MixStream::new(Some(receiver_socket), sender_address.clone()).await; + let mut sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; + + sender_stream.write_bytes(b"Hello, Mixnet Split!").await?; + + let mut buffer = [0u8; 1024]; + match receiver_stream.read(&mut buffer).await { + Ok(bytes_read) if bytes_read > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..bytes_read]); + + if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { + let payload_surbs = decoded_message.sender_tag; + assert!(payload_surbs.is_some()); + receiver_stream.store_surbs(payload_surbs.unwrap()); + receiver_stream.write_bytes(b"Hello, Mixnet reply!").await?; } - Err(e) => Err((format!("Read error: {}", e), 0)), - } - }); - - writer.write_bytes(message).await?; - info!("Sent {} bytes", message.len()); - - let result = - tokio::time::timeout(tokio::time::Duration::from_secs(15), receiver_task).await; - - drop(_receiver_writer); - drop(_sender_reader); - - match result { - Ok(Ok(Ok((received_payload, payload_length)))) => { - assert_eq!( - payload_length, - message.len(), - "Length mismatch: expected {}, got {}", - message.len(), - payload_length - ); - - assert_eq!(received_payload.as_slice(), message, "Content mismatch"); - } - Ok(Ok(Err((error_msg, _)))) => { - panic!("Receiver task failed: {}", error_msg); - } - Ok(Err(e)) => { - panic!("Receiver task panicked: {:?}", e); - } - Err(_) => { - panic!("Test timed out"); } + _ => panic!("Failed to receive initial message"), } - Ok(()) - } - #[tokio::test] - async fn concurrent_send_receive() -> Result<(), Box> { - // init_logging(); - let socket = MixSocket::new_test().await?; // TODO change once socket impl is done - let addr = socket.nym_address().clone(); - let stream = MixStream::new(Some(socket), addr.clone()).await; - let (mut reader, mut writer) = stream.split(); - - let writer_task = tokio::spawn(async move { - for i in 0..20 { - let msg = format!("Message {}", i); - match writer.write_bytes(msg.as_bytes()).await { - Ok(()) => {} - Err(e) => { - return Err(format!("Write failed: {:?}", e)); - } - } - } - Ok(()) - }); + let mut reply_buffer = [0u8; 1024]; + let reply_result = tokio::time::timeout( + tokio::time::Duration::from_secs(30), + sender_stream.read(&mut reply_buffer), + ) + .await; - let reader_task = tokio::spawn(async move { - let mut received = 0; - let mut buffer = [0u8; 1024]; - - loop { - match tokio::time::timeout( - tokio::time::Duration::from_secs(5), - reader.read(&mut buffer), - ) - .await - { - Ok(Ok(n)) if n > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..n]); - if let Ok(Some(_)) = codec.decode(&mut buf) { - received += 1; - } - } - _ => break, + match reply_result { + Ok(Ok(bytes_read)) if bytes_read > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&reply_buffer[..bytes_read]); + + if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { + assert_eq!(decoded_message.message.as_slice(), b"Hello, Mixnet reply!"); } } - received - }); - - match writer_task.await { - Ok(Ok(())) => {} - Ok(Err(e)) => panic!("Writer task failed: {}", e), - Err(e) => panic!("Writer task panicked: {:?}", e), + _ => panic!("Failed to receive reply"), } - let count = reader_task.await?; - - info!("Sent 20 messages, received {}", count); - assert!(count == 20); - Ok(()) - } - - #[tokio::test] - async fn surb_reply() -> Result<(), Box> { - // init_logging(); - let socket = MixSocket::new_test().await?; // TODO change once socket impl is done - let addr = socket.nym_address().clone(); - let stream = MixStream::new(Some(socket), addr.clone()).await; - let (mut reader, mut writer) = stream.split(); - - // send message - // parse message - // get surb - // use as reply + receiver_stream.disconnect().await; + sender_stream.disconnect().await; Ok(()) } From 820dab73ea1f0e09f6814f551099e224c28dd7e8 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 26 Jun 2025 18:16:04 +0200 Subject: [PATCH 024/139] added surbs to split r/w + some streamlining + comments + tests --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 472 +++++++++++-------------- 1 file changed, 198 insertions(+), 274 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index 0c54a6a8e4f..a8acd4a6c2d 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -11,14 +11,13 @@ use std::pin::Pin; use std::sync::Arc; use std::task::{Context, Poll}; use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, ReadBuf}; -use tokio::sync::Mutex; +use tokio::sync::oneshot; use tokio_util::codec::{Decoder, Encoder}; use tracing::field::debug; use tracing::{debug, info, warn}; /** * TODO - * - check all works * - Convenience methods? Depends on what we want to put in here and what might be used / impl-ed in consuming libraries * - https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates/nym-ip-packet-client/src - hook into IPR * - builder pattern via MixSocket + tests @@ -107,14 +106,19 @@ impl MixStream { debug!("Splitting MixStream"); let sender = self.client.split_sender(); debug!("Split MixStream into Reader and Writer"); + let (surb_tx, surb_rx) = oneshot::channel(); ( MixStreamReader { client: self.client, - peer: self.peer.expect("No Peer set"), + peer: self.peer, + peer_surbs: self.peer_surbs, + surb_tx: Some(surb_tx), }, MixStreamWriter { sender, peer: self.peer.expect("No Peer set"), + peer_surbs: self.peer_surbs, + surb_rx: Some(surb_rx), }, ) } @@ -142,18 +146,12 @@ impl MixStream { let mut codec = InputMessageCodec {}; let mut serialized_bytes = BytesMut::new(); - codec - .encode(input_message, &mut serialized_bytes) - .map_err(|_| Error::MessageSendingFailure)?; + codec.encode(input_message, &mut serialized_bytes)?; info!("Serialized bytes: {:?}", serialized_bytes); - self.write_all(&serialized_bytes) - .await - .map_err(|_| Error::MessageSendingFailure)?; + self.write_all(&serialized_bytes).await?; info!("Wrote serialized bytes"); - self.flush() - .await - .map_err(|_| Error::MessageSendingFailure)?; + self.flush().await?; debug!("Flushed"); Ok(()) @@ -195,21 +193,37 @@ impl AsyncWrite for MixStream { } } -// TODO make peer + peer surbs optional as in Stream pub struct MixStreamReader { client: MixnetClient, - peer: Recipient, + peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. + peer_surbs: Option, // ..since we might just be using SURBs instead + surb_tx: Option>, } + impl MixStreamReader { - /// Nym address of StreamReader's Recipient (Nym Client it will communicate with). - pub fn peer_addr(&self) -> &Recipient { - &self.peer + /// Nym address of Stream's peer (Nym Client it will communicate with). + pub fn peer_addr(&self) -> Recipient { + let peer = &self.peer.expect("No Peer set"); + peer.clone() } /// Our Nym address. pub fn local_addr(&self) -> &Recipient { self.client.nym_address() } + + /// Store SURBs in both own field + send to the other side of the split so they can be used for the connection. + pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { + self.peer_surbs = Some(surbs); + if let Some(tx) = self.surb_tx.take() { + tx.send(surbs); // TODO err handling + } + } + + /// Stored SURBs (if any). + pub fn surbs(&self) -> Option { + self.peer_surbs + } } impl AsyncRead for MixStreamReader { @@ -222,52 +236,53 @@ impl AsyncRead for MixStreamReader { } } -// TODO make peer + peer surbs optional as in Stream pub struct MixStreamWriter { sender: MixnetClientSender, peer: Recipient, + peer_surbs: Option, + surb_rx: Option>, } impl MixStreamWriter { - // Convenience method for just piping bytes into the Mixnet. - // - // Commented out until new peer + surb model is added - // pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - // let input_message = if self.peer_surbs.is_some() { - // InputMessage::Reply { - // recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), - // data: (data.to_owned()), - // lane: (nym_task::connections::TransmissionLane::General), - // max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here - // } - // } else { - // InputMessage::Anonymous { - // recipient: (self.peer.expect("No Peer set")), - // data: (data.to_owned()), - // reply_surbs: (10), - // lane: (nym_task::connections::TransmissionLane::General), - // max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here - // } - // }; - - // let mut codec = InputMessageCodec {}; - // let mut serialized_bytes = BytesMut::new(); - // codec - // .encode(input_message, &mut serialized_bytes) - // .map_err(|_| Error::MessageSendingFailure)?; - // info!("Serialized bytes: {:?}", serialized_bytes); - - // self.write_all(&serialized_bytes) - // .await - // .map_err(|_| Error::MessageSendingFailure)?; - // info!("Wrote serialized bytes"); - // self.flush() - // .await - // .map_err(|_| Error::MessageSendingFailure)?; - // debug!("Flushed"); - - // Ok(()) - // } + /// Convenience method for just piping bytes into the Mixnet. + pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { + if self.peer_surbs.is_none() { + if let Some(mut rx) = self.surb_rx.take() { + if let Ok(surbs) = rx.try_recv() { + self.peer_surbs = Some(surbs); + } + } + } + + let input_message = if self.peer_surbs.is_some() { + InputMessage::Reply { + recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), + data: (data.to_owned()), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + } + } else { + InputMessage::Anonymous { + recipient: (self.peer), + data: (data.to_owned()), + reply_surbs: (10), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + } + }; + + let mut codec = InputMessageCodec {}; + let mut serialized_bytes = BytesMut::new(); + codec.encode(input_message, &mut serialized_bytes)?; + info!("Serialized bytes: {:?}", serialized_bytes); + + self.write_all(&serialized_bytes).await?; + info!("Wrote serialized bytes"); + self.flush().await?; + debug!("Flushed"); + + Ok(()) + } } impl AsyncWrite for MixStreamWriter { @@ -290,11 +305,8 @@ impl AsyncWrite for MixStreamWriter { /** * Tests TODO: - * * STREAM + STREAMREADER + STREAMWRITER - * - anonymous replies * - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) - * * SOCKET * - general tests: create new + various into() fns * @@ -319,219 +331,9 @@ mod tests { nym_bin_common::logging::setup_tracing_logger(); }); } - - // #[tokio::test] - // async fn simple_send_and_receive() -> Result<(), Box> { - // // init_logging(); - // let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done - // let receiver_address = receiver_socket.nym_address().clone(); - // let receiver_stream = MixStream::new(Some(receiver_socket), receiver_address.clone()).await; - // let mut sender_stream = MixStream::new(None, receiver_address).await; - - // let message = b"Hello, Mixnet!"; - - // let mut receiver_for_task = receiver_stream; - // let receiver_task = tokio::spawn(async move { - // let mut buffer = [0u8; 1024]; - // match receiver_for_task.read(&mut buffer).await { - // Ok(bytes_read) => { - // if bytes_read > 0 { - // let mut codec = ReconstructedMessageCodec {}; - // let mut buf = BytesMut::from(&buffer[..bytes_read]); - - // match codec.decode(&mut buf) { - // Ok(Some(decoded_message)) => { - // let received_payload = decoded_message.message; - // let received_surbs = decoded_message.sender_tag; - // let payload_length = received_payload.len(); - - // info!( - // "Received {} bytes: {:?} from {:?}", - // payload_length, received_payload, received_surbs - // ); - // return Ok((received_payload, payload_length)); - // } - // Ok(None) => println!( - // "ReconstructedMessageCodec returned None - incomplete message?" - // ), - // // TODO make panic - // Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), - // } - // } - // // TODO make panic - // Err(("No bytes read".to_string(), 0)) - // } - // // TODO make panic - // Err(e) => Err((format!("Read error: {}", e), 0)), - // } - // }); - - // sender_stream.write_bytes(message).await?; - // info!("Sent {} bytes", message.len()); - - // let result = - // tokio::time::timeout(tokio::time::Duration::from_secs(15), receiver_task).await; - // sender_stream.disconnect().await; - - // match result { - // Ok(Ok(Ok((received_payload, paylod_length)))) => { - // assert_eq!( - // paylod_length, - // message.len(), - // "Length mismatch: expected {}, got {}", - // message.len(), - // paylod_length - // ); - - // assert_eq!(received_payload.as_slice(), message, "Content mismatch"); - // } - // Ok(Ok(Err((error_msg, _)))) => { - // panic!("Receiver task failed: {}", error_msg); - // } - // Ok(Err(e)) => { - // panic!("Receiver task panicked: {:?}", e); - // } - // Err(_) => { - // panic!("Test timed out"); - // } - // } - // Ok(()) - // } - - // #[tokio::test] - // async fn simple_send_receive_split() -> Result<(), Box> { - // // init_logging(); - // let receiver_socket = MixSocket::new_test().await?; // TODO change once socket impl is done - // let receiver_address = receiver_socket.nym_address().clone(); - // let sender_socket = MixSocket::new_test().await?; - // let sender_address = sender_socket.nym_address().clone(); - // let receiver_stream = MixStream::new(Some(receiver_socket), sender_address.clone()).await; - // let sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; - // let (mut reader, _receiver_writer) = receiver_stream.split(); - // let (_sender_reader, mut writer) = sender_stream.split(); - - // let message = b"Hello, Mixnet Split!"; - - // let receiver_task = tokio::spawn(async move { - // let mut buffer = [0u8; 1024]; - // match reader.read(&mut buffer).await { - // Ok(bytes_read) => { - // if bytes_read > 0 { - // let mut codec = ReconstructedMessageCodec {}; - // let mut buf = BytesMut::from(&buffer[..bytes_read]); - - // match codec.decode(&mut buf) { - // Ok(Some(decoded_message)) => { - // let received_payload = decoded_message.message; - // let payload_length = received_payload.len(); - - // info!("Received {} bytes: {:?}", payload_length, received_payload); - // return Ok((received_payload, payload_length)); - // } - // Ok(None) => println!( - // "ReconstructedMessageCodec returned None - incomplete message?" - // ), - // Err(e) => println!("ReconstructedMessageCodec decode error: {:?}", e), - // } - // } - // Err(("No bytes read".to_string(), 0)) - // } - // Err(e) => Err((format!("Read error: {}", e), 0)), - // } - // }); - - // writer.write_bytes(message).await?; - // info!("Sent {} bytes", message.len()); - - // let result = - // tokio::time::timeout(tokio::time::Duration::from_secs(15), receiver_task).await; - - // match result { - // Ok(Ok(Ok((received_payload, payload_length)))) => { - // assert_eq!( - // payload_length, - // message.len(), - // "Length mismatch: expected {}, got {}", - // message.len(), - // payload_length - // ); - - // assert_eq!(received_payload.as_slice(), message, "Content mismatch"); - // } - // Ok(Ok(Err((error_msg, _)))) => { - // panic!("Receiver task failed: {}", error_msg); - // } - // Ok(Err(e)) => { - // panic!("Receiver task panicked: {:?}", e); - // } - // Err(_) => { - // panic!("Test timed out"); - // } - // } - // Ok(()) - // } - - // #[tokio::test] - // async fn concurrent_send_receive() -> Result<(), Box> { - // // init_logging(); - // let socket = MixSocket::new_test().await?; // TODO change once socket impl is done - // let addr = socket.nym_address().clone(); - // let stream = MixStream::new(Some(socket), addr.clone()).await; - // let (mut reader, mut writer) = stream.split(); - - // let writer_task = tokio::spawn(async move { - // for i in 0..20 { - // let msg = format!("Message {}", i); - // match writer.write_bytes(msg.as_bytes()).await { - // Ok(()) => {} - // Err(e) => { - // return Err(format!("Write failed: {:?}", e)); - // } - // } - // } - // Ok(()) - // }); - - // let reader_task = tokio::spawn(async move { - // let mut received = 0; - // let mut buffer = [0u8; 1024]; - - // loop { - // match tokio::time::timeout( - // tokio::time::Duration::from_secs(5), - // reader.read(&mut buffer), - // ) - // .await - // { - // Ok(Ok(n)) if n > 0 => { - // let mut codec = ReconstructedMessageCodec {}; - // let mut buf = BytesMut::from(&buffer[..n]); - // if let Ok(Some(_)) = codec.decode(&mut buf) { - // received += 1; - // } - // } - // _ => break, - // } - // } - // received - // }); - - // match writer_task.await { - // Ok(Ok(())) => {} - // Ok(Err(e)) => panic!("Writer task failed: {}", e), - // Err(e) => panic!("Writer task panicked: {:?}", e), - // } - - // let count = reader_task.await?; - - // info!("Sent 20 messages, received {}", count); - // assert!(count == 20); - // Ok(()) - // } - #[tokio::test] - async fn simple_surb_reply() -> Result<(), Box> { - init_logging(); + async fn simple_surb_reply_stream() -> Result<(), Box> { + // init_logging(); let receiver_socket = MixSocket::new_test().await?; let receiver_address = receiver_socket.nym_address().clone(); @@ -574,12 +376,134 @@ mod tests { if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { assert_eq!(decoded_message.message.as_slice(), b"Hello, Mixnet reply!"); } + info!("Got reply!"); } _ => panic!("Failed to receive reply"), } - receiver_stream.disconnect().await; - sender_stream.disconnect().await; + Ok(()) + } + + #[tokio::test] + async fn concurrent_surb_reply_split() -> Result<(), Box> { + // init_logging(); + + let sender_socket = MixSocket::new_test().await?; + let sender_address = sender_socket.nym_address().clone(); + let receiver_socket = MixSocket::new_test().await?; + let receiver_address = receiver_socket.nym_address().clone(); + let sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; + let receiver_stream = MixStream::new(Some(receiver_socket), sender_address.clone()).await; + + let (mut sender_reader, mut sender_writer) = sender_stream.split(); + let (mut receiver_reader, mut receiver_writer) = receiver_stream.split(); + + let sender_task = tokio::spawn(async move { + for i in 0..5 { + let msg = format!("Message {} requesting SURB reply", i); + sender_writer.write_bytes(msg.as_bytes()).await?; + info!("Sent message {}", i); + } + Ok::<_, Error>((sender_writer, 5)) + }); + + let receiver_task = tokio::spawn(async move { + let mut received_count = 0; + let mut sent_replies = 0; + let mut buffer = [0u8; 1024]; + + while received_count < 5 { + match tokio::time::timeout( + tokio::time::Duration::from_secs(10), + receiver_reader.read(&mut buffer), + ) + .await + { + Ok(Ok(bytes_read)) if bytes_read > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..bytes_read]); + + if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { + info!( + "Received: {:?}", + String::from_utf8_lossy(&decoded_message.message) + ); + + if received_count == 0 && decoded_message.sender_tag.is_some() { + receiver_reader.store_surbs(decoded_message.sender_tag.unwrap()); + info!("Stored SURBs"); + } + + received_count += 1; + + if received_count == 3 && sent_replies == 0 { + for i in 0..3 { + let reply = format!("SURB reply {}", i); + receiver_writer.write_bytes(reply.as_bytes()).await?; + info!("Sent SURB reply {}", i); + sent_replies += 1; + tokio::time::sleep(tokio::time::Duration::from_millis(200)) + .await; + } + } + } + } + _ => break, + } + } + + Ok::<_, Error>(( + receiver_reader, + receiver_writer, + received_count, + sent_replies, + )) + }); + + let reply_reader_task = tokio::spawn(async move { + let mut reply_count = 0; + let mut buffer = [0u8; 1024]; + + while reply_count < 3 { + match tokio::time::timeout( + tokio::time::Duration::from_secs(15), + sender_reader.read(&mut buffer), + ) + .await + { + Ok(Ok(bytes_read)) if bytes_read > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..bytes_read]); + + if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { + let reply_text = String::from_utf8_lossy(&decoded_message.message); + info!("Received reply: {}", reply_text); + assert!(reply_text.contains("SURB reply")); + reply_count += 1; + } + } + _ => { + if reply_count == 0 { + panic!("No SURB replies received"); + } + break; + } + } + } + + Ok::<_, Error>(reply_count) + }); + + let (_, sent_count) = sender_task.await??; + let (_, _, received_count, sent_replies) = receiver_task.await??; + let reply_count = reply_reader_task.await??; + + info!( + "Sent {} messages, received {} messages, sent {} SURB replies, received {} SURB replies", + sent_count, received_count, sent_replies, reply_count + ); + assert!(received_count == 5, "Didn't receive all messages!"); + assert!(reply_count == 3, "Didn't receive all replies!"); Ok(()) } From eb8bccf4361cad661c3e608a204fba5aa62f5fb1 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 1 Jul 2025 17:37:41 +0200 Subject: [PATCH 025/139] reorg --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 512 +----------------- .../stream_wrapper/mixnet_stream_wrapper.rs | 510 +++++++++++++++++ 2 files changed, 514 insertions(+), 508 deletions(-) create mode 100644 sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index a8acd4a6c2d..957c24fec27 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -1,510 +1,6 @@ -use crate::mixnet::InputMessage; -use crate::mixnet::{MixnetClient, MixnetClientSender, Recipient}; -use crate::Error; -use bytes::BytesMut; -use futures::SinkExt; -use nym_client_core::client::inbound_messages::InputMessageCodec; -use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; -use nym_sphinx::receiver::{ReconstructedMessage, ReconstructedMessageCodec}; -use std::io; -use std::pin::Pin; -use std::sync::Arc; -use std::task::{Context, Poll}; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, ReadBuf}; -use tokio::sync::oneshot; -use tokio_util::codec::{Decoder, Encoder}; -use tracing::field::debug; -use tracing::{debug, info, warn}; +//! TODO -/** - * TODO - * - Convenience methods? Depends on what we want to put in here and what might be used / impl-ed in consuming libraries - * - https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates/nym-ip-packet-client/src - hook into IPR - * - builder pattern via MixSocket + tests - */ +mod mixnet_stream_wrapper; -/// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. -/// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). -/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances from a single MixSocket, all connected to different Recipients. -pub struct MixSocket { - inner: MixnetClient, -} - -impl MixSocket { - /// Create a new socket that is disconnected from the Mixnet - kick off the Mixnet client with config for builder. - /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream instance. - pub async fn new() -> Result { - todo!() - } - - /// Connect to a specific peer (Nym Client) and return a Stream (cf TcpSocket::connect() / TcpStream::new()). - pub async fn connect_to(_recipient: Recipient) -> Result { - todo!() - } - - /// Get our Nym address. - pub fn nym_address(&self) -> &Recipient { - self.inner.nym_address() - } - - pub fn get_ref(&self) -> &MixnetClient { - &self.inner - } - - pub fn get_mut(&mut self) -> &mut MixnetClient { - &mut self.inner - } - - pub fn into_inner(self) -> MixnetClient { - self.inner - } -} - -pub struct MixStream { - client: MixnetClient, - peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. - peer_surbs: Option, // ..since we might just be using SURBs instead -} - -impl MixStream { - /// Create a MixStream instance and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient). - // TODO in future take config from MixSocket if exists in Option<> param, else spin up ephemeral client. Just doing ephemeral for initial sketch. - pub async fn new(socket: Option, peer: Recipient) -> Self { - let client = match socket { - Some(socket) => socket.into_inner(), - None => MixnetClient::connect_new().await.unwrap(), - }; - Self { - client, - peer: Some(peer), - peer_surbs: None, - } - } - - /// Nym address of Stream's peer (Nym Client it will communicate with). - pub fn peer_addr(&self) -> Recipient { - let peer = &self.peer.expect("No Peer set"); - peer.clone() - } - - /// Our Nym address. - pub fn local_addr(&self) -> &Recipient { - self.client.nym_address() - } - - pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { - self.peer_surbs = Some(surbs); - } - - /// Stored SURBs (if any). - pub fn surbs(&self) -> Option { - self.peer_surbs - } - - /// Split for concurrent read/write (like TcpStream::Split) into MixnetStreamReader and MixnetStreamWriter. - pub fn split(self) -> (MixStreamReader, MixStreamWriter) { - debug!("Splitting MixStream"); - let sender = self.client.split_sender(); - debug!("Split MixStream into Reader and Writer"); - let (surb_tx, surb_rx) = oneshot::channel(); - ( - MixStreamReader { - client: self.client, - peer: self.peer, - peer_surbs: self.peer_surbs, - surb_tx: Some(surb_tx), - }, - MixStreamWriter { - sender, - peer: self.peer.expect("No Peer set"), - peer_surbs: self.peer_surbs, - surb_rx: Some(surb_rx), - }, - ) - } - - /// Convenience method for just piping bytes into the Mixnet. - pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - let input_message = if self.peer_surbs.is_some() { - info!("Writing reply with SURBs"); - InputMessage::Reply { - recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), - data: (data.to_owned()), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here - } - } else { - info!("Writing outgoing reply using Nym address"); - InputMessage::Anonymous { - recipient: (self.peer.expect("No Peer set")), - data: (data.to_owned()), - reply_surbs: (10), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here - } - }; - - let mut codec = InputMessageCodec {}; - let mut serialized_bytes = BytesMut::new(); - codec.encode(input_message, &mut serialized_bytes)?; - info!("Serialized bytes: {:?}", serialized_bytes); - - self.write_all(&serialized_bytes).await?; - info!("Wrote serialized bytes"); - self.flush().await?; - debug!("Flushed"); - - Ok(()) - } - - /// Disconnect client from the Mixnet - note that disconnected clients cannot currently be reconnected. - pub async fn disconnect(self) { - debug!("Disconnecting"); - self.client.disconnect().await; - debug!("Disconnected"); - } -} - -impl AsyncRead for MixStream { - fn poll_read( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &mut ReadBuf<'_>, - ) -> Poll> { - Pin::new(&mut self.client).poll_read(cx, buf) - } -} - -impl AsyncWrite for MixStream { - fn poll_write( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &[u8], - ) -> Poll> { - Pin::new(&mut self.client).poll_write(cx, buf) - } - - fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.client).poll_flush(cx) - } - - fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.client).poll_shutdown(cx) - } -} - -pub struct MixStreamReader { - client: MixnetClient, - peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. - peer_surbs: Option, // ..since we might just be using SURBs instead - surb_tx: Option>, -} - -impl MixStreamReader { - /// Nym address of Stream's peer (Nym Client it will communicate with). - pub fn peer_addr(&self) -> Recipient { - let peer = &self.peer.expect("No Peer set"); - peer.clone() - } - - /// Our Nym address. - pub fn local_addr(&self) -> &Recipient { - self.client.nym_address() - } - - /// Store SURBs in both own field + send to the other side of the split so they can be used for the connection. - pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { - self.peer_surbs = Some(surbs); - if let Some(tx) = self.surb_tx.take() { - tx.send(surbs); // TODO err handling - } - } - - /// Stored SURBs (if any). - pub fn surbs(&self) -> Option { - self.peer_surbs - } -} - -impl AsyncRead for MixStreamReader { - fn poll_read( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &mut ReadBuf<'_>, - ) -> Poll> { - Pin::new(&mut self.client).poll_read(cx, buf) - } -} - -pub struct MixStreamWriter { - sender: MixnetClientSender, - peer: Recipient, - peer_surbs: Option, - surb_rx: Option>, -} - -impl MixStreamWriter { - /// Convenience method for just piping bytes into the Mixnet. - pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - if self.peer_surbs.is_none() { - if let Some(mut rx) = self.surb_rx.take() { - if let Ok(surbs) = rx.try_recv() { - self.peer_surbs = Some(surbs); - } - } - } - - let input_message = if self.peer_surbs.is_some() { - InputMessage::Reply { - recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), - data: (data.to_owned()), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here - } - } else { - InputMessage::Anonymous { - recipient: (self.peer), - data: (data.to_owned()), - reply_surbs: (10), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here - } - }; - - let mut codec = InputMessageCodec {}; - let mut serialized_bytes = BytesMut::new(); - codec.encode(input_message, &mut serialized_bytes)?; - info!("Serialized bytes: {:?}", serialized_bytes); - - self.write_all(&serialized_bytes).await?; - info!("Wrote serialized bytes"); - self.flush().await?; - debug!("Flushed"); - - Ok(()) - } -} - -impl AsyncWrite for MixStreamWriter { - fn poll_write( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &[u8], - ) -> Poll> { - Pin::new(&mut self.sender).poll_write(cx, buf) - } - - fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.sender).poll_flush(cx) - } - - fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.sender).poll_shutdown(cx) - } -} - -/** - * Tests TODO: - * STREAM + STREAMREADER + STREAMWRITER - * - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) - * SOCKET - * - general tests: create new + various into() fns - * - */ -#[cfg(test)] -mod tests { - use super::*; - use std::sync::Once; - - // Quick test fn for easy testing of sending to self before writing Socket impl (see above todo) - impl MixSocket { - pub async fn new_test() -> Result { - let inner = MixnetClient::connect_new().await?; - Ok(MixSocket { inner }) - } - } - - static INIT: Once = Once::new(); - - fn init_logging() { - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); - }); - } - #[tokio::test] - async fn simple_surb_reply_stream() -> Result<(), Box> { - // init_logging(); - - let receiver_socket = MixSocket::new_test().await?; - let receiver_address = receiver_socket.nym_address().clone(); - let sender_socket = MixSocket::new_test().await?; - let sender_address = sender_socket.nym_address().clone(); - let mut receiver_stream = - MixStream::new(Some(receiver_socket), sender_address.clone()).await; - let mut sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; - - sender_stream.write_bytes(b"Hello, Mixnet Split!").await?; - - let mut buffer = [0u8; 1024]; - match receiver_stream.read(&mut buffer).await { - Ok(bytes_read) if bytes_read > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..bytes_read]); - - if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { - let payload_surbs = decoded_message.sender_tag; - assert!(payload_surbs.is_some()); - receiver_stream.store_surbs(payload_surbs.unwrap()); - receiver_stream.write_bytes(b"Hello, Mixnet reply!").await?; - } - } - _ => panic!("Failed to receive initial message"), - } - - let mut reply_buffer = [0u8; 1024]; - let reply_result = tokio::time::timeout( - tokio::time::Duration::from_secs(30), - sender_stream.read(&mut reply_buffer), - ) - .await; - - match reply_result { - Ok(Ok(bytes_read)) if bytes_read > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&reply_buffer[..bytes_read]); - - if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { - assert_eq!(decoded_message.message.as_slice(), b"Hello, Mixnet reply!"); - } - info!("Got reply!"); - } - _ => panic!("Failed to receive reply"), - } - - Ok(()) - } - - #[tokio::test] - async fn concurrent_surb_reply_split() -> Result<(), Box> { - // init_logging(); - - let sender_socket = MixSocket::new_test().await?; - let sender_address = sender_socket.nym_address().clone(); - let receiver_socket = MixSocket::new_test().await?; - let receiver_address = receiver_socket.nym_address().clone(); - let sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; - let receiver_stream = MixStream::new(Some(receiver_socket), sender_address.clone()).await; - - let (mut sender_reader, mut sender_writer) = sender_stream.split(); - let (mut receiver_reader, mut receiver_writer) = receiver_stream.split(); - - let sender_task = tokio::spawn(async move { - for i in 0..5 { - let msg = format!("Message {} requesting SURB reply", i); - sender_writer.write_bytes(msg.as_bytes()).await?; - info!("Sent message {}", i); - } - Ok::<_, Error>((sender_writer, 5)) - }); - - let receiver_task = tokio::spawn(async move { - let mut received_count = 0; - let mut sent_replies = 0; - let mut buffer = [0u8; 1024]; - - while received_count < 5 { - match tokio::time::timeout( - tokio::time::Duration::from_secs(10), - receiver_reader.read(&mut buffer), - ) - .await - { - Ok(Ok(bytes_read)) if bytes_read > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..bytes_read]); - - if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { - info!( - "Received: {:?}", - String::from_utf8_lossy(&decoded_message.message) - ); - - if received_count == 0 && decoded_message.sender_tag.is_some() { - receiver_reader.store_surbs(decoded_message.sender_tag.unwrap()); - info!("Stored SURBs"); - } - - received_count += 1; - - if received_count == 3 && sent_replies == 0 { - for i in 0..3 { - let reply = format!("SURB reply {}", i); - receiver_writer.write_bytes(reply.as_bytes()).await?; - info!("Sent SURB reply {}", i); - sent_replies += 1; - tokio::time::sleep(tokio::time::Duration::from_millis(200)) - .await; - } - } - } - } - _ => break, - } - } - - Ok::<_, Error>(( - receiver_reader, - receiver_writer, - received_count, - sent_replies, - )) - }); - - let reply_reader_task = tokio::spawn(async move { - let mut reply_count = 0; - let mut buffer = [0u8; 1024]; - - while reply_count < 3 { - match tokio::time::timeout( - tokio::time::Duration::from_secs(15), - sender_reader.read(&mut buffer), - ) - .await - { - Ok(Ok(bytes_read)) if bytes_read > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..bytes_read]); - - if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { - let reply_text = String::from_utf8_lossy(&decoded_message.message); - info!("Received reply: {}", reply_text); - assert!(reply_text.contains("SURB reply")); - reply_count += 1; - } - } - _ => { - if reply_count == 0 { - panic!("No SURB replies received"); - } - break; - } - } - } - - Ok::<_, Error>(reply_count) - }); - - let (_, sent_count) = sender_task.await??; - let (_, _, received_count, sent_replies) = receiver_task.await??; - let reply_count = reply_reader_task.await??; - - info!( - "Sent {} messages, received {} messages, sent {} SURB replies, received {} SURB replies", - sent_count, received_count, sent_replies, reply_count - ); - assert!(received_count == 5, "Didn't receive all messages!"); - assert!(reply_count == 3, "Didn't receive all replies!"); - - Ok(()) - } -} +pub use mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; +// pub use stream_wrapper::StreamWrapperIPR; diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs new file mode 100644 index 00000000000..715548cf8b2 --- /dev/null +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -0,0 +1,510 @@ +use crate::mixnet::InputMessage; +use crate::mixnet::{MixnetClient, MixnetClientSender, Recipient}; +use crate::Error; +use bytes::BytesMut; +use futures::SinkExt; +use nym_client_core::client::inbound_messages::InputMessageCodec; +use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; +use nym_sphinx::receiver::{ReconstructedMessage, ReconstructedMessageCodec}; +use std::io; +use std::pin::Pin; +use std::sync::Arc; +use std::task::{Context, Poll}; +use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, ReadBuf}; +use tokio::sync::oneshot; +use tokio_util::codec::{Decoder, Encoder}; +use tracing::field::debug; +use tracing::{debug, info, warn}; + +/** + * TODO + * - Convenience methods? Depends on what we want to put in here and what might be used / impl-ed in consuming libraries + * - https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates/nym-ip-packet-client/src - hook into IPR + * - builder pattern via MixSocket + tests + */ + +/// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. +/// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). +/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances from a single MixSocket, all connected to different Recipients. +pub struct MixSocket { + inner: MixnetClient, +} + +impl MixSocket { + /// Create a new socket that is disconnected from the Mixnet - kick off the Mixnet client with config for builder. + /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream instance. + pub async fn new() -> Result { + todo!() + } + + /// Connect to a specific peer (Nym Client) and return a Stream (cf TcpSocket::connect() / TcpStream::new()). + pub async fn connect_to(_recipient: Recipient) -> Result { + todo!() + } + + /// Get our Nym address. + pub fn nym_address(&self) -> &Recipient { + self.inner.nym_address() + } + + pub fn get_ref(&self) -> &MixnetClient { + &self.inner + } + + pub fn get_mut(&mut self) -> &mut MixnetClient { + &mut self.inner + } + + pub fn into_inner(self) -> MixnetClient { + self.inner + } +} + +pub struct MixStream { + client: MixnetClient, + peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. + peer_surbs: Option, // ..since we might just be using SURBs instead +} + +impl MixStream { + /// Create a MixStream instance and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient). + // TODO in future take config from MixSocket if exists in Option<> param, else spin up ephemeral client. Just doing ephemeral for initial sketch. + pub async fn new(socket: Option, peer: Recipient) -> Self { + let client = match socket { + Some(socket) => socket.into_inner(), + None => MixnetClient::connect_new().await.unwrap(), + }; + Self { + client, + peer: Some(peer), + peer_surbs: None, + } + } + + /// Nym address of Stream's peer (Nym Client it will communicate with). + pub fn peer_addr(&self) -> Recipient { + let peer = &self.peer.expect("No Peer set"); + peer.clone() + } + + /// Our Nym address. + pub fn local_addr(&self) -> &Recipient { + self.client.nym_address() + } + + /// Store SURBs in own field. + pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { + self.peer_surbs = Some(surbs); + } + + /// Get SURBs (if any). + pub fn surbs(&self) -> Option { + self.peer_surbs + } + + /// Split for concurrent read/write (like TcpStream::Split) into MixnetStreamReader and MixnetStreamWriter. + pub fn split(self) -> (MixStreamReader, MixStreamWriter) { + debug!("Splitting MixStream"); + let sender = self.client.split_sender(); + debug!("Split MixStream into Reader and Writer"); + let (surb_tx, surb_rx) = oneshot::channel(); + ( + MixStreamReader { + client: self.client, + peer: self.peer, + peer_surbs: self.peer_surbs, + surb_tx: Some(surb_tx), + }, + MixStreamWriter { + sender, + peer: self.peer.expect("No Peer set"), + peer_surbs: self.peer_surbs, + surb_rx: Some(surb_rx), + }, + ) + } + + /// Convenience method for just piping bytes into the Mixnet. + pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { + let input_message = if self.peer_surbs.is_some() { + info!("Writing reply with SURBs"); + InputMessage::Reply { + recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), + data: (data.to_owned()), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + } + } else { + info!("Writing outgoing reply using Nym address"); + InputMessage::Anonymous { + recipient: (self.peer.expect("No Peer set")), + data: (data.to_owned()), + reply_surbs: (10), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + } + }; + + let mut codec = InputMessageCodec {}; + let mut serialized_bytes = BytesMut::new(); + codec.encode(input_message, &mut serialized_bytes)?; + info!("Serialized bytes: {:?}", serialized_bytes); + + self.write_all(&serialized_bytes).await?; + info!("Wrote serialized bytes"); + self.flush().await?; + debug!("Flushed"); + + Ok(()) + } + + /// Disconnect client from the Mixnet - note that disconnected clients cannot currently be reconnected. + pub async fn disconnect(self) { + debug!("Disconnecting"); + self.client.disconnect().await; + debug!("Disconnected"); + } +} + +impl AsyncRead for MixStream { + fn poll_read( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut ReadBuf<'_>, + ) -> Poll> { + Pin::new(&mut self.client).poll_read(cx, buf) + } +} + +impl AsyncWrite for MixStream { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + Pin::new(&mut self.client).poll_write(cx, buf) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.client).poll_flush(cx) + } + + fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.client).poll_shutdown(cx) + } +} + +pub struct MixStreamReader { + client: MixnetClient, + peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. + peer_surbs: Option, // ..since we might just be using SURBs instead + surb_tx: Option>, +} + +impl MixStreamReader { + /// Nym address of Stream's peer (Nym Client it will communicate with). + pub fn peer_addr(&self) -> Recipient { + let peer = &self.peer.expect("No Peer set"); + peer.clone() + } + + /// Our Nym address. + pub fn local_addr(&self) -> &Recipient { + self.client.nym_address() + } + + /// Store SURBs in both own field + send to the other side of the split so they can be used for the connection. + pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { + self.peer_surbs = Some(surbs); + if let Some(tx) = self.surb_tx.take() { + tx.send(surbs); // TODO err handling + } + } + + /// Stored SURBs (if any). + pub fn surbs(&self) -> Option { + self.peer_surbs + } +} + +impl AsyncRead for MixStreamReader { + fn poll_read( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut ReadBuf<'_>, + ) -> Poll> { + Pin::new(&mut self.client).poll_read(cx, buf) + } +} + +pub struct MixStreamWriter { + sender: MixnetClientSender, + peer: Recipient, + peer_surbs: Option, + surb_rx: Option>, +} + +impl MixStreamWriter { + /// Convenience method for just piping bytes into the Mixnet. + pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { + if self.peer_surbs.is_none() { + if let Some(mut rx) = self.surb_rx.take() { + if let Ok(surbs) = rx.try_recv() { + self.peer_surbs = Some(surbs); + } + } + } + + let input_message = if self.peer_surbs.is_some() { + InputMessage::Reply { + recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), + data: (data.to_owned()), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + } + } else { + InputMessage::Anonymous { + recipient: (self.peer), + data: (data.to_owned()), + reply_surbs: (10), + lane: (nym_task::connections::TransmissionLane::General), + max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + } + }; + + let mut codec = InputMessageCodec {}; + let mut serialized_bytes = BytesMut::new(); + codec.encode(input_message, &mut serialized_bytes)?; + info!("Serialized bytes: {:?}", serialized_bytes); + + self.write_all(&serialized_bytes).await?; + info!("Wrote serialized bytes"); + self.flush().await?; + debug!("Flushed"); + + Ok(()) + } +} + +impl AsyncWrite for MixStreamWriter { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + Pin::new(&mut self.sender).poll_write(cx, buf) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.sender).poll_flush(cx) + } + + fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.sender).poll_shutdown(cx) + } +} + +/** + * Tests TODO: + * STREAM + STREAMREADER + STREAMWRITER + * - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) + * SOCKET + * - general tests: create new + various into() fns + */ +#[cfg(test)] +mod tests { + use super::*; + use std::sync::Once; + + // Quick test fn for easy testing of sending to self before writing Socket impl (see above todo) + impl MixSocket { + pub async fn new_test() -> Result { + let inner = MixnetClient::connect_new().await?; + Ok(MixSocket { inner }) + } + } + + static INIT: Once = Once::new(); + + fn init_logging() { + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); + } + #[tokio::test] + async fn simple_surb_reply_stream() -> Result<(), Box> { + // init_logging(); + + let receiver_socket = MixSocket::new_test().await?; + let receiver_address = receiver_socket.nym_address().clone(); + let sender_socket = MixSocket::new_test().await?; + let sender_address = sender_socket.nym_address().clone(); + let mut receiver_stream = + MixStream::new(Some(receiver_socket), sender_address.clone()).await; + let mut sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; + + sender_stream.write_bytes(b"Hello, Mixnet Split!").await?; + + let mut buffer = [0u8; 1024]; + match receiver_stream.read(&mut buffer).await { + Ok(bytes_read) if bytes_read > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..bytes_read]); + + if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { + let payload_surbs = decoded_message.sender_tag; + assert!(payload_surbs.is_some()); + receiver_stream.store_surbs(payload_surbs.unwrap()); + receiver_stream.write_bytes(b"Hello, Mixnet reply!").await?; + } + } + _ => panic!("Failed to receive initial message"), + } + + let mut reply_buffer = [0u8; 1024]; + let reply_result = tokio::time::timeout( + tokio::time::Duration::from_secs(30), + sender_stream.read(&mut reply_buffer), + ) + .await; + + match reply_result { + Ok(Ok(bytes_read)) if bytes_read > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&reply_buffer[..bytes_read]); + + if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { + assert_eq!(decoded_message.message.as_slice(), b"Hello, Mixnet reply!"); + } + info!("Got reply!"); + } + _ => panic!("Failed to receive reply"), + } + + Ok(()) + } + + #[tokio::test] + async fn concurrent_surb_reply_split() -> Result<(), Box> { + // init_logging(); + + let sender_socket = MixSocket::new_test().await?; + let sender_address = sender_socket.nym_address().clone(); + let receiver_socket = MixSocket::new_test().await?; + let receiver_address = receiver_socket.nym_address().clone(); + let sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; + let receiver_stream = MixStream::new(Some(receiver_socket), sender_address.clone()).await; + + let (mut sender_reader, mut sender_writer) = sender_stream.split(); + let (mut receiver_reader, mut receiver_writer) = receiver_stream.split(); + + let sender_task = tokio::spawn(async move { + for i in 0..5 { + let msg = format!("Message {} requesting SURB reply", i); + sender_writer.write_bytes(msg.as_bytes()).await?; + info!("Sent message {}", i); + } + Ok::<_, Error>((sender_writer, 5)) + }); + + let receiver_task = tokio::spawn(async move { + let mut received_count = 0; + let mut sent_replies = 0; + let mut buffer = [0u8; 1024]; + + while received_count < 5 { + match tokio::time::timeout( + tokio::time::Duration::from_secs(10), + receiver_reader.read(&mut buffer), + ) + .await + { + Ok(Ok(bytes_read)) if bytes_read > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..bytes_read]); + + if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { + info!( + "Received: {:?}", + String::from_utf8_lossy(&decoded_message.message) + ); + + if received_count == 0 && decoded_message.sender_tag.is_some() { + receiver_reader.store_surbs(decoded_message.sender_tag.unwrap()); + info!("Stored SURBs"); + } + + received_count += 1; + + if received_count == 3 && sent_replies == 0 { + for i in 0..3 { + let reply = format!("SURB reply {}", i); + receiver_writer.write_bytes(reply.as_bytes()).await?; + info!("Sent SURB reply {}", i); + sent_replies += 1; + tokio::time::sleep(tokio::time::Duration::from_millis(200)) + .await; + } + } + } + } + _ => break, + } + } + + Ok::<_, Error>(( + receiver_reader, + receiver_writer, + received_count, + sent_replies, + )) + }); + + let reply_reader_task = tokio::spawn(async move { + let mut reply_count = 0; + let mut buffer = [0u8; 1024]; + + while reply_count < 3 { + match tokio::time::timeout( + tokio::time::Duration::from_secs(15), + sender_reader.read(&mut buffer), + ) + .await + { + Ok(Ok(bytes_read)) if bytes_read > 0 => { + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..bytes_read]); + + if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { + let reply_text = String::from_utf8_lossy(&decoded_message.message); + info!("Received reply: {}", reply_text); + assert!(reply_text.contains("SURB reply")); + reply_count += 1; + } + } + _ => { + if reply_count == 0 { + panic!("No SURB replies received"); + } + break; + } + } + } + + Ok::<_, Error>(reply_count) + }); + + let (_, sent_count) = sender_task.await??; + let (_, _, received_count, sent_replies) = receiver_task.await??; + let reply_count = reply_reader_task.await??; + + info!( + "Sent {} messages, received {} messages, sent {} SURB replies, received {} SURB replies", + sent_count, received_count, sent_replies, reply_count + ); + assert!(received_count == 5, "Didn't receive all messages!"); + assert!(reply_count == 3, "Didn't receive all replies!"); + + Ok(()) + } +} From aa84145ef728481ab33aac5cc37844a7620332f4 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 3 Jul 2025 12:21:09 +0200 Subject: [PATCH 026/139] commit before messing with reexport stuff --- sdk/rust/nym-sdk/Cargo.toml | 4 ++++ sdk/rust/nym-sdk/src/stream_wrapper.rs | 3 ++- .../mixnet_stream_wrapper_ipr.rs | 22 +++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index 4984f35886d..e59f2308626 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -47,6 +47,10 @@ nym-sphinx-addressing = { path = "../../../common/nymsphinx/addressing" } nym-bin-common = { path = "../../../common/bin-common", features = [ "basic_tracing", ] } + +nym-ip-packet-client = { git = "https://github.com/nymtech/nym-vpn-client", rev = "5c3aacfce158aac73cbd3fd905d90269f8bacc01" } # max/re-export-test https://github.com/nymtech/nym-vpn-client/commit/5c3aacfce158aac73cbd3fd905d90269f8bacc01 +# nym-gateway-directory + bytecodec = { workspace = true } httpcodec = { workspace = true } bytes = { workspace = true } diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index 957c24fec27..c032cd6842d 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -1,6 +1,7 @@ //! TODO mod mixnet_stream_wrapper; +mod mixnet_stream_wrapper_ipr; pub use mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; -// pub use stream_wrapper::StreamWrapperIPR; +// pub use mixnet_stream_wrapper_ipr::{} TODO diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs new file mode 100644 index 00000000000..2b0b122da50 --- /dev/null +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -0,0 +1,22 @@ +use super::mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; +use futures::StreamExt; +// use nym_gateway_directory::IpPacketRouterAddress; +// use nym_ip_packet_requests::{ +// codec::MultiIpPacketCodec, +// v8::{ +// request::{ControlRequest, IpPacketRequest, IpPacketRequestData}, +// response::{ +// ConnectResponse, ConnectResponseReply, ControlResponse, InfoLevel, IpPacketResponse, +// IpPacketResponseData, +// }, +// }, +// IpPair, +// }; +use nym_sphinx::receiver::ReconstructedMessage; +use std::io; +use std::pin::Pin; +use std::task::{Context, Poll}; +use std::time::Duration; +use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, ReadBuf}; +use tokio_util::codec::FramedRead; +use tracing::{debug, error, info, warn}; From 4862b4ad9a0326e8b9b60d33635c233016b16f80 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 4 Jul 2025 13:44:18 +0200 Subject: [PATCH 027/139] temp commit: got gateway dir dependency working, moving on to vpn-api-client --- Cargo.lock | 13042 ---------------- Cargo.toml | 2 + nym-gateway-directory/Cargo.toml | 31 + nym-gateway-directory/src/caching_client.rs | 329 + .../src/entries/auth_addresses.rs | 57 + nym-gateway-directory/src/entries/country.rs | 31 + .../src/entries/entry_point.rs | 78 + .../src/entries/exit_point.rs | 92 + nym-gateway-directory/src/entries/gateway.rs | 535 + .../src/entries/ipr_addresses.rs | 56 + nym-gateway-directory/src/entries/mod.rs | 7 + nym-gateway-directory/src/entries/score.rs | 34 + nym-gateway-directory/src/error.rs | 93 + nym-gateway-directory/src/gateway_client.rs | 508 + nym-gateway-directory/src/helpers.rs | 64 + nym-gateway-directory/src/lib.rs | 29 + nym-ip-packet-client/Cargo.toml | 6 +- nym-ip-packet-client/src/error.rs | 7 + nym-ip-packet-client/src/listener.rs | 2 +- nym-vpn-api-client/Cargo.toml | 40 + nym-vpn-api-client/src/bootstrap.rs | 65 + nym-vpn-api-client/src/client.rs | 1164 ++ nym-vpn-api-client/src/error.rs | 143 + nym-vpn-api-client/src/jwt.rs | 247 + nym-vpn-api-client/src/lib.rs | 19 + .../src/network_compatibility.rs | 35 + nym-vpn-api-client/src/request.rs | 99 + nym-vpn-api-client/src/response.rs | 658 + nym-vpn-api-client/src/routes.rs | 33 + nym-vpn-api-client/src/types/account.rs | 248 + nym-vpn-api-client/src/types/device.rs | 222 + nym-vpn-api-client/src/types/gateway.rs | 63 + nym-vpn-api-client/src/types/mod.rs | 17 + nym-vpn-api-client/src/types/platform.rs | 16 + nym-vpn-api-client/src/types/test_fixtures.rs | 11 + sdk/rust/nym-sdk/Cargo.toml | 2 +- 36 files changed, 5038 insertions(+), 13047 deletions(-) delete mode 100644 Cargo.lock create mode 100644 nym-gateway-directory/Cargo.toml create mode 100644 nym-gateway-directory/src/caching_client.rs create mode 100644 nym-gateway-directory/src/entries/auth_addresses.rs create mode 100644 nym-gateway-directory/src/entries/country.rs create mode 100644 nym-gateway-directory/src/entries/entry_point.rs create mode 100644 nym-gateway-directory/src/entries/exit_point.rs create mode 100644 nym-gateway-directory/src/entries/gateway.rs create mode 100644 nym-gateway-directory/src/entries/ipr_addresses.rs create mode 100644 nym-gateway-directory/src/entries/mod.rs create mode 100644 nym-gateway-directory/src/entries/score.rs create mode 100644 nym-gateway-directory/src/error.rs create mode 100644 nym-gateway-directory/src/gateway_client.rs create mode 100644 nym-gateway-directory/src/helpers.rs create mode 100644 nym-gateway-directory/src/lib.rs create mode 100644 nym-vpn-api-client/Cargo.toml create mode 100644 nym-vpn-api-client/src/bootstrap.rs create mode 100644 nym-vpn-api-client/src/client.rs create mode 100644 nym-vpn-api-client/src/error.rs create mode 100644 nym-vpn-api-client/src/jwt.rs create mode 100644 nym-vpn-api-client/src/lib.rs create mode 100644 nym-vpn-api-client/src/network_compatibility.rs create mode 100644 nym-vpn-api-client/src/request.rs create mode 100644 nym-vpn-api-client/src/response.rs create mode 100644 nym-vpn-api-client/src/routes.rs create mode 100644 nym-vpn-api-client/src/types/account.rs create mode 100644 nym-vpn-api-client/src/types/device.rs create mode 100644 nym-vpn-api-client/src/types/gateway.rs create mode 100644 nym-vpn-api-client/src/types/mod.rs create mode 100644 nym-vpn-api-client/src/types/platform.rs create mode 100644 nym-vpn-api-client/src/types/test_fixtures.rs diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index f0f2c68eaa6..00000000000 --- a/Cargo.lock +++ /dev/null @@ -1,13042 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "accessory" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e416a3ab45838bac2ab2d81b1088d738d7b2d2c5272a54d39366565a29bd80" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "addr" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" -dependencies = [ - "psl", - "psl-types", -] - -[[package]] -name = "adler2" -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", - "generic-array 0.14.9", -] - -[[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 2.6.1", -] - -[[package]] -name = "aes-gcm-siv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "polyval", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "ammonia" -version = "4.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" -dependencies = [ - "cssparser", - "html5ever", - "maplit", - "tendril", - "url", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstream" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" -dependencies = [ - "windows-sys 0.60.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.60.2", -] - -[[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - -[[package]] -name = "argon2" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" -dependencies = [ - "base64ct", - "blake2 0.10.6", - "cpufeatures", - "password-hash", -] - -[[package]] -name = "ark-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "rayon", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rayon", - "rustc_version 0.4.1", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand 0.8.5", - "rayon", -] - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "askama" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7" -dependencies = [ - "askama_derive", - "itoa", - "percent-encoding", - "serde", - "serde_json", -] - -[[package]] -name = "askama_derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac" -dependencies = [ - "askama_parser", - "basic-toml", - "memchr", - "proc-macro2", - "quote", - "rustc-hash", - "serde", - "serde_derive", - "syn 2.0.107", -] - -[[package]] -name = "askama_parser" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f" -dependencies = [ - "memchr", - "serde", - "serde_derive", - "winnow", -] - -[[package]] -name = "assert-json-diff" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - -[[package]] -name = "async-compression" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" -dependencies = [ - "compression-codecs", - "compression-core", - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "async-lock" -version = "3.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" -dependencies = [ - "event-listener 5.4.1", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "async-tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3609af4bbf701ddaf1f6bb4e6257dff4ff8932327d0e685d3f653724c258b1ac" -dependencies = [ - "futures-io", - "futures-util", - "log", - "pin-project-lite", - "rustls-native-certs 0.7.3", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.25.0", - "tungstenite 0.21.0", -] - -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "auto-future" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "autodoc" -version = "0.1.0" -dependencies = [ - "env_logger", - "log", -] - -[[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.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "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.2", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-client-ip" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" -dependencies = [ - "axum", - "forwarded-header-value", - "serde", -] - -[[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.3.1", - "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-extra" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" -dependencies = [ - "axum", - "axum-core", - "bytes", - "fastrand 2.3.0", - "futures-util", - "headers", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "mime", - "multer", - "pin-project-lite", - "serde", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - -[[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.107", -] - -[[package]] -name = "axum-test" -version = "16.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e3a443d2608936a02a222da7b746eb412fede7225b3030b64fe9be99eab8dc" -dependencies = [ - "anyhow", - "assert-json-diff", - "auto-future", - "axum", - "bytes", - "bytesize", - "cookie", - "http 1.3.1", - "http-body-util", - "hyper 1.7.0", - "hyper-util", - "mime", - "pretty_assertions", - "reserve-port", - "rust-multipart-rfc7578_2", - "serde", - "serde_json", - "serde_urlencoded", - "smallvec", - "tokio", - "tower 0.5.2", - "url", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" - -[[package]] -name = "base85rs" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87678d33a2af71f019ed11f52db246ca6c5557edee2cccbe689676d1ad9c6b5a" - -[[package]] -name = "basic-toml" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" -dependencies = [ - "serde", -] - -[[package]] -name = "bech32" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "binstring" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" - -[[package]] -name = "bip32" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" -dependencies = [ - "bs58", - "hmac", - "k256", - "rand_core 0.6.4", - "ripemd", - "secp256k1", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "bip39" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "rand_core 0.6.4", - "serde", - "unicode-normalization", - "zeroize", -] - -[[package]] -name = "bitcoin-internals" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" - -[[package]] -name = "bitcoin_hashes" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" -dependencies = [ - "bitcoin-internals", - "hex-conservative", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" -dependencies = [ - "serde_core", -] - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "digest 0.10.7", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "bloomfilter" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" -dependencies = [ - "getrandom 0.2.16", - "siphasher 1.0.1", -] - -[[package]] -name = "bls12_381" -version = "0.8.0" -source = "git+https://github.com/jstuczyn/bls12_381?branch=temp%2Fexperimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" -dependencies = [ - "digest 0.10.7", - "ff", - "group", - "pairing", - "rand_core 0.6.4", - "serde", - "serdect 0.3.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "bnum" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" - -[[package]] -name = "brotli" -version = "8.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "sha2 0.10.9", - "tinyvec", -] - -[[package]] -name = "bumpalo" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "bytecodec" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" -dependencies = [ - "byteorder", - "trackable 0.2.24", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -dependencies = [ - "serde", -] - -[[package]] -name = "bytesize" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" - -[[package]] -name = "camino" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" -dependencies = [ - "serde_core", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.27", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.27", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "castaway" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" - -[[package]] -name = "cc" -version = "1.2.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "celes" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" -dependencies = [ - "phf 0.11.3", - "serde", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", -] - -[[package]] -name = "chrono" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-link 0.2.1", -] - -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "clap" -version = "4.5.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_complete" -version = "4.5.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" -dependencies = [ - "clap", -] - -[[package]] -name = "clap_complete_fig" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" -dependencies = [ - "clap", - "clap_complete", -] - -[[package]] -name = "clap_derive" -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "clap_lex" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" - -[[package]] -name = "coarsetime" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" -dependencies = [ - "libc", - "wasix", - "wasm-bindgen", -] - -[[package]] -name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "colored" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" -dependencies = [ - "lazy_static", - "windows-sys 0.59.0", -] - -[[package]] -name = "comfy-table" -version = "7.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" -dependencies = [ - "crossterm 0.29.0", - "unicode-segmentation", - "unicode-width 0.2.2", -] - -[[package]] -name = "compression-codecs" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" -dependencies = [ - "brotli", - "compression-core", - "flate2", - "memchr", - "zstd", - "zstd-safe", -] - -[[package]] -name = "compression-core" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "console" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width 0.2.2", - "windows-sys 0.61.2", -] - -[[package]] -name = "console-api" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" -dependencies = [ - "futures-core", - "prost", - "prost-types", - "tonic", - "tracing-core", -] - -[[package]] -name = "console-subscriber" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" -dependencies = [ - "console-api", - "crossbeam-channel", - "crossbeam-utils", - "futures-task", - "hdrhistogram", - "humantime", - "hyper-util", - "prost", - "prost-types", - "serde", - "serde_json", - "thread_local", - "tokio", - "tokio-stream", - "tonic", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const-str" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" - -[[package]] -name = "const_format" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" -dependencies = [ - "const_format_proc_macros", -] - -[[package]] -name = "const_format_proc_macros" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - -[[package]] -name = "cookie" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" -dependencies = [ - "time", - "version_check", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cosmos-sdk-proto" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462e1f6a8e005acc8835d32d60cbd7973ed65ea2a8d8473830e675f050956427" -dependencies = [ - "prost", - "tendermint-proto", -] - -[[package]] -name = "cosmrs" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1394c263335da09e8ba8c4b2c675d804e3e0deb44cce0866a5f838d3ddd43d02" -dependencies = [ - "bip32", - "cosmos-sdk-proto", - "ecdsa", - "eyre", - "k256", - "rand_core 0.6.4", - "serde", - "serde_json", - "signature", - "subtle-encoding", - "tendermint", - "tendermint-rpc", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-core" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" - -[[package]] -name = "cosmwasm-crypto" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", - "cosmwasm-core", - "curve25519-dalek", - "digest 0.10.7", - "ecdsa", - "ed25519-zebra", - "k256", - "num-traits", - "p256", - "rand_core 0.6.4", - "rayon", - "sha2 0.10.9", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "cosmwasm-schema" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" -dependencies = [ - "cosmwasm-schema-derive", - "schemars 0.8.22", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "cosmwasm-std" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" -dependencies = [ - "base64 0.22.1", - "bech32", - "bnum", - "cosmwasm-core", - "cosmwasm-crypto", - "cosmwasm-derive", - "derive_more 1.0.0", - "hex", - "rand_core 0.6.4", - "rmp-serde", - "schemars 0.8.22", - "serde", - "serde-json-wasm", - "sha2 0.10.9", - "static_assertions", - "thiserror 1.0.69", -] - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "criterion" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "futures", - "is-terminal", - "itertools 0.10.5", - "num-traits", - "once_cell", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools 0.10.5", -] - -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crossterm" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" -dependencies = [ - "bitflags 1.3.2", - "crossterm_winapi", - "libc", - "mio 0.8.11", - "parking_lot", - "signal-hook", - "signal-hook-mio", - "winapi", -] - -[[package]] -name = "crossterm" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" -dependencies = [ - "bitflags 2.10.0", - "crossterm_winapi", - "document-features", - "parking_lot", - "rustix", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array 0.14.9", - "rand_core 0.6.4", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array 0.14.9", - "rand_core 0.6.4", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - -[[package]] -name = "cssparser" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "phf 0.11.3", - "smallvec", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.107", -] - -[[package]] -name = "csv" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde_core", -] - -[[package]] -name = "csv-core" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" -dependencies = [ - "memchr", -] - -[[package]] -name = "ct-codecs" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8" - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "cupid" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1" -dependencies = [ - "gcc", - "rustc_version 0.2.3", -] - -[[package]] -name = "curl" -version = "0.4.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2 0.6.1", - "windows-sys 0.59.0", -] - -[[package]] -name = "curl-sys" -version = "0.4.83+curl-8.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.59.0", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version 0.4.1", - "serde", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "curve25519-dalek-ng" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", - "subtle-ng", - "zeroize", -] - -[[package]] -name = "cw-controllers" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw-multi-test" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" -dependencies = [ - "anyhow", - "bech32", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "itertools 0.14.0", - "prost", - "schemars 0.8.22", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", -] - -[[package]] -name = "cw-storage-plus" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" -dependencies = [ - "cosmwasm-std", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "cw-utils" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw20" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "cw3" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw20", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw4" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" -dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.107", -] - -[[package]] -name = "darling_core" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.107", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "darling_macro" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" -dependencies = [ - "darling_core 0.21.3", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "serde", -] - -[[package]] -name = "data-encoding" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - -[[package]] -name = "defguard_wireguard_rs" -version = "0.4.7" -source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.4.7#ef1cf3714629bf5016fb38cbb7320451dc69fb09" -dependencies = [ - "base64 0.22.1", - "libc", - "log", - "netlink-packet-core 0.7.0", - "netlink-packet-generic 0.3.3", - "netlink-packet-route", - "netlink-packet-utils", - "netlink-packet-wireguard", - "netlink-sys", - "nix 0.29.0", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "delegate-display" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9926686c832494164c33a36bf65118f4bd6e704000b58c94681bf62e9ad67a74" -dependencies = [ - "impartial-ord", - "itoa", - "macroific", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" -dependencies = [ - "powerfmt", - "serde_core", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn 2.0.107", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - -[[package]] -name = "derive_more" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" -dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", - "unicode-xid", -] - -[[package]] -name = "derive_more-impl" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", - "unicode-xid", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle 2.6.1", -] - -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "dkg-bypass-contract" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "nym-coconut-dkg-common", - "nym-contracts-common", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "document-features" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" -dependencies = [ - "litrs", -] - -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - -[[package]] -name = "dtoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - -[[package]] -name = "easy-addr" -version = "0.1.0" -dependencies = [ - "cosmwasm-std", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "serdect 0.2.0", - "signature", - "spki", -] - -[[package]] -name = "echo-server" -version = "0.1.0" -dependencies = [ - "anyhow", - "bincode", - "bytecodec", - "bytes", - "clap", - "dashmap", - "dirs", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-sdk", - "serde", - "tempfile", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "tracing-subscriber", - "uuid", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "serde", - "signature", -] - -[[package]] -name = "ed25519-compact" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" -dependencies = [ - "ct-codecs", - "getrandom 0.2.16", -] - -[[package]] -name = "ed25519-consensus" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" -dependencies = [ - "curve25519-dalek-ng", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-dalek" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core 0.6.4", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0017d969298eec91e3db7a2985a8cab4df6341d86e6f3a6f5878b13fb7846bc9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core 0.6.4", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -dependencies = [ - "serde", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array 0.14.9", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "serdect 0.2.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "env_filter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "jiff", - "log", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - -[[package]] -name = "etherparse" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827292ea592108849932ad8e30218f8b1f21c0dfd0696698a18b5d0aed62d990" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "5.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener 5.4.1", - "pin-project-lite", -] - -[[package]] -name = "extension-storage" -version = "1.4.0-rc.0" -dependencies = [ - "bip39", - "console_error_panic_hook", - "js-sys", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-storage", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fancy_constructor" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - -[[package]] -name = "filetime" -version = "0.2.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.60.2", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flex-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" -dependencies = [ - "eyre", - "paste", -] - -[[package]] -name = "flume" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" -dependencies = [ - "futures-core", - "futures-sink", - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "forwarded-header-value" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" -dependencies = [ - "nonempty", - "thiserror 1.0.69", -] - -[[package]] -name = "fs-err" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" -dependencies = [ - "autocfg", -] - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-intrusive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "gcc" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" -dependencies = [ - "serde", - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi", - "wasip2", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug 0.3.1", - "polyval", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "gloo-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.2.0", - "http 1.3.1", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror 1.0.69", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-utils" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-utils" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "goblin" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" -dependencies = [ - "log", - "plain", - "scroll", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.12.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.3.1", - "indexmap 2.12.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" -dependencies = [ - "cfg-if", - "crunchy", - "zerocopy", -] - -[[package]] -name = "handlebars" -version = "3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" -dependencies = [ - "log", - "pest", - "pest_derive", - "quick-error", - "serde", - "serde_json", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" - -[[package]] -name = "hashlink" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" -dependencies = [ - "hashbrown 0.15.5", -] - -[[package]] -name = "hdrhistogram" -version = "7.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" -dependencies = [ - "base64 0.21.7", - "byteorder", - "flate2", - "nom", - "num-traits", -] - -[[package]] -name = "headers" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" -dependencies = [ - "base64 0.22.1", - "bytes", - "headers-core", - "http 1.3.1", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http 1.3.1", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-conservative" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" - -[[package]] -name = "hex-literal" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - -[[package]] -name = "hickory-proto" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" -dependencies = [ - "async-trait", - "bytes", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "h2 0.4.12", - "http 1.3.1", - "idna", - "ipnet", - "once_cell", - "rand 0.9.2", - "ring", - "rustls 0.23.33", - "thiserror 2.0.17", - "tinyvec", - "tokio", - "tokio-rustls 0.26.4", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "hickory-resolver" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "moka", - "once_cell", - "parking_lot", - "rand 0.9.2", - "resolv-conf", - "rustls 0.23.33", - "smallvec", - "thiserror 2.0.17", - "tokio", - "tokio-rustls 0.26.4", - "tracing", - "webpki-roots 0.26.11", -] - -[[package]] -name = "hidapi" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" -dependencies = [ - "cc", - "libc", - "pkg-config", - "winapi", -] - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha1-compact" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" - -[[package]] -name = "hmac-sha256" -version = "1.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha512" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "html5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" -dependencies = [ - "log", - "markup5ever", - "match_token", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.3.1", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http 1.3.1", - "http-body 1.0.1", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpcodec" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" -dependencies = [ - "bytecodec", - "trackable 0.2.24", -] - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "humantime" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" - -[[package]] -name = "humantime-serde" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" -dependencies = [ - "humantime", - "serde", -] - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2 0.4.12", - "http 1.3.1", - "http-body 1.0.1", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -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", - "hyper-util", - "rustls 0.23.33", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.4", - "tower-service", - "webpki-roots 1.0.3", -] - -[[package]] -name = "hyper-timeout" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" -dependencies = [ - "hyper 1.7.0", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.7.0", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.1", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.62.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" - -[[package]] -name = "icu_provider" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" -dependencies = [ - "displaydoc", - "icu_locale_core", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "impartial-ord" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "importer-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "bip39", - "clap", - "dirs", - "importer-contract", - "nym-bin-common", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-validator-client", - "nym-vesting-contract-common", - "serde", - "serde_json", - "tokio", - "tracing", -] - -[[package]] -name = "importer-contract" -version = "0.1.0" -dependencies = [ - "base85rs", - "cosmwasm-schema", - "cosmwasm-std", -] - -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - -[[package]] -name = "indexed_db_futures" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" -dependencies = [ - "accessory", - "cfg-if", - "delegate-display", - "derive_more 2.0.1", - "fancy_constructor", - "indexed_db_futures_macros_internal", - "js-sys", - "sealed", - "smallvec", - "thiserror 2.0.17", - "tokio", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "indexed_db_futures_macros_internal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caeba94923b68f254abef921cea7e7698bf4675fdd89d7c58bf1ed885b49a27d" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" -dependencies = [ - "equivalent", - "hashbrown 0.16.0", - "serde", - "serde_core", -] - -[[package]] -name = "indicatif" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" -dependencies = [ - "console", - "portable-atomic", - "unicode-width 0.2.2", - "unit-prefix", - "vt100", - "web-time", -] - -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "block-padding", - "generic-array 0.14.9", -] - -[[package]] -name = "inquire" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" -dependencies = [ - "bitflags 1.3.2", - "crossterm 0.25.0", - "dyn-clone", - "lazy_static", - "newline-converter", - "thiserror 1.0.69", - "unicode-segmentation", - "unicode-width 0.1.14", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - -[[package]] -name = "inventory" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" -dependencies = [ - "rustversion", -] - -[[package]] -name = "ip_network" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" - -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2 0.5.10", - "widestring", - "windows-sys 0.48.0", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "ipnetwork" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" -dependencies = [ - "serde", -] - -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "isahc" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" -dependencies = [ - "async-channel", - "castaway", - "crossbeam-utils", - "curl", - "curl-sys", - "event-listener 2.5.3", - "futures-lite", - "http 0.2.12", - "log", - "once_cell", - "polling", - "slab", - "sluice", - "tracing", - "tracing-futures", - "url", - "waker-fn", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jiff" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" -dependencies = [ - "jiff-static", - "log", - "portable-atomic", - "portable-atomic-util", - "serde", -] - -[[package]] -name = "jiff-static" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jwt-simple" -version = "0.12.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "731011e9647a71ff4f8474176ff6ce6e0d2de87a0173f15613af3a84c3e3401a" -dependencies = [ - "anyhow", - "binstring", - "blake2b_simd", - "coarsetime", - "ct-codecs", - "ed25519-compact", - "hmac-sha1-compact", - "hmac-sha256", - "hmac-sha512", - "k256", - "p256", - "p384", - "rand 0.8.5", - "serde", - "serde_json", - "superboring", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "k256" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2 0.10.9", - "signature", -] - -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - -[[package]] -name = "kqueue" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "ledger-apdu" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" -dependencies = [ - "arrayref", - "no-std-compat", - "snafu", -] - -[[package]] -name = "ledger-transport" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" -dependencies = [ - "async-trait", - "ledger-apdu", -] - -[[package]] -name = "ledger-transport-hid" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" -dependencies = [ - "byteorder", - "cfg-if", - "hex", - "hidapi", - "ledger-transport", - "libc", - "log", - "thiserror 1.0.69", -] - -[[package]] -name = "libc" -version = "0.2.177" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" - -[[package]] -name = "libm" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" - -[[package]] -name = "libredox" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" -dependencies = [ - "bitflags 2.10.0", - "libc", - "redox_syscall", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" - -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2 0.8.1", - "chacha", - "keystream", -] - -[[package]] -name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "litrs" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "macroific" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89f276537b4b8f981bf1c13d79470980f71134b7bdcc5e6e911e910e556b0285" -dependencies = [ - "macroific_attr_parse", - "macroific_core", - "macroific_macro", -] - -[[package]] -name = "macroific_attr_parse" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad4023761b45fcd36abed8fb7ae6a80456b0a38102d55e89a57d9a594a236be9" -dependencies = [ - "proc-macro2", - "quote", - "sealed", - "syn 2.0.107", -] - -[[package]] -name = "macroific_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a7594d3c14916fa55bef7e9d18c5daa9ed410dd37504251e4b75bbdeec33e3" -dependencies = [ - "proc-macro2", - "quote", - "sealed", - "syn 2.0.107", -] - -[[package]] -name = "macroific_macro" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da6f2ed796261b0a74e2b52b42c693bb6dee1effba3a482c49592659f824b3b" -dependencies = [ - "macroific_attr_parse", - "macroific_core", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "markup5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" -dependencies = [ - "log", - "tendril", - "web_atoms", -] - -[[package]] -name = "match_token" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest 0.10.7", -] - -[[package]] -name = "memchr" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minicov" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" -dependencies = [ - "cc", - "walkdir", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "mio" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", -] - -[[package]] -name = "mix-fetch-wasm" -version = "1.4.0-rc.0" -dependencies = [ - "async-trait", - "futures", - "js-sys", - "nym-bin-common", - "nym-http-api-client", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-requests", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "tokio", - "tsify", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-client-core", - "wasm-utils", -] - -[[package]] -name = "mixnet-connectivity-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-network-defaults", - "nym-sdk", - "tokio", - "tracing", -] - -[[package]] -name = "mock_instant" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" - -[[package]] -name = "moka" -version = "0.12.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" -dependencies = [ - "async-lock", - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "equivalent", - "event-listener 5.4.1", - "futures-util", - "parking_lot", - "portable-atomic", - "rustc_version 0.4.1", - "smallvec", - "tagptr", - "uuid", -] - -[[package]] -name = "multer" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http 1.3.1", - "httparse", - "memchr", - "mime", - "spin", - "version_check", -] - -[[package]] -name = "netlink-packet-core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-core" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" -dependencies = [ - "paste", -] - -[[package]] -name = "netlink-packet-generic" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-core 0.7.0", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-generic" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f891b2e0054cac5a684a06628f59568f841c93da4e551239da6e518f539e775" -dependencies = [ - "netlink-packet-core 0.8.1", -] - -[[package]] -name = "netlink-packet-route" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" -dependencies = [ - "anyhow", - "bitflags 2.10.0", - "byteorder", - "libc", - "log", - "netlink-packet-core 0.7.0", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", -] - -[[package]] -name = "netlink-packet-wireguard" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598962d9067d3153a00106da10e7b8276cea68f396f4a22f5b4a079270d92e29" -dependencies = [ - "libc", - "log", - "netlink-packet-core 0.8.1", - "netlink-packet-generic 0.4.0", -] - -[[package]] -name = "netlink-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" -dependencies = [ - "bytes", - "libc", - "log", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "newline-converter" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nonempty" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" - -[[package]] -name = "notify" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" -dependencies = [ - "bitflags 1.3.2", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "mio 0.8.11", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.5", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "nym-api" -version = "1.1.68" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "axum-test", - "bincode", - "bip39", - "bs58", - "cfg-if", - "clap", - "console-subscriber", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw3", - "cw4", - "dashmap", - "dotenvy", - "futures", - "humantime-serde", - "moka", - "nym-api-requests", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-cache", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-dkg", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-ecash-time", - "nym-gateway-client", - "nym-http-api-client", - "nym-http-api-common", - "nym-mixnet-contract-common", - "nym-node-requests", - "nym-node-tester-utils", - "nym-pemstore", - "nym-serde-helpers", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-ticketbooks-merkle", - "nym-topology", - "nym-types", - "nym-validator-client", - "pin-project", - "rand 0.8.5", - "rand_chacha 0.3.1", - "reqwest 0.12.24", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx", - "tempfile", - "tendermint", - "test-with", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "ts-rs", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", - "zeroize", -] - -[[package]] -name = "nym-api-requests" -version = "0.1.0" -dependencies = [ - "bs58", - "cosmrs", - "cosmwasm-std", - "ecdsa", - "hex", - "humantime-serde", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-signer-check-types", - "nym-ecash-time", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-node-requests", - "nym-noise-keys", - "nym-serde-helpers", - "nym-ticketbooks-merkle", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tracing", - "ts-rs", - "utoipa", -] - -[[package]] -name = "nym-async-file-watcher" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "notify", - "tokio", -] - -[[package]] -name = "nym-authenticator-client" -version = "0.1.0" -dependencies = [ - "bincode", - "futures", - "nym-authenticator-requests", - "nym-bandwidth-controller", - "nym-credentials-interface", - "nym-crypto", - "nym-registration-common", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-validator-client", - "nym-wireguard-types", - "semver 1.0.27", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-authenticator-requests" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "bincode", - "hmac", - "nym-credentials-interface", - "nym-crypto", - "nym-network-defaults", - "nym-service-provider-requests-common", - "nym-sphinx", - "nym-wireguard-types", - "rand 0.8.5", - "semver 1.0.27", - "serde", - "sha2 0.10.9", - "strum_macros", - "thiserror 2.0.17", - "x25519-dalek", -] - -[[package]] -name = "nym-bandwidth-controller" -version = "0.1.0" -dependencies = [ - "async-trait", - "bip39", - "log", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "thiserror 2.0.17", - "url", - "zeroize", -] - -[[package]] -name = "nym-bin-common" -version = "0.6.0" -dependencies = [ - "clap", - "clap_complete", - "clap_complete_fig", - "const-str", - "log", - "opentelemetry", - "opentelemetry-jaeger", - "schemars 0.8.22", - "serde", - "serde_json", - "tracing", - "tracing-opentelemetry", - "tracing-subscriber", - "tracing-tree", - "utoipa", - "vergen 8.3.1", -] - -[[package]] -name = "nym-cache" -version = "0.1.0" -dependencies = [ - "tokio", -] - -[[package]] -name = "nym-cli" -version = "1.1.65" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bip39", - "bs58", - "clap", - "clap_complete", - "clap_complete_fig", - "dotenvy", - "inquire", - "log", - "nym-bin-common", - "nym-cli-commands", - "nym-network-defaults", - "nym-validator-client", - "serde", - "serde_json", - "tap", - "tokio", -] - -[[package]] -name = "nym-cli-commands" -version = "1.0.0" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bip39", - "bs58", - "cfg-if", - "clap", - "colored", - "comfy-table", - "cosmrs", - "cosmwasm-std", - "csv", - "cw-utils", - "futures", - "handlebars", - "humantime-serde", - "inquire", - "k256", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-coconut-dkg-common", - "nym-config", - "nym-contracts-common", - "nym-credential-proxy-requests", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-http-api-client", - "nym-id", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "toml 0.8.23", - "url", - "zeroize", -] - -[[package]] -name = "nym-client" -version = "1.1.65" -dependencies = [ - "bs58", - "clap", - "dirs", - "futures", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-client-websocket-requests", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-gateway-requests", - "nym-id", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core" -version = "1.1.15" -dependencies = [ - "async-trait", - "base64 0.21.7", - "bincode", - "bs58", - "cfg-if", - "clap", - "comfy-table", - "futures", - "gloo-timers", - "http-body-util", - "humantime", - "hyper 1.7.0", - "hyper-util", - "nym-bandwidth-controller", - "nym-client-core-config-types", - "nym-client-core-gateways-storage", - "nym-client-core-surb-storage", - "nym-credential-storage", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-gateway-client", - "nym-gateway-requests", - "nym-http-api-client", - "nym-id", - "nym-mixnet-client", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-nonexhaustive-delayqueue", - "nym-pemstore", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tokio_with_wasm", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-client-core-config-types" -version = "0.1.0" -dependencies = [ - "humantime-serde", - "nym-config", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-statistics-common", - "serde", - "thiserror 2.0.17", - "url", -] - -[[package]] -name = "nym-client-core-gateways-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "cosmrs", - "nym-crypto", - "nym-gateway-requests", - "serde", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core-surb-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "dashmap", - "nym-crypto", - "nym-sphinx", - "nym-task", - "sqlx", - "sqlx-pool-guard", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-client-wasm" -version = "1.4.0-rc.0" -dependencies = [ - "anyhow", - "futures", - "gloo-timers", - "js-sys", - "nym-bin-common", - "nym-gateway-requests", - "nym-node-tester-utils", - "nym-node-tester-wasm", - "once_cell", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tokio_with_wasm", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "wasm-client-core", - "wasm-utils", - "web-sys", -] - -[[package]] -name = "nym-client-websocket-requests" -version = "0.1.0" -dependencies = [ - "nym-sphinx", - "serde", - "serde_json", -] - -[[package]] -name = "nym-coconut-dkg-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw4", - "nym-contracts-common", - "nym-multisig-contract-common", -] - -[[package]] -name = "nym-common" -version = "1.18.0" -dependencies = [ - "tracing", - "tracing-test", -] - -[[package]] -name = "nym-compact-ecash" -version = "0.1.0" -dependencies = [ - "bincode", - "bls12_381", - "bs58", - "cfg-if", - "criterion", - "digest 0.10.7", - "ff", - "group", - "itertools 0.14.0", - "nym-network-defaults", - "nym-pemstore", - "rand 0.8.5", - "rayon", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-config" -version = "0.1.0" -dependencies = [ - "dirs", - "handlebars", - "log", - "nym-network-defaults", - "serde", - "thiserror 2.0.17", - "toml 0.8.23", - "url", -] - -[[package]] -name = "nym-connection-monitor" -version = "1.18.0" -dependencies = [ - "bincode", - "bytes", - "futures", - "nym-common", - "nym-config", - "nym-ip-packet-requests", - "nym-sdk", - "pnet_packet", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-contracts-common" -version = "0.5.0" -dependencies = [ - "anyhow", - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "utoipa", - "vergen 8.3.1", -] - -[[package]] -name = "nym-contracts-common-testing" -version = "0.1.0" -dependencies = [ - "anyhow", - "cosmwasm-std", - "cw-multi-test", - "cw-storage-plus", - "nym-contracts-common", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", -] - -[[package]] -name = "nym-cpp-ffi" -version = "0.1.2" -dependencies = [ - "anyhow", - "bs58", - "lazy_static", - "nym-bin-common", - "nym-ffi-shared", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "tokio", -] - -[[package]] -name = "nym-credential-proxy" -version = "0.3.0" -dependencies = [ - "anyhow", - "axum", - "bip39", - "bs58", - "cfg-if", - "clap", - "futures", - "humantime", - "nym-bin-common", - "nym-compact-ecash", - "nym-config", - "nym-credential-proxy-lib", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-http-api-client", - "nym-http-api-common", - "nym-network-defaults", - "nym-pemstore", - "nym-upgrade-mode-check", - "nym-validator-client", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "url", - "utoipa", - "utoipa-swagger-ui", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-credential-proxy-lib" -version = "0.1.0" -dependencies = [ - "anyhow", - "axum", - "bip39", - "bs58", - "futures", - "humantime", - "nym-cache", - "nym-compact-ecash", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-network-defaults", - "nym-validator-client", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tracing", - "url", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-credential-proxy-requests" -version = "0.1.0" -dependencies = [ - "async-trait", - "nym-credentials", - "nym-credentials-interface", - "nym-http-api-client", - "nym-http-api-common", - "nym-serde-helpers", - "nym-upgrade-mode-check", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "serde_json", - "serde_with", - "time", - "tsify", - "utoipa", - "uuid", - "wasm-bindgen", - "wasmtimer", -] - -[[package]] -name = "nym-credential-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "log", - "nym-compact-ecash", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-test-utils", - "serde", - "sqlx", - "sqlx-pool-guard", - "thiserror 2.0.17", - "tokio", - "zeroize", -] - -[[package]] -name = "nym-credential-utils" -version = "0.1.0" -dependencies = [ - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-ecash-time", - "nym-validator-client", - "thiserror 2.0.17", - "time", - "tokio", -] - -[[package]] -name = "nym-credential-verification" -version = "0.1.0" -dependencies = [ - "async-trait", - "bs58", - "cosmwasm-std", - "cw-utils", - "dyn-clone", - "futures", - "nym-api-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-ecash-contract-common", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "si-scale", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-credentials" -version = "0.1.0" -dependencies = [ - "bincode", - "bls12_381", - "cosmrs", - "log", - "nym-api-requests", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-http-api-client", - "nym-network-defaults", - "nym-serde-helpers", - "nym-validator-client", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "zeroize", -] - -[[package]] -name = "nym-credentials-interface" -version = "0.1.0" -dependencies = [ - "bls12_381", - "nym-compact-ecash", - "nym-ecash-time", - "nym-network-defaults", - "rand 0.8.5", - "serde", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "utoipa", -] - -[[package]] -name = "nym-crypto" -version = "0.4.0" -dependencies = [ - "aead", - "aes", - "aes-gcm-siv", - "anyhow", - "base64 0.22.1", - "blake3", - "bs58", - "cipher", - "ctr", - "digest 0.10.7", - "ed25519-dalek", - "generic-array 0.14.9", - "hkdf", - "hmac", - "jwt-simple", - "nym-pemstore", - "nym-sphinx-types", - "nym-test-utils", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_bytes", - "serde_json", - "sha2 0.10.9", - "subtle-encoding", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-dkg" -version = "0.1.0" -dependencies = [ - "bitvec", - "bls12_381", - "bs58", - "criterion", - "ff", - "group", - "nym-contracts-common", - "nym-pemstore", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "serde", - "serde_derive", - "sha2 0.10.9", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-ecash-contract-common" -version = "0.1.0" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "nym-multisig-contract-common", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ecash-signer-check" -version = "0.1.0" -dependencies = [ - "futures", - "nym-ecash-signer-check-types", - "nym-http-api-client", - "nym-network-defaults", - "nym-validator-client", - "semver 1.0.27", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nym-ecash-signer-check-types" -version = "0.1.0" -dependencies = [ - "nym-coconut-dkg-common", - "nym-crypto", - "semver 1.0.27", - "serde", - "thiserror 2.0.17", - "time", - "tracing", - "url", - "utoipa", -] - -[[package]] -name = "nym-ecash-time" -version = "0.1.0" -dependencies = [ - "nym-compact-ecash", - "time", -] - -[[package]] -name = "nym-exit-policy" -version = "0.1.0" -dependencies = [ - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-ffi-shared" -version = "0.2.1" -dependencies = [ - "anyhow", - "bs58", - "lazy_static", - "nym-bin-common", - "nym-crypto", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "tokio", - "uniffi", - "uniffi_build", -] - -[[package]] -name = "nym-gateway" -version = "1.1.36" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bip39", - "bs58", - "dashmap", - "defguard_wireguard_rs", - "fastrand 2.3.0", - "futures", - "ipnetwork", - "mock_instant", - "nym-api-requests", - "nym-authenticator-requests", - "nym-client-core", - "nym-credential-verification", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-gateway-stats-storage", - "nym-gateway-storage", - "nym-id", - "nym-ip-packet-router", - "nym-mixnet-client", - "nym-mixnode-common", - "nym-network-defaults", - "nym-network-requester", - "nym-node-metrics", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-types", - "nym-validator-client", - "nym-wireguard", - "nym-wireguard-private-metadata-server", - "nym-wireguard-types", - "rand 0.8.5", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-gateway-client" -version = "0.1.0" -dependencies = [ - "futures", - "getrandom 0.2.16", - "gloo-utils 0.2.0", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "serde", - "si-scale", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-probe" -version = "1.18.0" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bincode", - "bs58", - "bytes", - "clap", - "futures", - "hex", - "nym-authenticator-client", - "nym-authenticator-requests", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-connection-monitor", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-http-api-client", - "nym-http-api-client-macro", - "nym-ip-packet-client", - "nym-ip-packet-requests", - "nym-node-status-client", - "nym-sdk", - "nym-topology", - "nym-validator-client", - "pnet_packet", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "tracing-subscriber", - "url", - "vergen-gitcl", - "x25519-dalek", -] - -[[package]] -name = "nym-gateway-requests" -version = "0.1.0" -dependencies = [ - "anyhow", - "bs58", - "futures", - "generic-array 0.14.9", - "nym-compact-ecash", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-pemstore", - "nym-serde-helpers", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-test-utils", - "rand 0.8.5", - "serde", - "serde_json", - "strum", - "subtle 2.6.1", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "tungstenite 0.20.1", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-stats-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "nym-node-metrics", - "nym-sphinx", - "nym-statistics-common", - "sqlx", - "strum", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-gateway-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "defguard_wireguard_rs", - "dyn-clone", - "nym-credentials-interface", - "nym-gateway-requests", - "nym-sphinx", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-go-ffi" -version = "0.2.2" -dependencies = [ - "anyhow", - "lazy_static", - "nym-bin-common", - "nym-crypto", - "nym-ffi-shared", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "thiserror 2.0.17", - "tokio", - "uniffi", - "uniffi_build", -] - -[[package]] -name = "nym-group-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cw-controllers", - "cw4", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "nym-http-api-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "bincode", - "bytes", - "cfg-if", - "encoding_rs", - "hickory-resolver", - "http 1.3.1", - "inventory", - "itertools 0.14.0", - "mime", - "nym-bin-common", - "nym-http-api-client-macro", - "nym-http-api-common", - "nym-network-defaults", - "once_cell", - "reqwest 0.12.24", - "serde", - "serde_json", - "serde_plain", - "serde_yaml", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "nym-http-api-client-macro" -version = "0.1.0" -dependencies = [ - "nym-http-api-client", - "proc-macro-crate", - "proc-macro2", - "quote", - "reqwest 0.12.24", - "syn 2.0.107", - "uuid", -] - -[[package]] -name = "nym-http-api-common" -version = "0.1.0" -dependencies = [ - "axum", - "axum-client-ip", - "bincode", - "bytes", - "colored", - "futures", - "mime", - "serde", - "serde_json", - "serde_yaml", - "subtle 2.6.1", - "time", - "tower 0.5.2", - "tracing", - "utoipa", - "zeroize", -] - -[[package]] -name = "nym-id" -version = "0.1.0" -dependencies = [ - "nym-credential-storage", - "nym-credentials", - "thiserror 2.0.17", - "time", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-id-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "bs58", - "clap", - "nym-bin-common", - "nym-credential-storage", - "nym-id", - "tokio", - "tracing", -] - -[[package]] -name = "nym-inclusion-probability" -version = "0.1.0" -dependencies = [ - "log", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ip-packet-client" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "futures", - "nym-ip-packet-requests", - "nym-sdk", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-ip-packet-requests" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "nym-bin-common", - "nym-crypto", - "nym-service-provider-requests-common", - "nym-sphinx", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", -] - -[[package]] -name = "nym-ip-packet-router" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bs58", - "bytes", - "clap", - "etherparse", - "futures", - "log", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-crypto", - "nym-exit-policy", - "nym-id", - "nym-ip-packet-requests", - "nym-network-defaults", - "nym-network-requester", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-service-providers-common", - "nym-sphinx", - "nym-task", - "nym-tun", - "nym-types", - "nym-wireguard", - "nym-wireguard-types", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tun", - "tokio-util", - "url", -] - -[[package]] -name = "nym-ledger" -version = "0.1.0" -dependencies = [ - "bip32", - "k256", - "ledger-transport", - "ledger-transport-hid", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-metrics" -version = "0.1.0" -dependencies = [ - "dashmap", - "lazy_static", - "prometheus", - "tracing", -] - -[[package]] -name = "nym-mixnet-client" -version = "0.1.0" -dependencies = [ - "dashmap", - "futures", - "nym-crypto", - "nym-noise", - "nym-sphinx", - "nym-task", - "rand 0.8.5", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-mixnet-contract-common" -version = "0.6.0" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-storage-plus", - "cw2", - "humantime-serde", - "nym-contracts-common", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "serde_repr", - "thiserror 2.0.17", - "time", - "ts-rs", - "utoipa", -] - -[[package]] -name = "nym-mixnode-common" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "humantime-serde", - "log", - "nym-crypto", - "nym-metrics", - "nym-network-defaults", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-types", - "nym-task", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "url", -] - -[[package]] -name = "nym-multisig-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "cw3", - "cw4", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-network-defaults" -version = "0.1.0" -dependencies = [ - "cargo_metadata 0.19.2", - "dotenvy", - "log", - "regex", - "schemars 0.8.22", - "serde", - "url", - "utoipa", -] - -[[package]] -name = "nym-network-monitor" -version = "1.0.2" -dependencies = [ - "anyhow", - "axum", - "clap", - "dashmap", - "futures", - "log", - "nym-bin-common", - "nym-client-core", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-sdk", - "nym-sphinx", - "nym-topology", - "nym-types", - "nym-validator-client", - "petgraph", - "rand 0.8.5", - "rand_chacha 0.3.1", - "reqwest 0.12.24", - "serde", - "serde_json", - "tokio", - "tokio-postgres", - "tokio-util", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "nym-network-requester" -version = "1.1.66" -dependencies = [ - "addr", - "anyhow", - "async-trait", - "bs58", - "clap", - "dirs", - "futures", - "humantime-serde", - "ipnetwork", - "log", - "nym-async-file-watcher", - "nym-bin-common", - "nym-client-core", - "nym-client-websocket-requests", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-exit-policy", - "nym-id", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-types", - "publicsuffix", - "rand 0.8.5", - "regex", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "tokio-util", - "url", - "zeroize", -] - -[[package]] -name = "nym-node" -version = "1.20.0" -dependencies = [ - "anyhow", - "arc-swap", - "arrayref", - "async-trait", - "axum", - "bip39", - "blake2 0.8.1", - "bloomfilter", - "bs58", - "cargo_metadata 0.19.2", - "celes", - "cfg-if", - "chacha", - "clap", - "colored", - "console-subscriber", - "criterion", - "csv", - "cupid", - "futures", - "hkdf", - "human-repr", - "humantime-serde", - "indicatif", - "ipnetwork", - "lioness", - "nym-bin-common", - "nym-client-core-config-types", - "nym-config", - "nym-crypto", - "nym-gateway", - "nym-gateway-stats-storage", - "nym-http-api-client", - "nym-http-api-common", - "nym-ip-packet-router", - "nym-metrics", - "nym-mixnet-client", - "nym-network-requester", - "nym-node-metrics", - "nym-node-requests", - "nym-noise", - "nym-noise-keys", - "nym-nonexhaustive-delayqueue", - "nym-pemstore", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-types", - "nym-validator-client", - "nym-verloc", - "nym-wireguard", - "nym-wireguard-types", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "sysinfo", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.8.23", - "tower-http 0.5.2", - "tracing", - "tracing-indicatif", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "zeroize", -] - -[[package]] -name = "nym-node-metrics" -version = "0.1.0" -dependencies = [ - "dashmap", - "futures", - "nym-metrics", - "nym-statistics-common", - "strum", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-node-requests" -version = "0.1.0" -dependencies = [ - "async-trait", - "celes", - "humantime", - "humantime-serde", - "nym-bin-common", - "nym-crypto", - "nym-exit-policy", - "nym-http-api-client", - "nym-noise-keys", - "nym-wireguard-types", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "serde", - "serde_json", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "tokio", - "utoipa", -] - -[[package]] -name = "nym-node-status-agent" -version = "1.0.7" -dependencies = [ - "anyhow", - "clap", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-node-status-client", - "rand 0.8.5", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "nym-node-status-api" -version = "4.0.11-rc1" -dependencies = [ - "ammonia", - "anyhow", - "axum", - "axum-test", - "bip39", - "bs58", - "celes", - "clap", - "cosmwasm-std", - "futures-util", - "humantime", - "itertools 0.14.0", - "moka", - "nym-bin-common", - "nym-contracts-common", - "nym-credential-proxy-lib", - "nym-credentials", - "nym-crypto", - "nym-ecash-time", - "nym-http-api-client", - "nym-http-api-common", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-node-metrics", - "nym-node-requests", - "nym-node-status-client", - "nym-serde-helpers", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "rand_chacha 0.3.1", - "regex", - "reqwest 0.12.24", - "semver 1.0.27", - "serde", - "serde_json", - "serde_json_path", - "sqlx", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-log 0.2.0", - "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", - "zeroize", -] - -[[package]] -name = "nym-node-status-client" -version = "0.2.0" -dependencies = [ - "anyhow", - "bincode", - "bs58", - "nym-credentials", - "nym-crypto", - "reqwest 0.12.24", - "serde", - "serde_json", - "time", - "tracing", -] - -[[package]] -name = "nym-node-tester-utils" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "nym-crypto", - "nym-sphinx", - "nym-sphinx-params", - "nym-task", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "wasm-utils", -] - -[[package]] -name = "nym-node-tester-wasm" -version = "1.3.0-rc.0" -dependencies = [ - "futures", - "js-sys", - "nym-node-tester-utils", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "tokio", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-client-core", - "wasm-utils", - "wasmtimer", -] - -[[package]] -name = "nym-noise" -version = "0.1.0" -dependencies = [ - "anyhow", - "arc-swap", - "bytes", - "futures", - "nym-crypto", - "nym-noise-keys", - "nym-test-utils", - "pin-project", - "rand_chacha 0.3.1", - "sha2 0.10.9", - "snow", - "strum", - "strum_macros", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-noise-keys" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "schemars 0.8.22", - "serde", - "utoipa", -] - -[[package]] -name = "nym-nonexhaustive-delayqueue" -version = "0.1.0" -dependencies = [ - "tokio", - "tokio-stream", - "tokio-util", - "wasmtimer", -] - -[[package]] -name = "nym-nr-query" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "log", - "nym-bin-common", - "nym-network-defaults", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-requests", - "serde", - "tokio", -] - -[[package]] -name = "nym-ordered-buffer" -version = "0.1.0" -dependencies = [ - "log", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-outfox" -version = "0.1.0" -dependencies = [ - "blake3", - "chacha20", - "chacha20poly1305", - "criterion", - "fastrand 2.3.0", - "getrandom 0.2.16", - "log", - "rand 0.8.5", - "rayon", - "sphinx-packet", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-pemstore" -version = "0.3.0" -dependencies = [ - "pem", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-performance-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "nym-contracts-common", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-pool-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", - "time", -] - -[[package]] -name = "nym-registration-client" -version = "0.1.0" -dependencies = [ - "futures", - "nym-authenticator-client", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials-interface", - "nym-ip-packet-client", - "nym-registration-common", - "nym-sdk", - "nym-validator-client", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "typed-builder", - "url", -] - -[[package]] -name = "nym-registration-common" -version = "0.1.0" -dependencies = [ - "nym-authenticator-requests", - "nym-crypto", - "nym-ip-packet-requests", - "nym-sphinx", - "tokio-util", -] - -[[package]] -name = "nym-sdk" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bip39", - "bytecodec", - "bytes", - "clap", - "dashmap", - "dirs", - "dotenvy", - "futures", - "hex", - "http 1.3.1", - "httpcodec", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-client-core", - "nym-socks5-requests", - "nym-sphinx", - "nym-sphinx-addressing", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "parking_lot", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.8.23", - "tracing", - "tracing-subscriber", - "url", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-serde-helpers" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "bs58", - "hex", - "serde", - "time", -] - -[[package]] -name = "nym-service-provider-requests-common" -version = "0.1.0" -dependencies = [ - "bincode", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-service-providers-common" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "log", - "nym-bin-common", - "nym-sdk", - "nym-socks5-requests", - "nym-sphinx-anonymous-replies", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", -] - -[[package]] -name = "nym-signers-monitor" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "humantime", - "itertools 0.14.0", - "nym-bin-common", - "nym-ecash-signer-check", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "time", - "tokio", - "tracing", - "url", - "zulip-client", -] - -[[package]] -name = "nym-socks5-client" -version = "1.1.65" -dependencies = [ - "bs58", - "clap", - "log", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-gateway-requests", - "nym-id", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-pemstore", - "nym-socks5-client-core", - "nym-sphinx", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", - "time", - "tokio", - "url", - "zeroize", -] - -[[package]] -name = "nym-socks5-client-core" -version = "0.1.0" -dependencies = [ - "anyhow", - "dirs", - "futures", - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-contracts-common", - "nym-credential-storage", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-validator-client", - "pin-project", - "rand 0.8.5", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "tap", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "url", -] - -[[package]] -name = "nym-socks5-proxy-helpers" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "log", - "nym-ordered-buffer", - "nym-socks5-requests", - "nym-task", - "tokio", - "tokio-test", - "tokio-util", -] - -[[package]] -name = "nym-socks5-requests" -version = "0.1.0" -dependencies = [ - "bincode", - "log", - "nym-exit-policy", - "nym-service-providers-common", - "nym-sphinx-addressing", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx" -version = "0.1.0" -dependencies = [ - "bincode", - "log", - "nym-crypto", - "nym-metrics", - "nym-mixnet-contract-common", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-chunking", - "nym-sphinx-cover", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_distr", - "serde", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-sphinx-acknowledgements" -version = "0.1.0" -dependencies = [ - "generic-array 0.14.9", - "nym-crypto", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-sphinx-addressing" -version = "0.1.0" -dependencies = [ - "bincode", - "nym-crypto", - "nym-sphinx-types", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-anonymous-replies" -version = "0.1.0" -dependencies = [ - "bs58", - "nym-crypto", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "thiserror 2.0.17", - "tracing", - "wasm-bindgen", -] - -[[package]] -name = "nym-sphinx-chunking" -version = "0.1.0" -dependencies = [ - "dashmap", - "log", - "nym-crypto", - "nym-metrics", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-types", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "utoipa", - "wasmtimer", -] - -[[package]] -name = "nym-sphinx-cover" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-chunking", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-forwarding" -version = "0.1.0" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-params", - "nym-sphinx-types", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-framing" -version = "0.1.0" -dependencies = [ - "bytes", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-types", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-sphinx-params" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "nym-sphinx-types", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-routing" -version = "0.1.0" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-types", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-types" -version = "0.2.0" -dependencies = [ - "nym-outfox", - "sphinx-packet", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-statistics-api" -version = "0.2.1" -dependencies = [ - "anyhow", - "axum", - "axum-client-ip", - "axum-extra", - "celes", - "clap", - "nym-bin-common", - "nym-http-api-client", - "nym-http-api-common", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "serde", - "serde_json", - "sqlx", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nym-statistics-common" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "nym-credentials-interface", - "nym-crypto", - "nym-metrics", - "nym-sphinx", - "nym-task", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "strum", - "strum_macros", - "sysinfo", - "thiserror 2.0.17", - "time", - "tokio", - "utoipa", - "wasmtimer", -] - -[[package]] -name = "nym-store-cipher" -version = "0.1.0" -dependencies = [ - "aes-gcm", - "argon2", - "generic-array 0.14.9", - "getrandom 0.2.16", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-task" -version = "0.1.0" -dependencies = [ - "anyhow", - "cfg-if", - "futures", - "log", - "nym-test-utils", - "serde", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasmtimer", -] - -[[package]] -name = "nym-test-utils" -version = "0.1.0" -dependencies = [ - "anyhow", - "futures", - "rand_chacha 0.3.1", - "tokio", -] - -[[package]] -name = "nym-ticketbooks-merkle" -version = "0.1.0" -dependencies = [ - "nym-credentials-interface", - "nym-serde-helpers", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rs_merkle", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "time", - "utoipa", -] - -[[package]] -name = "nym-topology" -version = "0.1.0" -dependencies = [ - "async-trait", - "nym-api-requests", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-sphinx-addressing", - "nym-sphinx-types", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tracing", - "tsify", - "wasm-bindgen", - "wasm-utils", -] - -[[package]] -name = "nym-tun" -version = "0.1.0" -dependencies = [ - "etherparse", - "log", - "nym-wireguard-types", - "thiserror 2.0.17", - "tokio", - "tokio-tun", -] - -[[package]] -name = "nym-types" -version = "1.0.0" -dependencies = [ - "base64 0.22.1", - "cosmrs", - "cosmwasm-std", - "eyre", - "hmac", - "itertools 0.14.0", - "log", - "nym-config", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-validator-client", - "nym-vesting-contract-common", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "ts-rs", - "url", - "utoipa", - "x25519-dalek", -] - -[[package]] -name = "nym-upgrade-mode-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "jwt-simple", - "nym-crypto", - "nym-http-api-client", - "nym-test-utils", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-validator-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bip32", - "bip39", - "colored", - "cosmrs", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "cw3", - "cw4", - "eyre", - "flate2", - "futures", - "itertools 0.14.0", - "nym-api-requests", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-ecash-contract-common", - "nym-group-contract-common", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-network-defaults", - "nym-performance-contract-common", - "nym-serde-helpers", - "nym-vesting-contract-common", - "prost", - "reqwest 0.12.24", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "ts-rs", - "url", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-validator-rewarder" -version = "0.3.0" -dependencies = [ - "anyhow", - "bip39", - "clap", - "cosmwasm-std", - "futures", - "humantime", - "humantime-serde", - "nym-bin-common", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-http-api-client", - "nym-network-defaults", - "nym-pemstore", - "nym-serde-helpers", - "nym-task", - "nym-ticketbooks-merkle", - "nym-validator-client", - "nyxd-scraper", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "serde_with", - "sha2 0.10.9", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-verloc" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "humantime", - "nym-api-requests", - "nym-crypto", - "nym-http-api-client", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "nym-vesting-contract-common" -version = "0.7.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2", - "nym-contracts-common", - "nym-mixnet-contract-common", - "serde", - "thiserror 2.0.17", - "ts-rs", -] - -[[package]] -name = "nym-vpn-api-lib-wasm" -version = "0.1.0" -dependencies = [ - "bs58", - "getrandom 0.2.16", - "js-sys", - "nym-bin-common", - "nym-compact-ecash", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "thiserror 2.0.17", - "time", - "tsify", - "wasm-bindgen", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "nym-wallet-types" -version = "1.0.0" -dependencies = [ - "cosmrs", - "cosmwasm-std", - "hex-literal", - "nym-config", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "serde", - "serde_json", - "strum", - "strum_macros", - "ts-rs", -] - -[[package]] -name = "nym-wireguard" -version = "0.1.0" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bincode", - "chrono", - "dashmap", - "defguard_wireguard_rs", - "dyn-clone", - "futures", - "ip_network", - "log", - "nym-authenticator-requests", - "nym-credential-verification", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-network-defaults", - "nym-node-metrics", - "nym-task", - "nym-wireguard-types", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tracing", - "x25519-dalek", -] - -[[package]] -name = "nym-wireguard-private-metadata-client" -version = "1.0.0" -dependencies = [ - "async-trait", - "nym-http-api-client", - "nym-wireguard-private-metadata-shared", - "tracing", -] - -[[package]] -name = "nym-wireguard-private-metadata-server" -version = "1.0.0" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "futures", - "nym-credential-verification", - "nym-credentials-interface", - "nym-http-api-common", - "nym-wireguard", - "nym-wireguard-private-metadata-shared", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "nym-wireguard-private-metadata-shared" -version = "1.0.0" -dependencies = [ - "axum", - "bincode", - "nym-credentials-interface", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", - "utoipa", -] - -[[package]] -name = "nym-wireguard-private-metadata-tests" -version = "1.0.0" -dependencies = [ - "async-trait", - "axum", - "nym-credential-verification", - "nym-credentials-interface", - "nym-http-api-client", - "nym-http-api-common", - "nym-wireguard", - "nym-wireguard-private-metadata-client", - "nym-wireguard-private-metadata-server", - "nym-wireguard-private-metadata-shared", - "tokio", - "tower-http 0.5.2", - "utoipa", -] - -[[package]] -name = "nym-wireguard-types" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "log", - "nym-config", - "nym-crypto", - "nym-network-defaults", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "x25519-dalek", -] - -[[package]] -name = "nymvisor" -version = "0.1.30" -dependencies = [ - "anyhow", - "bytes", - "clap", - "dotenvy", - "flate2", - "futures", - "hex", - "humantime", - "humantime-serde", - "nix 0.27.1", - "nym-async-file-watcher", - "nym-bin-common", - "nym-config", - "nym-task", - "reqwest 0.12.24", - "serde", - "serde_json", - "sha2 0.10.9", - "tar", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nyx-chain-watcher" -version = "0.1.14" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "chrono", - "clap", - "nym-bin-common", - "nym-config", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "nyxd-scraper", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nyxd-scraper" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "const_format", - "cosmrs", - "eyre", - "futures", - "humantime", - "serde", - "sha2 0.10.9", - "sqlx", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.10.0", -] - -[[package]] -name = "objc2-io-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" -dependencies = [ - "libc", - "objc2-core-foundation", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" - -[[package]] -name = "oorandom" -version = "11.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[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.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.110" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" -dependencies = [ - "opentelemetry_api", - "opentelemetry_sdk", -] - -[[package]] -name = "opentelemetry-http" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" -dependencies = [ - "async-trait", - "bytes", - "http 0.2.12", - "isahc", - "opentelemetry_api", -] - -[[package]] -name = "opentelemetry-jaeger" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" -dependencies = [ - "async-trait", - "futures", - "futures-executor", - "http 0.2.12", - "isahc", - "once_cell", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-semantic-conventions", - "thiserror 1.0.69", - "thrift", - "tokio", -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" -dependencies = [ - "opentelemetry", -] - -[[package]] -name = "opentelemetry_api" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" -dependencies = [ - "fnv", - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "once_cell", - "pin-project-lite", - "thiserror 1.0.69", - "urlencoding", -] - -[[package]] -name = "opentelemetry_sdk" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" -dependencies = [ - "async-trait", - "crossbeam-channel", - "dashmap", - "fnv", - "futures-channel", - "futures-executor", - "futures-util", - "once_cell", - "opentelemetry_api", - "percent-encoding", - "rand 0.8.5", - "thiserror 1.0.69", - "tokio", - "tokio-stream", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - -[[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link 0.2.1", -] - -[[package]] -name = "password-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "peg" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477" -dependencies = [ - "peg-macros", - "peg-runtime", -] - -[[package]] -name = "peg-macros" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71" -dependencies = [ - "peg-runtime", - "proc-macro2", - "quote", -] - -[[package]] -name = "peg-runtime" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca" - -[[package]] -name = "pem" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" -dependencies = [ - "base64 0.13.1", - "once_cell", - "regex", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pest" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "pest_meta" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" -dependencies = [ - "pest", - "sha2 0.10.9", -] - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.12.0", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_shared 0.13.1", - "serde", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.1", -] - -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher 1.0.1", -] - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - -[[package]] -name = "plotters" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" - -[[package]] -name = "plotters-svg" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "pnet_base" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" -dependencies = [ - "no-std-net", -] - -[[package]] -name = "pnet_macros" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.107", -] - -[[package]] -name = "pnet_macros_support" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" -dependencies = [ - "pnet_base", -] - -[[package]] -name = "pnet_packet" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" -dependencies = [ - "glob", - "pnet_base", - "pnet_macros", - "pnet_macros_support", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug 0.3.1", - "universal-hash", -] - -[[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 0.3.1", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - -[[package]] -name = "postgres-protocol" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" -dependencies = [ - "base64 0.22.1", - "byteorder", - "bytes", - "fallible-iterator", - "hmac", - "md-5", - "memchr", - "rand 0.9.2", - "sha2 0.10.9", - "stringprep", -] - -[[package]] -name = "postgres-types" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" -dependencies = [ - "bytes", - "fallible-iterator", - "postgres-protocol", -] - -[[package]] -name = "potential_utf" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "pretty_assertions" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" -dependencies = [ - "diff", - "yansi", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit 0.23.7", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "proc-macro2" -version = "1.0.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proc_pidinfo" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" -dependencies = [ - "libc", -] - -[[package]] -name = "prometheus" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf", - "thiserror 2.0.17", -] - -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "prost-types" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror 1.0.69", -] - -[[package]] -name = "protobuf-support" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" -dependencies = [ - "thiserror 1.0.69", -] - -[[package]] -name = "psl" -version = "2.1.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd2e88c2c28854abe53489ce679f9dad712e2ac01a342dbeccae851cf0654d9" -dependencies = [ - "psl-types", -] - -[[package]] -name = "psl-types" -version = "2.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" - -[[package]] -name = "publicsuffix" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" -dependencies = [ - "idna", - "psl-types", -] - -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls 0.23.33", - "socket2 0.6.1", - "thiserror 2.0.17", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" -dependencies = [ - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash", - "rustls 0.23.33", - "rustls-pki-types", - "slab", - "thiserror 2.0.17", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.6.1", - "tracing", - "windows-sys 0.60.2", -] - -[[package]] -name = "quote" -version = "1.0.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.4", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "rayon" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags 2.10.0", -] - -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 2.0.17", -] - -[[package]] -name = "ref-cast" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "regex" -version = "1.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", - "tokio", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "reqwest" -version = "0.12.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" -dependencies = [ - "async-compression", - "base64 0.22.1", - "bytes", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "hyper-rustls 0.27.7", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls 0.23.33", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.2", - "tokio", - "tokio-rustls 0.26.4", - "tokio-util", - "tower 0.5.2", - "tower-http 0.6.6", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots 1.0.3", -] - -[[package]] -name = "reserve-port" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" -dependencies = [ - "thiserror 2.0.17", -] - -[[package]] -name = "resolv-conf" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle 2.6.1", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "rmp" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] - -[[package]] -name = "rmp-serde" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" -dependencies = [ - "byteorder", - "rmp", - "serde", -] - -[[package]] -name = "rs_merkle" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" -dependencies = [ - "sha2 0.10.9", -] - -[[package]] -name = "rsa" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" -dependencies = [ - "const-oid", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core 0.6.4", - "sha2 0.10.9", - "signature", - "spki", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rust-embed" -version = "8.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb44e1917075637ee8c7bcb865cf8830e3a92b5b1189e44e3a0ab5a0d5be314b" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382499b49db77a7c19abd2a574f85ada7e9dbe125d5d1160fa5cad7c4cf71fc9" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn 2.0.107", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21fcbee55c2458836bcdbfffb6ec9ba74bbc23ca7aa6816015a3dd2c4d8fc185" -dependencies = [ - "sha2 0.10.9", - "walkdir", -] - -[[package]] -name = "rust-multipart-rfc7578_2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" -dependencies = [ - "bytes", - "futures-core", - "futures-util", - "http 0.2.12", - "mime", - "mime_guess", - "rand 0.8.5", - "thiserror 1.0.69", -] - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.27", -] - -[[package]] -name = "rustix" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" -dependencies = [ - "bitflags 2.10.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls" -version = "0.23.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.103.7", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.2.0", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", - "uuid", -] - -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals 0.29.1", - "syn 2.0.107", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scroll" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sealed" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array 0.14.9", - "pkcs8", - "serdect 0.2.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" -dependencies = [ - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" -dependencies = [ - "cc", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.10.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde-json-wasm" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" -dependencies = [ - "serde", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde_bytes" -version = "0.11.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "serde_derive_internals" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "serde_json" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", - "serde_core", -] - -[[package]] -name = "serde_json_path" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b992cea3194eea663ba99a042d61cea4bd1872da37021af56f6a37e0359b9d33" -dependencies = [ - "inventory", - "nom", - "regex", - "serde", - "serde_json", - "serde_json_path_core", - "serde_json_path_macros", - "thiserror 2.0.17", -] - -[[package]] -name = "serde_json_path_core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde67d8dfe7d4967b5a95e247d4148368ddd1e753e500adb34b3ffe40c6bc1bc" -dependencies = [ - "inventory", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "serde_json_path_macros" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "517acfa7f77ddaf5c43d5f119c44a683774e130b4247b7d3210f8924506cfac8" -dependencies = [ - "inventory", - "serde_json_path_core", - "serde_json_path_macros_internal", -] - -[[package]] -name = "serde_json_path_macros_internal" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[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", -] - -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.12.0", - "schemars 0.9.0", - "schemars 1.0.4", - "serde_core", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" -dependencies = [ - "darling 0.21.3", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.12.0", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - -[[package]] -name = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "serdect" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "si-scale" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" - -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" -dependencies = [ - "libc", - "mio 0.8.11", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "slab" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" - -[[package]] -name = "sluice" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" -dependencies = [ - "async-channel", - "futures-core", - "futures-io", -] - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -dependencies = [ - "serde", -] - -[[package]] -name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - -[[package]] -name = "snafu" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" -dependencies = [ - "doc-comment", - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "snow" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" -dependencies = [ - "aes-gcm", - "blake2 0.10.6", - "chacha20poly1305", - "curve25519-dalek", - "rand_core 0.6.4", - "rustc_version 0.4.1", - "sha2 0.10.9", - "subtle 2.6.1", -] - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "sphinx-packet" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" -dependencies = [ - "aes", - "arrayref", - "blake2 0.8.1", - "bs58", - "byteorder", - "chacha", - "ctr", - "curve25519-dalek", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "rand 0.8.5", - "rand_distr", - "sha2 0.10.9", - "subtle 2.6.1", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sqlx" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" -dependencies = [ - "base64 0.22.1", - "bytes", - "chrono", - "crc", - "crossbeam-queue", - "either", - "event-listener 5.4.1", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashbrown 0.15.5", - "hashlink", - "indexmap 2.12.0", - "log", - "memchr", - "once_cell", - "percent-encoding", - "rustls 0.23.33", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "sqlx-macros" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 2.0.107", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" -dependencies = [ - "dotenvy", - "either", - "heck 0.5.0", - "hex", - "once_cell", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx-core", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", - "syn 2.0.107", - "tokio", - "url", -] - -[[package]] -name = "sqlx-mysql" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.10.0", - "byteorder", - "bytes", - "chrono", - "crc", - "digest 0.10.7", - "dotenvy", - "either", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "generic-array 0.14.9", - "hex", - "hkdf", - "hmac", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "rsa", - "serde", - "sha1", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.17", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-pool-guard" -version = "0.1.0" -dependencies = [ - "proc_pidinfo", - "sqlx", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", - "windows", -] - -[[package]] -name = "sqlx-postgres" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.10.0", - "byteorder", - "chrono", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-util", - "hex", - "hkdf", - "hmac", - "home", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "rand 0.8.5", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.17", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-sqlite" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" -dependencies = [ - "atoi", - "chrono", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "serde", - "serde_urlencoded", - "sqlx-core", - "thiserror 2.0.17", - "time", - "tracing", - "url", -] - -[[package]] -name = "ssl-inject" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "hex", - "tokio", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.11.3", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", - "proc-macro2", - "quote", -] - -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "superboring" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "515cce34a781d7250b8a65706e0f2a5b99236ea605cb235d4baed6685820478f" -dependencies = [ - "getrandom 0.2.16", - "hmac-sha256", - "hmac-sha512", - "rand 0.8.5", - "rsa", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "sysinfo" -version = "0.37.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" -dependencies = [ - "libc", - "memchr", - "ntapi", - "objc2-core-foundation", - "objc2-io-kit", - "windows", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tar" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tempfile" -version = "3.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" -dependencies = [ - "fastrand 2.3.0", - "getrandom 0.3.4", - "once_cell", - "rustix", - "windows-sys 0.61.2", -] - -[[package]] -name = "tendermint" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" -dependencies = [ - "bytes", - "digest 0.10.7", - "ed25519", - "ed25519-consensus", - "flex-error", - "futures", - "k256", - "num-traits", - "once_cell", - "prost", - "ripemd", - "serde", - "serde_bytes", - "serde_json", - "serde_repr", - "sha2 0.10.9", - "signature", - "subtle 2.6.1", - "subtle-encoding", - "tendermint-proto", - "time", - "zeroize", -] - -[[package]] -name = "tendermint-config" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" -dependencies = [ - "flex-error", - "serde", - "serde_json", - "tendermint", - "toml 0.8.23", - "url", -] - -[[package]] -name = "tendermint-proto" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" -dependencies = [ - "bytes", - "flex-error", - "prost", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-rpc" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" -dependencies = [ - "async-trait", - "async-tungstenite", - "bytes", - "flex-error", - "futures", - "getrandom 0.2.16", - "peg", - "pin-project", - "rand 0.8.5", - "reqwest 0.11.27", - "semver 1.0.27", - "serde", - "serde_bytes", - "serde_json", - "subtle 2.6.1", - "subtle-encoding", - "tendermint", - "tendermint-config", - "tendermint-proto", - "thiserror 1.0.69", - "time", - "tokio", - "tracing", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "test-with" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f370b9efbfbbc5f057cbce9888373eaeb146a3095bb8cc869b199c94d15559" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "regex", - "syn 2.0.107", -] - -[[package]] -name = "testnet-manager" -version = "0.1.0" -dependencies = [ - "anyhow", - "bip39", - "bs58", - "clap", - "console", - "cw-utils", - "dkg-bypass-contract", - "humantime", - "indicatif", - "nym-bin-common", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-crypto", - "nym-ecash-contract-common", - "nym-group-contract-common", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-pemstore", - "nym-performance-contract-common", - "nym-validator-client", - "nym-vesting-contract-common", - "rand 0.8.5", - "serde", - "serde_json", - "sqlx", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "toml 0.8.23", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "textwrap" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" -dependencies = [ - "smawk", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" -dependencies = [ - "thiserror-impl 2.0.17", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "log", - "ordered-float", - "threadpool", -] - -[[package]] -name = "time" -version = "0.3.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" -dependencies = [ - "deranged", - "itoa", - "js-sys", - "libc", - "num-conv", - "num_threads", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" - -[[package]] -name = "time-macros" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "tinyvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" -dependencies = [ - "bytes", - "libc", - "mio 1.1.0", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.6.1", - "tokio-macros", - "tracing", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "tokio-postgres" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" -dependencies = [ - "async-trait", - "byteorder", - "bytes", - "fallible-iterator", - "futures-channel", - "futures-util", - "log", - "parking_lot", - "percent-encoding", - "phf 0.13.1", - "pin-project-lite", - "postgres-protocol", - "postgres-types", - "rand 0.9.2", - "socket2 0.6.1", - "tokio", - "tokio-util", - "whoami", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls 0.23.33", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-test" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" -dependencies = [ - "async-stream", - "bytes", - "futures-core", - "tokio", - "tokio-stream", -] - -[[package]] -name = "tokio-tun" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5381752d5832fc811f89d54fc334951aa435022f494190ba7151661f206df" -dependencies = [ - "libc", - "nix 0.29.0", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", - "tungstenite 0.20.1", - "webpki-roots 0.25.4", -] - -[[package]] -name = "tokio-util" -version = "0.7.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "futures-util", - "pin-project-lite", - "slab", - "tokio", -] - -[[package]] -name = "tokio_with_wasm" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dfba9b946459940fb564dcf576631074cdfb0bfe4c962acd4c31f0dca7897e6" -dependencies = [ - "js-sys", - "tokio", - "tokio_with_wasm_proc", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "tokio_with_wasm_proc" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e04c1865c281139e5ccf633cb9f76ffdaabeebfe53b703984cf82878e2aabb" -dependencies = [ - "quote", - "syn 2.0.107", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.12.0", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_write", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.23.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" -dependencies = [ - "indexmap 2.12.0", - "toml_datetime 0.7.3", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - -[[package]] -name = "tonic" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64 0.22.1", - "bytes", - "h2 0.4.12", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "hyper-timeout", - "hyper-util", - "percent-encoding", - "pin-project", - "prost", - "socket2 0.5.10", - "tokio", - "tokio-stream", - "tower 0.4.13", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 1.0.2", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" -dependencies = [ - "async-compression", - "bitflags 2.10.0", - "bytes", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "http-range-header", - "httpdate", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "bitflags 2.10.0", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "iri-string", - "pin-project-lite", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-indicatif" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04d4e11e0e27acef25a47f27e9435355fecdc488867fa2bc90e75b0700d2823d" -dependencies = [ - "indicatif", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" -dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" -dependencies = [ - "matchers", - "nu-ansi-term 0.50.3", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log 0.2.0", -] - -[[package]] -name = "tracing-test" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" -dependencies = [ - "tracing-core", - "tracing-subscriber", - "tracing-test-macro", -] - -[[package]] -name = "tracing-test-macro" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" -dependencies = [ - "quote", - "syn 2.0.107", -] - -[[package]] -name = "tracing-tree" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" -dependencies = [ - "nu-ansi-term 0.46.0", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "trackable" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" -dependencies = [ - "trackable 1.3.0", - "trackable_derive", -] - -[[package]] -name = "trackable" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" -dependencies = [ - "trackable_derive", -] - -[[package]] -name = "trackable_derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "ts-rs" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" -dependencies = [ - "lazy_static", - "thiserror 2.0.17", - "ts-rs-macros", -] - -[[package]] -name = "ts-rs-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "nym-api-requests", - "nym-mixnet-contract-common", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "nym-wallet-types", - "ts-rs", - "walkdir", -] - -[[package]] -name = "ts-rs-macros" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", - "termcolor", -] - -[[package]] -name = "tsify" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" -dependencies = [ - "gloo-utils 0.1.7", - "serde", - "serde-wasm-bindgen 0.5.0", - "serde_json", - "tsify-macros", - "wasm-bindgen", -] - -[[package]] -name = "tsify-macros" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals 0.28.0", - "syn 2.0.107", -] - -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.21.12", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", - "webpki-roots 0.24.0", -] - -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.3.1", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.22.4", - "rustls-pki-types", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", -] - -[[package]] -name = "typed-builder" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0dd654273fc253fde1df4172c31fb6615cf8b041d3a4008a028ef8b1119e66" -dependencies = [ - "typed-builder-macro", -] - -[[package]] -name = "typed-builder-macro" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c26257f448222014296978b2c8456e2cad4de308c35bdb1e383acd569ef5b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - -[[package]] -name = "unicode-ident" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-width" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "uniffi" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d968cb62160c11f2573e6be724ef8b1b18a277aededd17033f8a912d73e2b4" -dependencies = [ - "anyhow", - "camino", - "cargo_metadata 0.19.2", - "clap", - "uniffi_bindgen", - "uniffi_build", - "uniffi_core", - "uniffi_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_bindgen" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b39ef1acbe1467d5d210f274fae344cb6f8766339330cb4c9688752899bf6b" -dependencies = [ - "anyhow", - "askama", - "camino", - "cargo_metadata 0.19.2", - "fs-err", - "glob", - "goblin", - "heck 0.5.0", - "indexmap 2.12.0", - "once_cell", - "serde", - "tempfile", - "textwrap", - "toml 0.5.11", - "uniffi_internal_macros", - "uniffi_meta", - "uniffi_pipeline", - "uniffi_udl", -] - -[[package]] -name = "uniffi_build" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6683e6b665423cddeacd89a3f97312cf400b2fb245a26f197adaf65c45d505b2" -dependencies = [ - "anyhow", - "camino", - "uniffi_bindgen", -] - -[[package]] -name = "uniffi_core" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d990b553d6b9a7ee9c3ae71134674739913d52350b56152b0e613595bb5a6f" -dependencies = [ - "anyhow", - "bytes", - "once_cell", - "static_assertions", -] - -[[package]] -name = "uniffi_internal_macros" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f4f224becf14885c10e6e400b95cc4d1985738140cb194ccc2044563f8a56b" -dependencies = [ - "anyhow", - "indexmap 2.12.0", - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "uniffi_macros" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b481d385af334871d70904e6a5f129be7cd38c18fcf8dd8fd1f646b426a56d58" -dependencies = [ - "camino", - "fs-err", - "once_cell", - "proc-macro2", - "quote", - "serde", - "syn 2.0.107", - "toml 0.5.11", - "uniffi_meta", -] - -[[package]] -name = "uniffi_meta" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f817868a3b171bb7bf259e882138d104deafde65684689b4694c846d322491" -dependencies = [ - "anyhow", - "siphasher 0.3.11", - "uniffi_internal_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_pipeline" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b147e133ad7824e32426b90bc41fda584363563f2ba747f590eca1fd6fd14e6" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap 2.12.0", - "tempfile", - "uniffi_internal_macros", -] - -[[package]] -name = "uniffi_udl" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caed654fb73da5abbc7a7e9c741532284532ba4762d6fe5071372df22a41730a" -dependencies = [ - "anyhow", - "textwrap", - "uniffi_meta", - "weedle2", -] - -[[package]] -name = "unit-prefix" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle 2.6.1", -] - -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "utoipa" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" -dependencies = [ - "indexmap 2.12.0", - "serde", - "serde_json", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.107", - "uuid", -] - -[[package]] -name = "utoipa-swagger-ui" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" -dependencies = [ - "axum", - "base64 0.22.1", - "mime_guess", - "regex", - "rust-embed", - "serde", - "serde_json", - "url", - "utoipa", - "zip", -] - -[[package]] -name = "utoipauto" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba36db2c397c614110554a60fbb4bb97d5f8c6823775c766e6f455e37377047" -dependencies = [ - "utoipauto-macro", -] - -[[package]] -name = "utoipauto-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "utoipauto-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", - "utoipauto-core", -] - -[[package]] -name = "uuid" -version = "1.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" -dependencies = [ - "getrandom 0.3.4", - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "validator-status-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "comfy-table", - "nym-bin-common", - "nym-http-api-client", - "nym-network-defaults", - "nym-validator-client", - "serde", - "serde_json", - "strum", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "vergen" -version = "8.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" -dependencies = [ - "anyhow", - "cargo_metadata 0.18.1", - "cfg-if", - "regex", - "rustc_version 0.4.1", - "rustversion", - "time", -] - -[[package]] -name = "vergen" -version = "9.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b2bf58be11fc9414104c6d3a2e464163db5ef74b12296bda593cac37b6e4777" -dependencies = [ - "anyhow", - "cargo_metadata 0.19.2", - "derive_builder", - "regex", - "rustc_version 0.4.1", - "rustversion", - "time", - "vergen-lib", -] - -[[package]] -name = "vergen-gitcl" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9dfc1de6eb2e08a4ddf152f1b179529638bedc0ea95e6d667c014506377aefe" -dependencies = [ - "anyhow", - "derive_builder", - "rustversion", - "time", - "vergen 9.0.6", - "vergen-lib", -] - -[[package]] -name = "vergen-lib" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" -dependencies = [ - "anyhow", - "derive_builder", - "rustversion", -] - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vt100" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" -dependencies = [ - "itoa", - "log", - "unicode-width 0.1.14", - "vte", -] - -[[package]] -name = "vte" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" -dependencies = [ - "arrayvec", - "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - -[[package]] -name = "wasix" -version = "0.12.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" -dependencies = [ - "wasi", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.107", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-bindgen-test" -version = "0.3.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" -dependencies = [ - "js-sys", - "minicov", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.3.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "wasm-client-core" -version = "0.1.0" -dependencies = [ - "async-trait", - "console_error_panic_hook", - "js-sys", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-crypto", - "nym-gateway-client", - "nym-http-api-client", - "nym-sphinx", - "nym-sphinx-acknowledgements", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "time", - "tsify", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-storage", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "wasm-storage" -version = "0.1.0" -dependencies = [ - "async-trait", - "getrandom 0.2.16", - "indexed_db_futures", - "js-sys", - "nym-store-cipher", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-utils", -] - -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasm-utils" -version = "0.1.0" -dependencies = [ - "console_error_panic_hook", - "futures", - "getrandom 0.2.16", - "gloo-net", - "gloo-utils 0.2.0", - "js-sys", - "tungstenite 0.20.1", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmtimer" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" -dependencies = [ - "futures", - "js-sys", - "parking_lot", - "pin-utils", - "slab", - "wasm-bindgen", -] - -[[package]] -name = "web-sys" -version = "0.3.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web_atoms" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" -dependencies = [ - "phf 0.11.3", - "phf_codegen", - "string_cache", - "string_cache_codegen", -] - -[[package]] -name = "webpki-roots" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" -dependencies = [ - "rustls-webpki 0.101.7", -] - -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.3", -] - -[[package]] -name = "webpki-roots" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "weedle2" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" -dependencies = [ - "nom", -] - -[[package]] -name = "whoami" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", - "web-sys", -] - -[[package]] -name = "widestring" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link 0.1.3", - "windows-numerics", -] - -[[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", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.2.1", - "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", -] - -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[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-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", -] - -[[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", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link 0.2.1", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link 0.2.1", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[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_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "winnow" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wit-bindgen" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - -[[package]] -name = "writeable" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" -dependencies = [ - "curve25519-dalek", - "rand_core 0.6.4", - "serde", - "zeroize", -] - -[[package]] -name = "xattr" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" -dependencies = [ - "libc", - "rustix", -] - -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - -[[package]] -name = "yoke" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "zerotrie" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.107", -] - -[[package]] -name = "zip" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" -dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap 2.12.0", - "memchr", - "thiserror 2.0.17", - "zopfli", -] - -[[package]] -name = "zknym-lib" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bs58", - "getrandom 0.2.16", - "js-sys", - "nym-bin-common", - "nym-compact-ecash", - "nym-credentials", - "nym-crypto", - "nym-http-api-client", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "thiserror 2.0.17", - "tokio", - "tsify", - "uuid", - "wasm-bindgen", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "zopfli" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" -dependencies = [ - "bumpalo", - "crc32fast", - "log", - "simd-adler32", -] - -[[package]] -name = "zstd" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "zulip-client" -version = "0.1.0" -dependencies = [ - "itertools 0.14.0", - "nym-bin-common", - "nym-http-api-client", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", - "zeroize", -] diff --git a/Cargo.toml b/Cargo.toml index a6789bfd9bc..0cd635f11d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -127,6 +127,7 @@ members = [ "nym-credential-proxy/nym-credential-proxy-requests", "nym-credential-proxy/vpn-api-lib-wasm", "nym-data-observatory", + "nym-gateway-directory", "nym-ip-packet-client", "nym-network-monitor", "nym-node", @@ -157,6 +158,7 @@ members = [ "tools/internal/ssl-inject", "tools/internal/testnet-manager", "tools/internal/testnet-manager/dkg-bypass-contract", + "tools/internal/testnet-manager/dkg-bypass-contract", "tools/internal/validator-status-check", "tools/nym-cli", "tools/nym-id-cli", diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml new file mode 100644 index 00000000000..3b1914a0d27 --- /dev/null +++ b/nym-gateway-directory/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "nym-gateway-directory" +# version.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +edition.workspace = true +license.workspace = true + +[dependencies] +futures.workspace = true +itertools.workspace = true +nym-client-core = { path = "../common/client-core" } +nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 +nym-http-api-client = { path = "../common/http-api-client" } +nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } +nym-sdk = { path = "../sdk/rust/nym-sdk" } +nym-topology = { path = "../common/topology" } +nym-validator-client = { path = "../common/client-libs/validator-client" } +# nym-vpn-api-client = { path = "../nym-vpn-api-client" } # pull in remote and see if that works? I wonder if I can sack this off +rand.workspace = true +serde.workspace = true +strum.workspace = true +thiserror.workspace = true +tokio.workspace = true +tracing.workspace = true +url.workspace = true + +[dev-dependencies] +tokio = { workspace = true, features = ["full"] } diff --git a/nym-gateway-directory/src/caching_client.rs b/nym-gateway-directory/src/caching_client.rs new file mode 100644 index 00000000000..790d22a1520 --- /dev/null +++ b/nym-gateway-directory/src/caching_client.rs @@ -0,0 +1,329 @@ +// Copyright 2025 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::{ + collections::HashMap, + net::IpAddr, + sync::Arc, + time::{Duration, Instant}, +}; + +use futures::{FutureExt, StreamExt, stream::FuturesUnordered}; +use nym_offline_monitor::ConnectivityHandle; +pub use nym_sdk::mixnet::NodeIdentity; +use strum::IntoEnumIterator; +use tokio::sync::Mutex; + +use crate::{ + Config, Country, Error, Gateway, GatewayClient, GatewayList, GatewayType, error::Result, +}; + +#[derive(Clone)] +pub struct CachingGatewayClient { + inner: Arc>, +} + +impl CachingGatewayClient { + pub fn new( + gateway_client: GatewayClient, + connectivity_handle: Option, + ) -> Self { + Self { + inner: Arc::new(Mutex::new(CachingGatewayClientInner { + gateway_client, + connectivity_handle, + cached_gateways: Default::default(), + cached_countries: Default::default(), + })), + } + } + + pub async fn new_from_existing(existing_client: &CachingGatewayClient) -> Self { + let inner = existing_client.inner.lock().await; + Self { + inner: Arc::new(Mutex::new(CachingGatewayClientInner { + gateway_client: inner.gateway_client.clone(), + connectivity_handle: inner.connectivity_handle.clone(), + cached_gateways: inner.cached_gateways.clone(), + cached_countries: inner.cached_countries.clone(), + })), + } + } + + pub async fn update_client(&self, new_client: GatewayClient) { + self.inner.lock().await.gateway_client = new_client; + } + + pub async fn set_connectivity_handle(&self, connectivity_handle: ConnectivityHandle) { + self.inner.lock().await.connectivity_handle = Some(connectivity_handle); + } + + pub async fn get_config(&self) -> Config { + self.inner.lock().await.gateway_client.get_config() + } + + pub async fn refresh_all(&self) { + self.inner.lock().await.refresh_all().await + } + + pub async fn force_refresh_all(&self) { + self.inner.lock().await.force_refresh_all().await + } + + pub async fn lookup_gateways(&self, gw_type: GatewayType) -> Result { + self.inner.lock().await.lookup_gateways(gw_type).await + } + + pub async fn lookup_countries(&self, gw_type: GatewayType) -> Result> { + self.inner.lock().await.lookup_countries(gw_type).await + } + + pub async fn lookup_gateway_ip(&self, gateway_identity: &str) -> Result { + self.inner + .lock() + .await + .lookup_gateway_ip(gateway_identity) + .await + } +} + +/// A caching client that wraps around the `GatewayClient` and caches the results of +/// `lookup_gateways` and `lookup_countries` calls. +struct CachingGatewayClientInner { + // The underlying client that actually does the work + gateway_client: GatewayClient, + + // The connectivity handle to check if we are online + connectivity_handle: Option, + + // The cached gateways and their last updated time + cached_gateways: HashMap, + + // The cached countries and their last updated time + cached_countries: HashMap, Instant)>, +} + +enum LookupResult { + Gateways(Result), + Countries(Result>), +} + +impl CachingGatewayClientInner { + /// The maximum age of the cache before it is considered stale. + const MAX_CACHE_AGE: Duration = Duration::from_secs(5 * 60); + + async fn check_offline(&self) -> bool { + if let Some(connectivity_handle) = &self.connectivity_handle { + if connectivity_handle.connectivity().await.is_offline() { + return true; + } + } + false + } + + pub async fn refresh_all(&mut self) { + tracing::info!("Refreshing all gateways and countries"); + self.refresh( + self.get_stale_gateway_list_types(), + self.get_stale_country_list_types(), + ) + .await; + } + + pub async fn force_refresh_all(&mut self) { + tracing::info!("Forcing refresh of all gateways and countries"); + self.refresh(GatewayType::iter().collect(), GatewayType::iter().collect()) + .await; + } + + fn get_stale_gateway_list_types(&self) -> Vec { + let mut stale_gw_types = Vec::new(); + for gw_type in GatewayType::iter() { + if !self.is_gateways_current(&gw_type) { + stale_gw_types.push(gw_type.clone()); + } + } + stale_gw_types + } + + fn get_stale_country_list_types(&self) -> Vec { + let mut stale_gw_types = Vec::new(); + for gw_type in GatewayType::iter() { + if !self.is_countries_current(&gw_type) { + stale_gw_types.push(gw_type.clone()); + } + } + stale_gw_types + } + + async fn refresh(&mut self, gw_list_types: Vec, country_types: Vec) { + if self.check_offline().await { + tracing::warn!("Not refreshing gateways and countries because we are not connected"); + return; + } + + tracing::info!( + "Refreshing gateway lists: {gw_list_types:?}, country lists: {country_types:?}" + ); + let mut tasks = FuturesUnordered::new(); + + for gw_type in country_types { + let client = self.gateway_client.clone(); + tasks.push( + async move { + let res = client.lookup_countries(gw_type.clone()).await; + (gw_type, LookupResult::Countries(res)) + } + .boxed(), + ); + } + for gw_type in gw_list_types { + let client = self.gateway_client.clone(); + tasks.push( + async move { + let res = client.lookup_gateways(gw_type.clone()).await; + (gw_type, LookupResult::Gateways(res)) + } + .boxed(), + ); + } + + while let Some((gw_type, res)) = tasks.next().await { + match res { + LookupResult::Gateways(r) => match r { + Ok(ref refreshed_gateways) => { + tracing::info!("Refreshed gateways for {gw_type:?}"); + self.cached_gateways.insert( + gw_type.clone(), + (refreshed_gateways.clone(), Instant::now()), + ); + } + Err(err) => { + tracing::warn!("Failed to refresh gateways for {gw_type:?}: {err}"); + } + }, + LookupResult::Countries(r) => match r { + Ok(ref refreshed_countries) => { + tracing::info!("Refreshed countries for {gw_type:?}"); + self.cached_countries.insert( + gw_type.clone(), + (refreshed_countries.clone(), Instant::now()), + ); + } + Err(err) => { + tracing::warn!("Failed to refresh countries for {gw_type:?}: {err}"); + } + }, + } + } + } + + fn is_countries_current(&self, gw_type: &GatewayType) -> bool { + if let Some((_, last_updated)) = self.cached_countries.get(gw_type) { + last_updated.elapsed() < Self::MAX_CACHE_AGE + } else { + false + } + } + + fn is_gateways_current(&self, gw_type: &GatewayType) -> bool { + if let Some((_, last_updated)) = self.cached_gateways.get(gw_type) { + last_updated.elapsed() < Self::MAX_CACHE_AGE + } else { + false + } + } + + async fn refresh_countries(&mut self, gw_type: GatewayType) -> Result> { + if let Some((countries, last_updated)) = self.cached_countries.get(&gw_type) { + if last_updated.elapsed() < Self::MAX_CACHE_AGE { + return Ok(countries.clone()); + } + } + self.force_refresh_countries(gw_type).await + } + + async fn force_refresh_countries(&mut self, gw_type: GatewayType) -> Result> { + if self.check_offline().await { + tracing::warn!("Not refreshing countries because we are not connected"); + return Err(Error::Offline); + } + let refreshed_countries = self + .gateway_client + .lookup_countries(gw_type.clone()) + .await?; + self.cached_countries.insert( + gw_type.clone(), + (refreshed_countries.clone(), Instant::now()), + ); + Ok(refreshed_countries) + } + + async fn refresh_gateways(&mut self, gw_type: GatewayType) -> Result { + if let Some((gw_list, last_updated)) = self.cached_gateways.get(&gw_type) { + if last_updated.elapsed() < Self::MAX_CACHE_AGE { + return Ok(gw_list.clone()); + } + } + self.force_refresh_gateways(gw_type).await + } + + async fn force_refresh_gateways(&mut self, gw_type: GatewayType) -> Result { + if self.check_offline().await { + tracing::warn!("Not refreshing countries because we are not connected"); + return Err(Error::Offline); + } + let refreshed_gateways = self.gateway_client.lookup_gateways(gw_type.clone()).await?; + self.cached_gateways.insert( + gw_type.clone(), + (refreshed_gateways.clone(), Instant::now()), + ); + Ok(refreshed_gateways) + } + + async fn lookup_gateways(&mut self, gw_type: GatewayType) -> Result { + let refresh_result = self.refresh_gateways(gw_type.clone()).await; + + // Regardless of if we managed to refresh the cache, we return the cached gateways if they + // exist. They should be the most recent one we can muster + if let Some((gateways, _)) = self.cached_gateways.get(&gw_type) { + Ok(gateways.clone()) + } else { + refresh_result + } + } + + async fn lookup_countries(&mut self, gw_type: GatewayType) -> Result> { + let refresh_result = self.refresh_countries(gw_type.clone()).await; + + // Regardless of if we managed to refresh the cache, we return the cached countries if they + // exist. They should be the most recent one we can muster + if let Some((countries, _)) = self.cached_countries.get(&gw_type) { + Ok(countries.clone()) + } else { + refresh_result + } + } + + async fn lookup_gateway_ip(&mut self, gateway_identity: &str) -> Result { + // If we have a populated list of gateways, we should always be able to find the IP there. + if let Ok(identity) = NodeIdentity::from_base58_string(gateway_identity) { + for (_, (gateways, _)) in self.cached_gateways.iter() { + if let Some(ip) = gateways + .node_with_identity(&identity) + .and_then(Gateway::lookup_ip) + { + return Ok(ip); + } + } + } else { + tracing::warn!("Failed to parse gateway identity: {gateway_identity}"); + } + + // Fallback + tracing::warn!("Using fallback to lookup gateway IP"); + self.gateway_client + .lookup_gateway_ip(gateway_identity) + .await + } +} diff --git a/nym-gateway-directory/src/entries/auth_addresses.rs b/nym-gateway-directory/src/entries/auth_addresses.rs new file mode 100644 index 00000000000..a958032cae4 --- /dev/null +++ b/nym-gateway-directory/src/entries/auth_addresses.rs @@ -0,0 +1,57 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::fmt::Display; + +pub use nym_sdk::mixnet::Recipient; + +use crate::{Error, error::Result}; + +// optional, until we remove the wireguard feature flag +#[derive(Debug, Copy, Clone)] +pub struct AuthAddress(pub Option); + +impl AuthAddress { + pub(crate) fn try_from_base58_string(address: &str) -> Result { + let recipient = Recipient::try_from_base58_string(address).map_err(|source| { + Error::RecipientFormattingError { + address: address.to_string(), + source, + } + })?; + Ok(AuthAddress(Some(recipient))) + } +} + +#[derive(Debug, Copy, Clone)] +pub struct AuthAddresses { + entry_addr: AuthAddress, + exit_addr: AuthAddress, +} + +impl AuthAddresses { + pub fn new(entry_addr: AuthAddress, exit_addr: AuthAddress) -> Self { + AuthAddresses { + entry_addr, + exit_addr, + } + } + + pub fn entry(&self) -> AuthAddress { + self.entry_addr + } + + pub fn exit(&self) -> AuthAddress { + self.exit_addr + } +} + +impl Display for AuthAddresses { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "entry: {:?} exit: {:?}", + self.entry_addr.0, self.exit_addr.0 + ) + } +} diff --git a/nym-gateway-directory/src/entries/country.rs b/nym-gateway-directory/src/entries/country.rs new file mode 100644 index 00000000000..0a93685e7bf --- /dev/null +++ b/nym-gateway-directory/src/entries/country.rs @@ -0,0 +1,31 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use crate::Location; + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct Country { + iso_code: String, +} + +impl Country { + pub fn iso_code(&self) -> &str { + &self.iso_code + } +} + +impl From for Country { + fn from(country: nym_vpn_api_client::response::NymDirectoryCountry) -> Self { + Self { + iso_code: country.iso_code().to_string(), + } + } +} + +impl From for Country { + fn from(location: Location) -> Self { + Self { + iso_code: location.two_letter_iso_country_code, + } + } +} diff --git a/nym-gateway-directory/src/entries/entry_point.rs b/nym-gateway-directory/src/entries/entry_point.rs new file mode 100644 index 00000000000..24458351f96 --- /dev/null +++ b/nym-gateway-directory/src/entries/entry_point.rs @@ -0,0 +1,78 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::fmt::{Display, Formatter}; + +pub use nym_sdk::mixnet::NodeIdentity; +use serde::{Deserialize, Serialize}; +use tracing::debug; + +use super::gateway::{Gateway, GatewayList}; +use crate::{Error, error::Result}; + +// The entry point is always a gateway identity, or some other entry that can be resolved to a +// gateway identity. +#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] +pub enum EntryPoint { + // An explicit entry gateway identity. + Gateway { identity: NodeIdentity }, + // Select a random entry gateway in a specific location. + Location { location: String }, + // Select an entry gateway at random. + Random, +} + +impl Display for EntryPoint { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + EntryPoint::Gateway { identity } => write!(f, "Gateway: {identity}"), + EntryPoint::Location { location } => write!(f, "Location: {location}"), + EntryPoint::Random => write!(f, "Random"), + } + } +} + +impl EntryPoint { + pub fn from_base58_string(base58: &str) -> Result { + let identity = NodeIdentity::from_base58_string(base58).map_err(|source| { + Error::NodeIdentityFormattingError { + identity: base58.to_string(), + source, + } + })?; + Ok(EntryPoint::Gateway { identity }) + } + + pub fn is_location(&self) -> bool { + matches!(self, EntryPoint::Location { .. }) + } + + pub async fn lookup_gateway(&self, gateways: &GatewayList) -> Result { + match &self { + EntryPoint::Gateway { identity } => { + debug!("Selecting gateway by identity: {}", identity); + gateways + .gateway_with_identity(identity) + .ok_or_else(|| Error::NoMatchingGateway { + requested_identity: identity.to_string(), + }) + .cloned() + } + EntryPoint::Location { location } => { + debug!("Selecting gateway by location: {}", location); + gateways + .random_gateway_located_at(location.to_string()) + .ok_or_else(|| Error::NoMatchingEntryGatewayForLocation { + requested_location: location.clone(), + available_countries: gateways.all_iso_codes(), + }) + } + EntryPoint::Random => { + debug!("Selecting a random gateway"); + gateways + .random_gateway() + .ok_or_else(|| Error::FailedToSelectGatewayRandomly) + } + } + } +} diff --git a/nym-gateway-directory/src/entries/exit_point.rs b/nym-gateway-directory/src/entries/exit_point.rs new file mode 100644 index 00000000000..7a95be8295f --- /dev/null +++ b/nym-gateway-directory/src/entries/exit_point.rs @@ -0,0 +1,92 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::fmt::{Display, Formatter}; + +pub use nym_sdk::mixnet::{NodeIdentity, Recipient}; +use serde::{Deserialize, Serialize}; + +use super::gateway::{Gateway, GatewayList}; +use crate::{Error, IpPacketRouterAddress, error::Result}; + +// The exit point is a nym-address, but if the exit ip-packet-router is running embedded on a +// gateway, we can refer to it by the gateway identity. +#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] +pub enum ExitPoint { + // An explicit exit address. This is useful when the exit ip-packet-router is running as a + // standalone entity (private). + Address { address: Box }, + + // An explicit exit gateway identity. This is useful when the exit ip-packet-router is running + // embedded on a gateway. + Gateway { identity: NodeIdentity }, + + // NOTE: Consider using a crate with strongly typed country codes instead of strings + Location { location: String }, + + // Select an exit gateway at random. + Random, +} + +impl Display for ExitPoint { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + ExitPoint::Address { address } => write!(f, "Address: {address}"), + ExitPoint::Gateway { identity } => write!(f, "Gateway: {identity}"), + ExitPoint::Location { location } => write!(f, "Location: {location}"), + ExitPoint::Random => write!(f, "Random"), + } + } +} + +impl ExitPoint { + pub fn is_location(&self) -> bool { + matches!(self, ExitPoint::Location { .. }) + } + + pub fn lookup_gateway(&self, gateways: &GatewayList) -> Result { + match &self { + ExitPoint::Address { address } => { + tracing::debug!("Selecting gateway by address: {address}"); + // There is no validation done when a ip packet router is specified by address + // since it might be private and not available in any directory. + let ipr_address = IpPacketRouterAddress::from(**address); + let gateway_address = ipr_address.gateway(); + + // Now fetch the gateway that the IPR is connected to, and override its IPR address + let mut gateway = gateways + .gateway_with_identity(&gateway_address) + .ok_or_else(|| Error::NoMatchingGateway { + requested_identity: gateway_address.to_string(), + }) + .cloned()?; + gateway.ipr_address = Some(ipr_address); + Ok(gateway) + } + ExitPoint::Gateway { identity } => { + tracing::debug!("Selecting gateway by identity: {identity}"); + gateways + .gateway_with_identity(identity) + .ok_or_else(|| Error::NoMatchingGateway { + requested_identity: identity.to_string(), + }) + .cloned() + } + ExitPoint::Location { location } => { + tracing::debug!("Selecting gateway by location: {location}"); + gateways + .random_gateway_located_at(location.to_string()) + .ok_or_else(|| Error::NoMatchingExitGatewayForLocation { + requested_location: location.clone(), + available_countries: gateways.all_iso_codes(), + }) + } + ExitPoint::Random => { + tracing::debug!("Selecting a random exit gateway"); + gateways + .random_gateway() + .ok_or_else(|| Error::FailedToSelectGatewayRandomly) + } + } + } +} diff --git a/nym-gateway-directory/src/entries/gateway.rs b/nym-gateway-directory/src/entries/gateway.rs new file mode 100644 index 00000000000..eb8ecf852ee --- /dev/null +++ b/nym-gateway-directory/src/entries/gateway.rs @@ -0,0 +1,535 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use itertools::Itertools; +pub use nym_sdk::mixnet::NodeIdentity; +use nym_topology::{NodeId, RoutingNode}; +use nym_vpn_api_client::types::{NaiveFloat, Percent, ScoreThresholds}; +use rand::seq::IteratorRandom; +use std::{fmt, net::IpAddr}; +use tracing::error; + +use crate::{AuthAddress, Country, Error, IpPacketRouterAddress, error::Result}; + +use super::score::{HIGH_SCORE_THRESHOLD, LOW_SCORE_THRESHOLD, MEDIUM_SCORE_THRESHOLD, Score}; + +pub type NymNode = Gateway; + +#[derive(Clone)] +pub struct Gateway { + pub identity: NodeIdentity, + pub moniker: String, + pub location: Option, + pub ipr_address: Option, + pub authenticator_address: Option, + pub last_probe: Option, + pub ips: Vec, + pub host: Option, + pub clients_ws_port: Option, + pub clients_wss_port: Option, + pub mixnet_performance: Option, + pub wg_performance: Option, + pub wg_score: Option, + pub mixnet_score: Option, + pub version: Option, +} + +impl fmt::Debug for Gateway { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("Gateway") + .field("identity", &self.identity.to_base58_string()) + .field("location", &self.location) + .field("ipr_address", &self.ipr_address) + .field("authenticator_address", &self.authenticator_address) + .field("last_probe", &self.last_probe) + .field("host", &self.host) + .field("clients_ws_port", &self.clients_ws_port) + .field("clients_wss_port", &self.clients_wss_port) + .field("mixnet_performance", &self.mixnet_performance) + .finish() + } +} + +impl Gateway { + pub fn identity(&self) -> NodeIdentity { + self.identity + } + + pub fn two_letter_iso_country_code(&self) -> Option<&str> { + self.location + .as_ref() + .map(|l| l.two_letter_iso_country_code.as_str()) + } + + pub fn is_two_letter_iso_country_code(&self, code: &str) -> bool { + self.two_letter_iso_country_code() == Some(code) + } + + pub fn has_ipr_address(&self) -> bool { + self.ipr_address.is_some() + } + + pub fn has_authenticator_address(&self) -> bool { + self.authenticator_address.is_some() + } + + pub fn host(&self) -> Option<&String> { + self.host.as_ref() + } + + pub fn lookup_ip(&self) -> Option { + self.ips.first().copied() + } + + pub fn clients_address_no_tls(&self) -> Option { + match (&self.host, &self.clients_ws_port) { + (Some(host), Some(port)) => Some(format!("ws://{host}:{port}")), + _ => None, + } + } + + pub fn clients_address_tls(&self) -> Option { + match (&self.host, &self.clients_wss_port) { + (Some(host), Some(port)) => Some(format!("wss://{host}:{port}")), + _ => None, + } + } + + pub fn update_to_new_thresholds( + &mut self, + mix_thresholds: Option, + wg_thresholds: Option, + ) { + if let (Some(mix_thresholds), Some(score)) = (mix_thresholds, self.mixnet_score.as_mut()) { + score.update_to_new_thresholds(mix_thresholds); + } + if let (Some(wg_thresholds), Some(score)) = (wg_thresholds, self.wg_score.as_mut()) { + score.update_to_new_thresholds(wg_thresholds); + } + } +} + +#[derive(Debug, Default, Clone, PartialEq)] +pub struct Location { + pub two_letter_iso_country_code: String, + pub latitude: f64, + pub longitude: f64, +} + +#[derive(Debug, Clone, PartialEq)] +pub struct Probe { + pub last_updated_utc: String, + pub outcome: ProbeOutcome, +} + +#[derive(Debug, Clone, PartialEq)] +pub struct ProbeOutcome { + pub as_entry: Entry, + pub as_exit: Option, + pub wg: Option, +} + +#[derive(Debug, Clone, PartialEq)] +pub struct Entry { + pub can_connect: bool, + pub can_route: bool, +} + +#[derive(Debug, Clone, PartialEq)] +pub struct Exit { + pub can_connect: bool, + pub can_route_ip_v4: bool, + pub can_route_ip_external_v4: bool, + pub can_route_ip_v6: bool, + pub can_route_ip_external_v6: bool, +} + +#[derive(Debug, Clone, PartialEq)] +pub struct WgProbeResults { + pub can_register: bool, + pub can_handshake: bool, + pub can_resolve_dns: bool, + pub ping_hosts_performance: f32, + pub ping_ips_performance: f32, +} + +impl From for Location { + fn from(location: nym_vpn_api_client::response::Location) -> Self { + Location { + two_letter_iso_country_code: location.two_letter_iso_country_code, + latitude: location.latitude, + longitude: location.longitude, + } + } +} + +impl From for Probe { + fn from(probe: nym_vpn_api_client::response::Probe) -> Self { + Probe { + last_updated_utc: probe.last_updated_utc, + outcome: ProbeOutcome::from(probe.outcome), + } + } +} + +impl From for Score { + fn from(percent: Percent) -> Self { + let rounded_percent = percent.round_to_integer(); + if rounded_percent >= HIGH_SCORE_THRESHOLD { + Score::High(rounded_percent) + } else if rounded_percent >= MEDIUM_SCORE_THRESHOLD { + Score::Medium(rounded_percent) + } else if rounded_percent > LOW_SCORE_THRESHOLD { + Score::Low(rounded_percent) + } else { + Score::None + } + } +} + +impl From for ProbeOutcome { + fn from(outcome: nym_vpn_api_client::response::ProbeOutcome) -> Self { + ProbeOutcome { + as_entry: Entry::from(outcome.as_entry), + as_exit: outcome.as_exit.map(Exit::from), + wg: outcome.wg.map(WgProbeResults::from), + } + } +} + +impl From for Entry { + fn from(entry: nym_vpn_api_client::response::Entry) -> Self { + Entry { + can_connect: entry.can_connect, + can_route: entry.can_route, + } + } +} + +impl From for Exit { + fn from(exit: nym_vpn_api_client::response::Exit) -> Self { + Exit { + can_connect: exit.can_connect, + can_route_ip_v4: exit.can_route_ip_v4, + can_route_ip_external_v4: exit.can_route_ip_external_v4, + can_route_ip_v6: exit.can_route_ip_v6, + can_route_ip_external_v6: exit.can_route_ip_external_v6, + } + } +} + +impl From for WgProbeResults { + fn from(results: nym_vpn_api_client::response::WgProbeResults) -> Self { + WgProbeResults { + can_register: results.can_register, + can_handshake: results.can_handshake, + can_resolve_dns: results.can_resolve_dns, + ping_hosts_performance: results.ping_hosts_performance, + ping_ips_performance: results.ping_ips_performance, + } + } +} + +impl TryFrom for Gateway { + type Error = Error; + + fn try_from(gateway: nym_vpn_api_client::response::NymDirectoryGateway) -> Result { + let identity = + NodeIdentity::from_base58_string(&gateway.identity_key).map_err(|source| { + Error::NodeIdentityFormattingError { + identity: gateway.identity_key, + source, + } + })?; + + let ipr_address = gateway + .ip_packet_router + .and_then(|ipr| IpPacketRouterAddress::try_from_base58_string(&ipr.address).ok()); + + let authenticator_address = gateway + .authenticator + .and_then(|auth| AuthAddress::try_from_base58_string(&auth.address).ok()); + + let hostname = gateway.entry.hostname; + let first_ip_address = gateway + .ip_addresses + .first() + .cloned() + .map(|ip| ip.to_string()); + let host = hostname.or(first_ip_address); + let wg_performance = gateway.last_probe.as_ref().and_then(|probe| { + probe + .outcome + .wg + .as_ref() + .and_then(|p| Percent::naive_try_from_f64(p.ping_hosts_performance as f64).ok()) + }); + + Ok(Gateway { + identity, + moniker: gateway.name, + location: Some(gateway.location.into()), + ipr_address, + authenticator_address, + last_probe: gateway.last_probe.map(Probe::from), + ips: gateway.ip_addresses, + host, + clients_ws_port: Some(gateway.entry.ws_port), + clients_wss_port: gateway.entry.wss_port, + mixnet_performance: Some(gateway.performance), + mixnet_score: Some(Score::from(gateway.performance)), + wg_performance, + wg_score: wg_performance.map(Score::from), + version: gateway.build_information.map(|info| info.build_version), + }) + } +} + +impl TryFrom for Gateway { + type Error = Error; + + fn try_from( + node_description: nym_validator_client::models::NymNodeDescription, + ) -> Result { + let identity = node_description.description.host_information.keys.ed25519; + let location = node_description + .description + .auxiliary_details + .location + .map(|l| Location { + two_letter_iso_country_code: l.alpha2.to_string(), + ..Default::default() + }); + let ipr_address = node_description + .description + .ip_packet_router + .as_ref() + .and_then(|ipr| { + IpPacketRouterAddress::try_from_base58_string(&ipr.address) + .inspect_err(|err| error!("Failed to parse IPR address: {err}")) + .ok() + }); + let authenticator_address = node_description + .description + .authenticator + .as_ref() + .and_then(|a| { + AuthAddress::try_from_base58_string(&a.address) + .inspect_err(|err| error!("Failed to parse authenticator address: {err}")) + .ok() + }); + let version = Some(node_description.version().to_string()); + let role = if node_description.description.declared_role.entry { + nym_validator_client::nym_nodes::NodeRole::EntryGateway + } else if node_description.description.declared_role.exit_ipr + || node_description.description.declared_role.exit_nr + { + nym_validator_client::nym_nodes::NodeRole::ExitGateway + } else { + nym_validator_client::nym_nodes::NodeRole::Inactive + }; + + let gateway = + RoutingNode::try_from(&node_description.to_skimmed_node(role, Default::default())) + .map_err(|_| Error::MalformedGateway)?; + + let host = gateway.ws_entry_address(false); + let entry_info = &gateway.entry; + let clients_ws_port = entry_info.as_ref().map(|g| g.clients_ws_port); + let clients_wss_port = entry_info.as_ref().and_then(|g| g.clients_wss_port); + let ips = node_description.description.host_information.ip_address; + Ok(Gateway { + identity, + moniker: String::new(), + location, + ipr_address, + authenticator_address, + last_probe: None, + ips, + host, + clients_ws_port, + clients_wss_port, + mixnet_performance: None, + wg_performance: None, + wg_score: None, + mixnet_score: None, + version, + }) + } +} + +pub type NymNodeList = GatewayList; + +#[derive(Debug, Clone)] +pub struct GatewayList { + gateways: Vec, +} + +impl GatewayList { + pub fn new(gateways: Vec) -> Self { + GatewayList { gateways } + } + + // Returns a list of all locations of the gateways, including duplicates + fn all_locations(&self) -> impl Iterator { + self.gateways + .iter() + .filter_map(|gateway| gateway.location.as_ref()) + } + + pub fn all_countries(&self) -> Vec { + self.all_locations() + .cloned() + .map(Country::from) + .unique() + .collect() + } + + pub fn all_iso_codes(&self) -> Vec { + self.all_countries() + .into_iter() + .map(|country| country.iso_code().to_string()) + .collect() + } + + pub fn node_with_identity(&self, identity: &NodeIdentity) -> Option<&NymNode> { + self.gateways + .iter() + .find(|node| &node.identity() == identity) + } + + pub fn gateway_with_identity(&self, identity: &NodeIdentity) -> Option<&Gateway> { + self.node_with_identity(identity) + } + + pub fn gateways_located_at(&self, code: String) -> impl Iterator { + self.gateways.iter().filter(move |gateway| { + gateway + .two_letter_iso_country_code() + .is_some_and(|gw_code| gw_code == code) + }) + } + + pub fn random_gateway(&self) -> Option { + self.gateways + .iter() + .choose(&mut rand::thread_rng()) + .cloned() + } + + pub fn random_gateway_located_at(&self, code: String) -> Option { + self.gateways_located_at(code) + .choose(&mut rand::thread_rng()) + .cloned() + } + + pub fn remove_gateway(&mut self, entry_gateway: &Gateway) { + self.gateways + .retain(|gateway| gateway.identity() != entry_gateway.identity()); + } + + pub fn len(&self) -> usize { + self.gateways.len() + } + + pub fn is_empty(&self) -> bool { + self.gateways.is_empty() + } + + pub fn into_exit_gateways(self) -> GatewayList { + let gw = self + .gateways + .into_iter() + .filter(Gateway::has_ipr_address) + .collect(); + Self::new(gw) + } + + pub fn into_vpn_gateways(self) -> GatewayList { + let gw = self + .gateways + .into_iter() + .filter(Gateway::has_authenticator_address) + .collect(); + Self::new(gw) + } + + pub fn into_countries(self) -> Vec { + self.all_countries() + } + + pub fn into_inner(self) -> Vec { + self.gateways + } +} + +impl IntoIterator for GatewayList { + type Item = Gateway; + type IntoIter = std::vec::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.gateways.into_iter() + } +} + +impl nym_client_core::init::helpers::ConnectableGateway for Gateway { + #[allow(unconditional_recursion)] + fn node_id(&self) -> NodeId { + self.node_id() + } + + fn identity(&self) -> nym_sdk::mixnet::NodeIdentity { + self.identity() + } + + fn clients_address(&self, _prefer_ipv6: bool) -> Option { + // This is a bit of a sharp edge, but temporary until we can remove Option from host + // and tls port when we add these to the vpn API endpoints. + Some( + self.clients_address_tls() + .or(self.clients_address_no_tls()) + .unwrap_or("ws://".to_string()), + ) + } + + fn is_wss(&self) -> bool { + self.clients_address_tls().is_some() + } +} + +#[derive(Debug, Clone, Hash, PartialEq, Eq, strum::EnumIter)] +pub enum GatewayType { + MixnetEntry, + MixnetExit, + Wg, +} + +impl fmt::Display for GatewayType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + GatewayType::MixnetEntry => write!(f, "mixnet entry"), + GatewayType::MixnetExit => write!(f, "mixnet exit"), + GatewayType::Wg => write!(f, "vpn"), + } + } +} + +impl From for GatewayType { + fn from(gateway_type: nym_vpn_api_client::types::GatewayType) -> Self { + match gateway_type { + nym_vpn_api_client::types::GatewayType::MixnetEntry => GatewayType::MixnetEntry, + nym_vpn_api_client::types::GatewayType::MixnetExit => GatewayType::MixnetExit, + nym_vpn_api_client::types::GatewayType::Wg => GatewayType::Wg, + } + } +} + +impl From for nym_vpn_api_client::types::GatewayType { + fn from(gateway_type: GatewayType) -> Self { + match gateway_type { + GatewayType::MixnetEntry => nym_vpn_api_client::types::GatewayType::MixnetEntry, + GatewayType::MixnetExit => nym_vpn_api_client::types::GatewayType::MixnetExit, + GatewayType::Wg => nym_vpn_api_client::types::GatewayType::Wg, + } + } +} diff --git a/nym-gateway-directory/src/entries/ipr_addresses.rs b/nym-gateway-directory/src/entries/ipr_addresses.rs new file mode 100644 index 00000000000..e6c0eb31150 --- /dev/null +++ b/nym-gateway-directory/src/entries/ipr_addresses.rs @@ -0,0 +1,56 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +pub use nym_sdk::mixnet::{NodeIdentity, Recipient}; +use nym_validator_client::models::NymNodeData; + +use crate::{Error, error::Result}; + +#[derive(Debug, Copy, Clone)] +pub struct IpPacketRouterAddress(Recipient); + +impl IpPacketRouterAddress { + pub fn try_from_base58_string(ip_packet_router_nym_address: &str) -> Result { + Ok(Self( + Recipient::try_from_base58_string(ip_packet_router_nym_address).map_err(|source| { + Error::RecipientFormattingError { + address: ip_packet_router_nym_address.to_string(), + source, + } + })?, + )) + } + + pub fn try_from_described_gateway(gateway: &NymNodeData) -> Result { + let address = gateway + .clone() + .ip_packet_router + .map(|ipr| ipr.address) + .ok_or(Error::MissingIpPacketRouterAddress)?; + Ok(Self(Recipient::try_from_base58_string(&address).map_err( + |source| Error::RecipientFormattingError { address, source }, + )?)) + } + + pub fn gateway(&self) -> NodeIdentity { + self.0.gateway() + } +} + +impl std::fmt::Display for IpPacketRouterAddress { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} + +impl From for IpPacketRouterAddress { + fn from(recipient: Recipient) -> Self { + Self(recipient) + } +} + +impl From for Recipient { + fn from(ipr_address: IpPacketRouterAddress) -> Self { + ipr_address.0 + } +} diff --git a/nym-gateway-directory/src/entries/mod.rs b/nym-gateway-directory/src/entries/mod.rs new file mode 100644 index 00000000000..0a74d0afed5 --- /dev/null +++ b/nym-gateway-directory/src/entries/mod.rs @@ -0,0 +1,7 @@ +pub(crate) mod auth_addresses; +pub(crate) mod country; +pub(crate) mod entry_point; +pub(crate) mod exit_point; +pub(crate) mod gateway; +pub(crate) mod ipr_addresses; +pub(crate) mod score; diff --git a/nym-gateway-directory/src/entries/score.rs b/nym-gateway-directory/src/entries/score.rs new file mode 100644 index 00000000000..45c298f16c6 --- /dev/null +++ b/nym-gateway-directory/src/entries/score.rs @@ -0,0 +1,34 @@ +// Copyright 2025 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use nym_vpn_api_client::types::ScoreThresholds; + +pub(crate) const HIGH_SCORE_THRESHOLD: u8 = 80; +pub(crate) const MEDIUM_SCORE_THRESHOLD: u8 = 60; +pub(crate) const LOW_SCORE_THRESHOLD: u8 = 0; + +#[derive(Clone)] +pub enum Score { + High(u8), + Medium(u8), + Low(u8), + None, +} + +impl Score { + pub fn update_to_new_thresholds(&mut self, thresholds: ScoreThresholds) { + let score = match self { + Score::None => return, + Score::High(score) | Score::Medium(score) | Score::Low(score) => *score, + }; + *self = if score > thresholds.high { + Score::High(score) + } else if score > thresholds.medium { + Score::Medium(score) + } else if score > thresholds.low { + Score::Low(score) + } else { + Score::None + }; + } +} diff --git a/nym-gateway-directory/src/error.rs b/nym-gateway-directory/src/error.rs new file mode 100644 index 00000000000..36003241865 --- /dev/null +++ b/nym-gateway-directory/src/error.rs @@ -0,0 +1,93 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("identity not formatted correctly: {identity}")] + NodeIdentityFormattingError { + identity: String, + source: nym_sdk::mixnet::ed25519::Ed25519RecoveryError, + }, + + #[error("recipient is not formatted correctly: {address}")] + RecipientFormattingError { + address: String, + source: nym_sdk::mixnet::RecipientFormattingError, + }, + + #[error(transparent)] + ValidatorClientError(#[from] nym_validator_client::ValidatorClientError), + + #[error(transparent)] + VpnApiClientError(#[from] nym_vpn_api_client::VpnApiClientError), + + #[error("failed to resolve gateway hostname: {hostname}")] + FailedToDnsResolveGateway { + hostname: String, + source: nym_http_api_client::HickoryDnsError, + }, + + #[error("resolved hostname {0} but no IP address found")] + ResolvedHostnameButNoIp(String), + + #[error("failed to lookup described gateways")] + FailedToLookupDescribedGateways(#[source] nym_validator_client::ValidatorClientError), + + #[error("failed to lookup skimmed gateways")] + FailedToLookupSkimmedGateways(#[source] nym_validator_client::ValidatorClientError), + + #[error("failed to lookup skimmed nodes")] + FailedToLookupSkimmedNodes(#[source] nym_validator_client::ValidatorClientError), + + #[error("requested gateway not found in the remote list: {0}")] + RequestedGatewayIdNotFound(String), + + #[error("missing ip packet router address for gateway")] + MissingIpPacketRouterAddress, + + #[error("missing hostname or ip address for gateway")] + MissingHostnameOrIpAddress { gateway_identity: String }, + + #[error("no matching gateway found: {requested_identity}")] + NoMatchingGateway { requested_identity: String }, + + #[error( + "no entry gateway available for location {requested_location}, available countries: {available_countries:?}" + )] + NoMatchingEntryGatewayForLocation { + requested_location: String, + available_countries: Vec, + }, + + #[error( + "no exit gateway available for location {requested_location}, available countries: {available_countries:?}" + )] + NoMatchingExitGatewayForLocation { + requested_location: String, + available_countries: Vec, + }, + + #[error("no matching gateway found after selecting low latency: {requested_identity}")] + NoMatchingGatewayAfterSelectingLowLatency { requested_identity: String }, + + #[error("failed to select gateway randomly")] + FailedToSelectGatewayRandomly, + + #[error("gateway {0} doesn't have a description available")] + NoGatewayDescriptionAvailable(String), + + #[error("failed to lookup gateway ip for gateway {0}")] + FailedToLookupIp(String), + + #[error("the url {url} doesn't parse to a host and/or a port: {reason}")] + UrlError { url: url::Url, reason: String }, + + #[error("the provided gateway information is malformed")] + MalformedGateway, + + #[error("no connectivity")] + Offline, +} + +// Result type based on our error type +pub type Result = std::result::Result; diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs new file mode 100644 index 00000000000..7f9e16d2ca4 --- /dev/null +++ b/nym-gateway-directory/src/gateway_client.rs @@ -0,0 +1,508 @@ +// Copyright 2023-2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::{ + fmt, + net::{IpAddr, SocketAddr}, +}; + +pub use nym_sdk::UserAgent; +use nym_validator_client::{NymApiClient, models::NymNodeDescription, nym_nodes::SkimmedNode}; +use nym_vpn_api_client::types::{GatewayMinPerformance, Percent, ScoreThresholds}; +use rand::{prelude::SliceRandom, thread_rng}; +use tracing::{debug, error, warn}; +use url::Url; + +use crate::{ + Error, NymNode, + entries::{ + country::Country, + gateway::{Gateway, GatewayList, GatewayType, NymNodeList}, + }, + error::Result, +}; + +#[derive(Clone, Debug)] +pub struct Config { + pub nyxd_url: Url, + pub api_url: Url, + pub nym_vpn_api_url: Option, + pub min_gateway_performance: Option, + pub mix_score_thresholds: Option, + pub wg_score_thresholds: Option, +} + +fn to_string(value: &Option) -> String { + match value { + Some(value) => value.to_string(), + None => "unset".to_string(), + } +} + +impl fmt::Display for Config { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "nyxd_url: {}, api_url: {}, nym_vpn_api_url: {}", + self.nyxd_url, + self.api_url, + to_string(&self.nym_vpn_api_url), + ) + } +} + +impl Config { + pub fn nyxd_url(&self) -> &Url { + &self.nyxd_url + } + + pub fn with_custom_nyxd_url(mut self, nyxd_url: Url) -> Self { + self.nyxd_url = nyxd_url; + self + } + + pub fn api_url(&self) -> &Url { + &self.api_url + } + + pub fn with_custom_api_url(mut self, api_url: Url) -> Self { + self.api_url = api_url; + self + } + + pub fn nym_vpn_api_url(&self) -> Option<&Url> { + self.nym_vpn_api_url.as_ref() + } + + pub fn with_custom_nym_vpn_api_url(mut self, nym_vpn_api_url: Url) -> Self { + self.nym_vpn_api_url = Some(nym_vpn_api_url); + self + } + + pub fn with_min_gateway_performance( + mut self, + min_gateway_performance: GatewayMinPerformance, + ) -> Self { + self.min_gateway_performance = Some(min_gateway_performance); + self + } +} + +#[derive(Debug, Clone)] +pub struct ResolvedConfig { + pub nyxd_socket_addrs: Vec, + pub api_socket_addrs: Vec, + pub nym_vpn_api_socket_addrs: Option>, +} + +impl ResolvedConfig { + pub fn all_socket_addrs(&self) -> Vec { + let mut socket_addrs = vec![]; + socket_addrs.extend(self.nyxd_socket_addrs.iter()); + socket_addrs.extend(self.api_socket_addrs.iter()); + if let Some(vpn_api_socket_addrs) = &self.nym_vpn_api_socket_addrs { + socket_addrs.extend(vpn_api_socket_addrs.iter()); + } + socket_addrs + } +} + +#[derive(Clone)] +pub struct GatewayClient { + api_client: NymApiClient, + nym_vpn_api_client: Option, + nyxd_url: Url, + min_gateway_performance: Option, + mix_score_thresholds: Option, + wg_score_thresholds: Option, +} + +impl GatewayClient { + pub fn new(config: Config, user_agent: UserAgent) -> Result { + Self::new_with_resolver_overrides(config, user_agent, None) + } + + pub fn new_with_resolver_overrides( + config: Config, + user_agent: UserAgent, + static_nym_api_ip_addresses: Option<&[SocketAddr]>, + ) -> Result { + let api_client = NymApiClient::new_with_user_agent(config.api_url, user_agent.clone()); + let nym_vpn_api_client = config + .nym_vpn_api_url + .map(|url| { + nym_vpn_api_client::VpnApiClient::new_with_resolver_overrides( + url, + user_agent.clone(), + static_nym_api_ip_addresses, + ) + }) + .transpose()?; + + Ok(GatewayClient { + api_client, + nym_vpn_api_client, + nyxd_url: config.nyxd_url, + min_gateway_performance: config.min_gateway_performance, + mix_score_thresholds: config.mix_score_thresholds, + wg_score_thresholds: config.wg_score_thresholds, + }) + } + + /// Return the config of this instance. + pub fn get_config(&self) -> Config { + Config { + api_url: self.api_client.api_url().clone(), + nym_vpn_api_url: self + .nym_vpn_api_client + .as_ref() + .map(|client| client.current_url().clone()), + nyxd_url: self.nyxd_url.clone(), + min_gateway_performance: self.min_gateway_performance, + mix_score_thresholds: self.mix_score_thresholds, + wg_score_thresholds: self.wg_score_thresholds, + } + } + + pub fn mixnet_min_performance(&self) -> Option { + self.min_gateway_performance + .as_ref() + .and_then(|min_performance| min_performance.mixnet_min_performance) + } + + pub fn vpn_min_performance(&self) -> Option { + self.min_gateway_performance + .as_ref() + .and_then(|min_performance| min_performance.vpn_min_performance) + } + + async fn lookup_described_nodes(&self) -> Result> { + debug!("Fetching all described nodes from nym-api..."); + self.api_client + .get_all_described_nodes() + .await + .map_err(Error::FailedToLookupDescribedGateways) + } + + async fn lookup_skimmed_gateways(&self) -> Result> { + debug!("Fetching skimmed entry assigned nodes from nym-api..."); + self.api_client + .get_all_basic_entry_assigned_nodes() + .await + .map_err(Error::FailedToLookupSkimmedGateways) + } + + async fn lookup_skimmed_nodes(&self) -> Result> { + debug!("Fetching skimmed entry assigned nodes from nym-api..."); + self.api_client + .get_all_basic_nodes() + .await + .map_err(Error::FailedToLookupSkimmedNodes) + } + + pub async fn lookup_gateway_ip_from_nym_api(&self, gateway_identity: &str) -> Result { + debug!("Fetching gateway ip from nym-api..."); + let mut ips = self + .api_client + .get_all_described_nodes() + .await? + .iter() + .find_map(|node| { + if node + .description + .host_information + .keys + .ed25519 + .to_base58_string() + == gateway_identity + { + Some(node.description.host_information.ip_address.clone()) + } else { + None + } + }) + .ok_or(Error::RequestedGatewayIdNotFound( + gateway_identity.to_string(), + ))?; + + if ips.is_empty() { + // nym-api should forbid this from ever happening, but we don't want to accidentally panic + // if this assumption fails + warn!("somehow {gateway_identity} hasn't provided any ip addresses!"); + return Err(Error::RequestedGatewayIdNotFound( + gateway_identity.to_string(), + )); + } + + debug!("found the following ips for {gateway_identity}: {ips:?}"); + if ips.len() == 1 { + // SAFETY: the vector is not empty, so unwrap is fine + Ok(ips.pop().unwrap()) + } else { + // chose a random one if there's more than one + // SAFETY: the vector is not empty, so unwrap is fine + let mut rng = thread_rng(); + let ip = ips.choose(&mut rng).unwrap(); + Ok(*ip) + } + } + + pub async fn lookup_all_gateways_from_nym_api(&self) -> Result { + let mut gateways = self + .lookup_described_nodes() + .await? + .into_iter() + .filter(|node| node.description.declared_role.entry) + .filter_map(|gw| { + Gateway::try_from(gw) + .inspect_err(|err| error!("Failed to parse gateway: {err}")) + .ok() + }) + .collect::>(); + let skimmed_gateways = self.lookup_skimmed_gateways().await?; + append_performance(&mut gateways, skimmed_gateways); + filter_on_mixnet_min_performance(&mut gateways, &self.min_gateway_performance); + Ok(GatewayList::new(gateways)) + } + + pub async fn lookup_all_nymnodes(&self) -> Result { + let mut nodes = self + .lookup_described_nodes() + .await? + .into_iter() + .filter_map(|gw| { + NymNode::try_from(gw) + .inspect_err(|err| error!("Failed to parse node: {err}")) + .ok() + }) + .collect::>(); + let skimmed_nodes = self.lookup_skimmed_nodes().await?; + append_performance(&mut nodes, skimmed_nodes); + filter_on_mixnet_min_performance(&mut nodes, &self.min_gateway_performance); + Ok(GatewayList::new(nodes)) + } + + pub async fn lookup_gateways_from_nym_api(&self, gw_type: GatewayType) -> Result { + match gw_type { + GatewayType::MixnetEntry => self.lookup_entry_gateways_from_nym_api().await, + GatewayType::MixnetExit => self.lookup_exit_gateways_from_nym_api().await, + GatewayType::Wg => self.lookup_vpn_gateways_from_nym_api().await, + } + } + + // This is currently the same as the set of all gateways, but it doesn't have to be. + async fn lookup_entry_gateways_from_nym_api(&self) -> Result { + self.lookup_all_gateways_from_nym_api().await + } + + async fn lookup_exit_gateways_from_nym_api(&self) -> Result { + self.lookup_all_gateways_from_nym_api() + .await + .map(GatewayList::into_exit_gateways) + } + + async fn lookup_vpn_gateways_from_nym_api(&self) -> Result { + self.lookup_all_gateways_from_nym_api() + .await + .map(GatewayList::into_vpn_gateways) + } + + pub async fn lookup_gateway_ip(&self, gateway_identity: &str) -> Result { + if let Some(nym_vpn_api_client) = &self.nym_vpn_api_client { + debug!("Fetching gateway ip from nym-vpn-api..."); + let gateway = nym_vpn_api_client + .get_gateways(None) + .await? + .into_iter() + .find_map(|gw| { + if gw.identity_key != gateway_identity { + None + } else { + Gateway::try_from(gw) + .inspect_err(|err| error!("Failed to parse gateway: {err}")) + .ok() + } + }) + .ok_or_else(|| Error::RequestedGatewayIdNotFound(gateway_identity.to_string()))?; + gateway + .lookup_ip() + .ok_or(Error::FailedToLookupIp(gateway_identity.to_string())) + } else { + warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); + self.lookup_gateway_ip_from_nym_api(gateway_identity).await + } + } + + pub async fn lookup_all_gateways(&self) -> Result { + if let Some(nym_vpn_api_client) = &self.nym_vpn_api_client { + debug!("Fetching all gateways from nym-vpn-api..."); + let gateways: Vec<_> = nym_vpn_api_client + .get_gateways(self.min_gateway_performance) + .await? + .into_iter() + .filter_map(|gw| { + Gateway::try_from(gw) + .inspect_err(|err| error!("Failed to parse gateway: {err}")) + .ok() + .map(|mut gw| { + gw.update_to_new_thresholds( + self.mix_score_thresholds, + self.wg_score_thresholds, + ); + gw + }) + }) + .collect(); + Ok(GatewayList::new(gateways)) + } else { + warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); + self.lookup_all_gateways_from_nym_api().await + } + } + + pub async fn lookup_gateways(&self, gw_type: GatewayType) -> Result { + if let Some(nym_vpn_api_client) = &self.nym_vpn_api_client { + debug!("Fetching {gw_type} gateways from nym-vpn-api..."); + let gateways: Vec<_> = nym_vpn_api_client + .get_gateways_by_type(gw_type.into(), self.min_gateway_performance) + .await? + .into_iter() + .filter_map(|gw| { + Gateway::try_from(gw) + .inspect_err(|err| error!("Failed to parse gateway: {err}")) + .ok() + .map(|mut gw| { + gw.update_to_new_thresholds( + self.mix_score_thresholds, + self.wg_score_thresholds, + ); + gw + }) + }) + .collect(); + Ok(GatewayList::new(gateways)) + } else { + warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); + self.lookup_gateways_from_nym_api(gw_type).await + } + } + + pub async fn lookup_countries(&self, gw_type: GatewayType) -> Result> { + if let Some(nym_vpn_api_client) = &self.nym_vpn_api_client { + debug!("Fetching entry countries from nym-vpn-api..."); + Ok(nym_vpn_api_client + .get_gateway_countries_by_type(gw_type.into(), self.min_gateway_performance) + .await? + .into_iter() + .map(Country::from) + .collect()) + } else { + warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); + self.lookup_gateways_from_nym_api(gw_type) + .await + .map(GatewayList::into_countries) + } + } +} + +// Append the performance to the gateways. This is a temporary hack until the nymvpn.com endpoints +// are updated to also include this field. +fn append_performance( + gateways: &mut [Gateway], + basic_gw: Vec, +) { + debug!("Appending mixnet_performance to gateways"); + for gateway in gateways.iter_mut() { + if let Some(basic_gw) = basic_gw + .iter() + .find(|bgw| bgw.ed25519_identity_pubkey == gateway.identity()) + { + gateway.mixnet_performance = Some(basic_gw.performance); + } else { + tracing::warn!( + "Failed to append mixnet_performance, node {} not found among the skimmed nodes", + gateway.identity() + ); + } + } +} + +fn filter_on_mixnet_min_performance( + gateways: &mut Vec, + min_gateway_performance: &Option, +) { + if let Some(min_performance) = min_gateway_performance { + if let Some(mixnet_min_performance) = min_performance.mixnet_min_performance { + tracing::debug!( + "Filtering gateways based on mixnet_min_performance: {:?}", + min_performance + ); + gateways.retain(|gateway| { + gateway.mixnet_performance.unwrap_or_default() >= mixnet_min_performance + }); + } + } +} + +#[cfg(test)] +mod test { + use nym_sdk::UserAgent; + + use super::*; + + fn user_agent() -> UserAgent { + UserAgent { + application: "test".to_string(), + version: "0.0.1".to_string(), + platform: "test".to_string(), + git_commit: "test".to_string(), + } + } + + fn new_mainnet() -> Config { + let mainnet_network_defaults = nym_sdk::NymNetworkDetails::default(); + let default_nyxd_url = mainnet_network_defaults + .endpoints + .first() + .expect("rust sdk mainnet default incorrectly configured") + .nyxd_url(); + let default_api_url = mainnet_network_defaults + .endpoints + .first() + .expect("rust sdk mainnet default incorrectly configured") + .api_url() + .expect("rust sdk mainnet default api_url not parseable"); + + let default_nym_vpn_api_url = mainnet_network_defaults + .nym_vpn_api_url() + .expect("rust sdk mainnet default nym-vpn-api url not parseable"); + + Config { + nyxd_url: default_nyxd_url, + api_url: default_api_url, + nym_vpn_api_url: Some(default_nym_vpn_api_url), + min_gateway_performance: None, + mix_score_thresholds: None, + wg_score_thresholds: None, + } + } + + #[tokio::test] + async fn lookup_described_gateways() { + let config = new_mainnet(); + let client = GatewayClient::new(config, user_agent()).unwrap(); + let gateways = client.lookup_described_nodes().await.unwrap(); + assert!(!gateways.is_empty()); + } + + #[tokio::test] + async fn lookup_gateways_in_nym_vpn_api() { + let config = new_mainnet(); + let client = GatewayClient::new(config, user_agent()).unwrap(); + let gateways = client + .lookup_gateways(GatewayType::MixnetExit) + .await + .unwrap(); + assert!(!gateways.is_empty()); + } +} diff --git a/nym-gateway-directory/src/helpers.rs b/nym-gateway-directory/src/helpers.rs new file mode 100644 index 00000000000..e11a1f7e0be --- /dev/null +++ b/nym-gateway-directory/src/helpers.rs @@ -0,0 +1,64 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::net::{IpAddr, SocketAddr}; + +use nym_common::trace_err_chain; +use nym_http_api_client::HickoryDnsResolver; + +use crate::{Config, Error, error::Result, gateway_client::ResolvedConfig}; + +async fn try_resolve_hostname(hostname: &str) -> Result> { + tracing::debug!("Trying to resolve hostname: {hostname}"); + let resolver = HickoryDnsResolver::default(); + let addrs = resolver.resolve_str(hostname).await.map_err(|err| { + trace_err_chain!(err, "Failed to resolve gateway hostname"); + Error::FailedToDnsResolveGateway { + hostname: hostname.to_string(), + source: err, + } + })?; + tracing::debug!("Resolved to: {addrs:?}"); + + let ips = addrs.iter().collect::>(); + if ips.is_empty() { + return Err(Error::ResolvedHostnameButNoIp(hostname.to_string())); + } + + Ok(ips) +} + +async fn url_to_socket_addr(unresolved_url: &url::Url) -> Result> { + let port = unresolved_url + .port_or_known_default() + .ok_or(Error::UrlError { + url: unresolved_url.clone(), + reason: "missing port".to_string(), + })?; + let hostname = unresolved_url.host_str().ok_or(Error::UrlError { + url: unresolved_url.clone(), + reason: "missing hostname".to_string(), + })?; + + Ok(try_resolve_hostname(hostname) + .await? + .into_iter() + .map(|ip| SocketAddr::new(ip, port)) + .collect()) +} + +pub async fn resolve_config(config: &Config) -> Result { + let nyxd_socket_addrs = url_to_socket_addr(config.nyxd_url()).await?; + let api_socket_addrs = url_to_socket_addr(config.api_url()).await?; + let nym_vpn_api_socket_addrs = if let Some(vpn_api_url) = config.nym_vpn_api_url() { + Some(url_to_socket_addr(vpn_api_url).await?) + } else { + None + }; + + Ok(ResolvedConfig { + nyxd_socket_addrs, + api_socket_addrs, + nym_vpn_api_socket_addrs, + }) +} diff --git a/nym-gateway-directory/src/lib.rs b/nym-gateway-directory/src/lib.rs new file mode 100644 index 00000000000..9c11045e021 --- /dev/null +++ b/nym-gateway-directory/src/lib.rs @@ -0,0 +1,29 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +mod caching_client; +mod entries; +mod error; +mod gateway_client; +mod helpers; + +pub use nym_sdk::mixnet::{NodeIdentity, Recipient}; +pub use nym_vpn_api_client::types::{GatewayMinPerformance, Percent}; + +pub use crate::{ + caching_client::CachingGatewayClient, + entries::{ + auth_addresses::{AuthAddress, AuthAddresses}, + country::Country, + entry_point::EntryPoint, + exit_point::ExitPoint, + gateway::{ + Entry, Exit, Gateway, GatewayList, GatewayType, Location, NymNode, Probe, ProbeOutcome, + }, + ipr_addresses::IpPacketRouterAddress, + score::Score, + }, + error::Error, + gateway_client::{Config, GatewayClient, ResolvedConfig}, + helpers::resolve_config, +}; diff --git a/nym-ip-packet-client/Cargo.toml b/nym-ip-packet-client/Cargo.toml index 86b0e218302..69bc8333b87 100644 --- a/nym-ip-packet-client/Cargo.toml +++ b/nym-ip-packet-client/Cargo.toml @@ -15,10 +15,10 @@ workspace = true bincode.workspace = true bytes.workspace = true futures.workspace = true +nym-gateway-directory = { path = "../nym-gateway-directory" } +nym-ip-packet-requests = { path = "../common/ip-packet-requests" } +nym-sdk = {path = "../sdk/rust/nym-sdk" } thiserror.workspace = true tokio-util.workspace = true tokio.workspace = true tracing.workspace = true - -nym-sdk = { path = "../sdk/rust/nym-sdk" } -nym-ip-packet-requests = { path = "../common/ip-packet-requests" } diff --git a/nym-ip-packet-client/src/error.rs b/nym-ip-packet-client/src/error.rs index b88c332f674..f74ab688a49 100644 --- a/nym-ip-packet-client/src/error.rs +++ b/nym-ip-packet-client/src/error.rs @@ -18,6 +18,9 @@ pub enum Error { )] ReceivedResponseWithNewVersion { expected: u8, received: u8 }, + #[error("got reply for connect request, but it appears intended for the wrong address?")] + GotReplyIntendedForWrongAddress, + #[error("unexpected connect response")] UnexpectedConnectResponse, @@ -41,6 +44,10 @@ pub enum Error { #[error(transparent)] Bincode(#[from] bincode::Error), + #[error("failed to create connect request")] + FailedToCreateConnectRequest { + source: nym_ip_packet_requests::sign::SignatureError, + }, } // Result type based on our error type diff --git a/nym-ip-packet-client/src/listener.rs b/nym-ip-packet-client/src/listener.rs index 73803001754..4642f788af5 100644 --- a/nym-ip-packet-client/src/listener.rs +++ b/nym-ip-packet-client/src/listener.rs @@ -4,7 +4,7 @@ use bytes::Bytes; use futures::StreamExt; use nym_ip_packet_requests::{codec::MultiIpPacketCodec, v8::response::ControlResponse}; -use nym_sdk::mixnet::ReconstructedMessage; +pub use nym_sdk::mixnet::ReconstructedMessage; use tokio_util::codec::FramedRead; use tracing::{debug, error, info, warn}; diff --git a/nym-vpn-api-client/Cargo.toml b/nym-vpn-api-client/Cargo.toml new file mode 100644 index 00000000000..56898e6e088 --- /dev/null +++ b/nym-vpn-api-client/Cargo.toml @@ -0,0 +1,40 @@ +[package] +name = "nym-vpn-api-client" +version.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +edition.workspace = true +license.workspace = true + +[dependencies] +backon.workspace = true +base64-url.workspace = true +bip39 = { workspace = true, features = ["zeroize"] } +bs58.workspace = true +chrono = { workspace = true, features = ["serde"] } +itertools.workspace = true +nym-compact-ecash.workspace = true +nym-config.workspace = true +nym-contracts-common.workspace = true +nym-credential-proxy-requests.workspace = true +nym-crypto = { workspace = true, features = ["asymmetric", "stream_cipher"] } +nym-http-api-client.workspace = true +nym-validator-client.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +sha2.workspace = true +strum.workspace = true +thiserror.workspace = true +time = { workspace = true, features = [ + "serde-human-readable", + "serde-well-known", +] } +tokio = { workspace = true, features = [] } +tracing.workspace = true +url.workspace = true + +[dev-dependencies] +tokio = { workspace = true, features = ["full"] } +bip39 = { workspace = true, features = ["zeroize"] } diff --git a/nym-vpn-api-client/src/bootstrap.rs b/nym-vpn-api-client/src/bootstrap.rs new file mode 100644 index 00000000000..784ab38466b --- /dev/null +++ b/nym-vpn-api-client/src/bootstrap.rs @@ -0,0 +1,65 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use nym_http_api_client::{ApiClient, NO_PARAMS}; + +use url::Url; + +use crate::{ + client::NYM_VPN_API_TIMEOUT, + error::{Result, VpnApiClientError}, + response::{NymWellknownDiscoveryItemResponse, RegisteredNetworksResponse}, + routes, +}; + +/// Bootstrapping Environments and Network Discovery +pub struct BootstrapVpnApiClient { + inner: nym_http_api_client::Client, +} + +impl BootstrapVpnApiClient { + /// Returns a VpnApiClient Based on locally set well known url and empty user agent. + /// + /// THIS SHOULD ONLY BE USED FOR BOOTSTRAPPING. + pub fn new(base_url: Url) -> Result { + nym_http_api_client::Client::builder(base_url) + .map(|builder| builder.with_timeout(NYM_VPN_API_TIMEOUT)) + .and_then(|builder| builder.build()) + .map(|c| Self { inner: c }) + .map_err(VpnApiClientError::CreateVpnApiClient) + } + + pub async fn get_wellknown_envs(&self) -> Result { + self.inner + .get_json( + &[ + routes::PUBLIC, + routes::V1, + routes::WELLKNOWN, + routes::ENVS_FILE, + ], + NO_PARAMS, + ) + .await + .map_err(VpnApiClientError::GetNetworkEnvs) + } + + pub async fn get_wellknown_discovery( + &self, + network_name: &str, + ) -> Result { + self.inner + .get_json( + &[ + routes::PUBLIC, + routes::V1, + routes::WELLKNOWN, + network_name, + routes::DISCOVERY_FILE, + ], + NO_PARAMS, + ) + .await + .map_err(VpnApiClientError::GetDiscoveryInfo) + } +} diff --git a/nym-vpn-api-client/src/client.rs b/nym-vpn-api-client/src/client.rs new file mode 100644 index 00000000000..bcebd7bfe10 --- /dev/null +++ b/nym-vpn-api-client/src/client.rs @@ -0,0 +1,1164 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::{fmt, net::SocketAddr, time::Duration}; + +use backon::Retryable; +use nym_credential_proxy_requests::api::v1::ticketbook::models::PartialVerificationKeysResponse; +use nym_http_api_client::{ApiClient, HttpClientError, NO_PARAMS, Params, PathSegments, UserAgent}; +use serde::{Deserialize, Serialize, de::DeserializeOwned}; +use time::OffsetDateTime; +use url::Url; + +use crate::{ + error::{Result, VpnApiClientError}, + request::{ + ApplyFreepassRequestBody, CreateAccountRequestBody, CreateSubscriptionKind, + CreateSubscriptionRequestBody, RegisterDeviceRequestBody, RequestZkNymRequestBody, + UpdateDeviceRequestBody, UpdateDeviceRequestStatus, + }, + response::{ + NymDirectoryGatewayCountriesResponse, NymDirectoryGatewaysResponse, NymVpnAccountResponse, + NymVpnAccountSummaryResponse, NymVpnDevice, NymVpnDevicesResponse, NymVpnHealthResponse, + NymVpnRegisterAccountResponse, NymVpnSubscription, NymVpnSubscriptionResponse, + NymVpnSubscriptionsResponse, NymVpnUsagesResponse, NymVpnZkNym, NymVpnZkNymPost, + NymVpnZkNymResponse, NymWellknownDiscoveryItem, StatusOk, + }, + routes, + types::{ + Device, DeviceStatus, GatewayMinPerformance, GatewayType, Platform, VpnApiAccount, + VpnApiTime, VpnApiTimeSynced, + }, +}; + +pub(crate) const DEVICE_AUTHORIZATION_HEADER: &str = "x-device-authorization"; + +// GET requests can unfortunately take a long time over the mixnet +pub(crate) const NYM_VPN_API_TIMEOUT: Duration = Duration::from_secs(60); + +#[derive(Clone, Debug)] +pub struct VpnApiClient { + inner: nym_http_api_client::Client, +} + +impl VpnApiClient { + pub fn new(base_url: Url, user_agent: UserAgent) -> Result { + Self::new_with_resolver_overrides(base_url, user_agent, None) + } + + pub fn new_with_resolver_overrides( + base_url: Url, + user_agent: UserAgent, + static_addresses: Option<&[SocketAddr]>, + ) -> Result { + nym_http_api_client::Client::builder(base_url.clone()) + .map(|builder| { + let mut builder = builder + .with_user_agent(user_agent) + .with_timeout(NYM_VPN_API_TIMEOUT); + + if let Some(domain) = base_url.domain() { + match static_addresses { + Some(static_addresses) if !static_addresses.is_empty() => { + tracing::info!( + "Enabling DNS resolver overrides: {:?}", static_addresses + ); + builder = builder.resolve_to_addrs(domain, static_addresses); + } + Some(_) => { + tracing::warn!( + "Not enabling DNS resolver overrides because static addresses are empty" + ); + } + None => { + tracing::info!( + "Not enabling DNS resolver overrides because static addresses are not set" + ); + } + } + } else { + tracing::info!( + "Not enabling DNS resolver overrides because domain is not present in base URL" + ); + } + + builder + }) + .and_then(|builder| builder.build()) + .map(|c| Self { inner: c }) + .map_err(VpnApiClientError::CreateVpnApiClient) + } + + pub fn swap_inner_client(&mut self, client: VpnApiClient) { + self.inner = client.inner; + } + + pub fn current_url(&self) -> &Url { + self.inner.current_url() + } + + pub async fn get_remote_time(&self) -> Result { + let time_before = OffsetDateTime::now_utc(); + let remote_timestamp = self.get_health().await?.timestamp_utc; + let time_after = OffsetDateTime::now_utc(); + + Ok(VpnApiTime::from_remote_timestamp( + time_before, + remote_timestamp, + time_after, + )) + } + + fn use_remote_time(remote_time: VpnApiTime) -> bool { + match remote_time.is_synced() { + VpnApiTimeSynced::AlmostSame => { + tracing::debug!("{remote_time}"); + false + } + VpnApiTimeSynced::AcceptableSynced => { + tracing::info!("{remote_time}"); + false + } + VpnApiTimeSynced::NotSynced => { + tracing::warn!( + "The time skew between the local and remote time is too large, we'll use remote instead for JWT ({remote_time})." + ); + true + } + } + } + + async fn sync_with_remote_time(&self) -> Result> { + let remote_time = self.get_remote_time().await?; + + if Self::use_remote_time(remote_time) { + Ok(Some(remote_time)) + } else { + Ok(None) + } + } + + async fn get_query( + &self, + path: PathSegments<'_>, + account: &VpnApiAccount, + device: Option<&Device>, + jwt: Option, + ) -> std::result::Result> + where + T: DeserializeOwned, + E: fmt::Display + DeserializeOwned, + { + let request = self + .inner + .create_get_request(path, NO_PARAMS) + .bearer_auth(account.jwt(jwt).to_string()); + + let request = match device { + Some(device) => request.header( + DEVICE_AUTHORIZATION_HEADER, + format!("Bearer {}", device.jwt(jwt)), + ), + None => request, + }; + let response = request.send().await?; + nym_http_api_client::parse_response(response, false).await + } + + async fn get_authorized( + &self, + path: PathSegments<'_>, + account: &VpnApiAccount, + device: Option<&Device>, + ) -> std::result::Result> + where + T: DeserializeOwned, + E: fmt::Display + DeserializeOwned, + { + match self.get_query::(path, account, device, None).await { + Ok(response) => Ok(response), + Err(err) => { + if let HttpClientError::EndpointFailure { status: _, error } = &err { + if jwt_error(&error.to_string()) { + tracing::warn!( + "Encountered possible JWT error: {error}. Retrying query with remote time" + ); + if let Ok(Some(jwt)) = + self.sync_with_remote_time().await.inspect_err(|err| { + tracing::error!( + "Failed to get remote time: {err}. Not retring anymore" + ) + }) + { + // retry with remote vpn api time, and return that only if it succeeds, + // otherwise return the initial error + let res = self.get_query(path, account, device, Some(jwt)).await; + if res.is_ok() { + return res; + } + } + } + } + Err(err) + } + } + } + + #[allow(unused)] + async fn get_authorized_debug( + &self, + path: PathSegments<'_>, + account: &VpnApiAccount, + device: Option<&Device>, + ) -> std::result::Result> + where + T: DeserializeOwned, + E: fmt::Display + DeserializeOwned, + { + let request = self + .inner + .create_get_request(path, NO_PARAMS) + .bearer_auth(account.jwt(None).to_string()); + + let request = match device { + Some(device) => request.header( + DEVICE_AUTHORIZATION_HEADER, + format!("Bearer {}", device.jwt(None)), + ), + None => request, + }; + + let response = request.send().await?; + let status = response.status(); + tracing::info!("Response status: {:#?}", status); + + // TODO: support this mode in the upstream crate + + if status.is_success() { + let response_text = response.text().await?; + tracing::info!("Response: {:#?}", response_text); + let response_json = serde_json::from_str(&response_text) + .map_err(|e| HttpClientError::GenericRequestFailure(e.to_string()))?; + Ok(response_json) + //} else if status == reqwest::StatusCode::NOT_FOUND { + // Err(HttpClientError::NotFound) + } else { + let Ok(response_text) = response.text().await else { + return Err(HttpClientError::RequestFailure { status }); + }; + + tracing::info!("Response: {:#?}", response_text); + + if let Ok(request_error) = serde_json::from_str(&response_text) { + Err(HttpClientError::EndpointFailure { + status, + error: request_error, + }) + } else { + Err(HttpClientError::GenericRequestFailure(response_text)) + } + } + } + + async fn get_json_with_retry( + &self, + path: PathSegments<'_>, + params: Params<'_, K, V>, + ) -> std::result::Result> + where + for<'a> T: Deserialize<'a>, + K: AsRef + Sync, + V: AsRef + Sync, + E: fmt::Display + fmt::Debug + DeserializeOwned, + { + let response = (|| async { self.inner.get_json(path, params).await }) + .retry(backon::ConstantBuilder::default()) + .notify(|err: &HttpClientError, dur: Duration| { + tracing::warn!("Failed to get JSON: {}", err); + tracing::warn!("retrying after {:?}", dur); + }) + .await?; + Ok(response) + } + + async fn post_json_with_retry( + &self, + path: PathSegments<'_>, + params: Params<'_, K, V>, + json_body: &B, + ) -> std::result::Result> + where + for<'a> T: Deserialize<'a>, + B: Serialize + ?Sized + Sync, + K: AsRef + Sync, + V: AsRef + Sync, + E: fmt::Display + fmt::Debug + DeserializeOwned, + { + let response = (|| async { self.inner.post_json(path, params, json_body).await }) + .retry(backon::ConstantBuilder::default()) + .notify(|err: &HttpClientError, dur: Duration| { + tracing::warn!("Failed to post JSON: {}", err); + tracing::warn!("retrying after {:?}", dur); + }) + .await?; + Ok(response) + } + + async fn post_query( + &self, + path: PathSegments<'_>, + json_body: &B, + account: &VpnApiAccount, + device: Option<&Device>, + jwt: Option, + ) -> std::result::Result> + where + T: DeserializeOwned, + B: Serialize, + E: fmt::Display + DeserializeOwned, + { + let request = self + .inner + .create_post_request(path, NO_PARAMS, json_body) + .bearer_auth(account.jwt(jwt).to_string()); + + let request = match device { + Some(device) => request.header( + DEVICE_AUTHORIZATION_HEADER, + format!("Bearer {}", device.jwt(jwt)), + ), + None => request, + }; + let response = request.send().await?; + nym_http_api_client::parse_response(response, false).await + } + + async fn post_authorized( + &self, + path: PathSegments<'_>, + json_body: &B, + account: &VpnApiAccount, + device: Option<&Device>, + ) -> std::result::Result> + where + T: DeserializeOwned, + B: Serialize, + E: fmt::Display + DeserializeOwned, + { + match self + .post_query::(path, json_body, account, device, None) + .await + { + Ok(response) => Ok(response), + Err(err) => { + if let HttpClientError::EndpointFailure { status: _, error } = &err { + if jwt_error(&error.to_string()) { + tracing::warn!( + "Encountered possible JWT error: {error}. Retrying query with remote time" + ); + if let Ok(Some(jwt)) = + self.sync_with_remote_time().await.inspect_err(|err| { + tracing::error!( + "Failed to get remote time: {err}. Not retring anymore" + ) + }) + { + // retry with remote vpn api time, and return that only if it succeeds, + // otherwise return the initial error + let res = self + .post_query(path, json_body, account, device, Some(jwt)) + .await; + if res.is_ok() { + return res; + } + } + } + } + Err(err) + } + } + } + + async fn delete_query( + &self, + path: PathSegments<'_>, + account: &VpnApiAccount, + device: Option<&Device>, + jwt: Option, + ) -> std::result::Result> + where + T: DeserializeOwned, + E: fmt::Display + DeserializeOwned, + { + let request = self + .inner + .create_delete_request(path, NO_PARAMS) + .bearer_auth(account.jwt(jwt).to_string()); + + let request = match device { + Some(device) => request.header( + DEVICE_AUTHORIZATION_HEADER, + format!("Bearer {}", device.jwt(jwt)), + ), + None => request, + }; + let response = request.send().await?; + nym_http_api_client::parse_response(response, false).await + } + + async fn delete_authorized( + &self, + path: PathSegments<'_>, + account: &VpnApiAccount, + device: Option<&Device>, + ) -> std::result::Result> + where + T: DeserializeOwned, + E: fmt::Display + DeserializeOwned, + { + match self.delete_query::(path, account, device, None).await { + Ok(response) => Ok(response), + Err(err) => { + if let HttpClientError::EndpointFailure { status: _, error } = &err { + if jwt_error(&error.to_string()) { + tracing::warn!( + "Encountered possible JWT error: {error}. Retrying query with remote time" + ); + if let Ok(Some(jwt)) = + self.sync_with_remote_time().await.inspect_err(|err| { + tracing::error!( + "Failed to get remote time: {err}. Not retring anymore" + ) + }) + { + // retry with remote vpn api time, and return that only if it succeeds, + // otherwise return the initial error + let res = self.delete_query(path, account, device, Some(jwt)).await; + if res.is_ok() { + return res; + } + } + } + } + Err(err) + } + } + } + + async fn patch_query( + &self, + path: PathSegments<'_>, + json_body: &B, + account: &VpnApiAccount, + device: Option<&Device>, + jwt: Option, + ) -> std::result::Result> + where + T: DeserializeOwned, + B: Serialize, + E: fmt::Display + DeserializeOwned, + { + let request = self + .inner + .create_patch_request(path, NO_PARAMS, json_body) + .bearer_auth(account.jwt(jwt).to_string()); + + let request = match device { + Some(device) => request.header( + DEVICE_AUTHORIZATION_HEADER, + format!("Bearer {}", device.jwt(jwt)), + ), + None => request, + }; + let response = request.send().await?; + nym_http_api_client::parse_response(response, false).await + } + + async fn patch_authorized( + &self, + path: PathSegments<'_>, + json_body: &B, + account: &VpnApiAccount, + device: Option<&Device>, + ) -> std::result::Result> + where + T: DeserializeOwned, + B: Serialize, + E: fmt::Display + DeserializeOwned, + { + match self + .patch_query::(path, json_body, account, device, None) + .await + { + Ok(response) => Ok(response), + Err(err) => { + if let HttpClientError::EndpointFailure { status: _, error } = &err { + if jwt_error(&error.to_string()) { + tracing::warn!( + "Encountered possible JWT error: {error}. Retrying query with remote time" + ); + if let Ok(Some(jwt)) = + self.sync_with_remote_time().await.inspect_err(|err| { + tracing::error!( + "Failed to get remote time: {err}. Not retring anymore" + ) + }) + { + // retry with remote vpn api time, and return that only if it succeeds, + // otherwise return the initial error + let res = self + .patch_query(path, json_body, account, device, Some(jwt)) + .await; + if res.is_ok() { + return res; + } + } + } + } + Err(err) + } + } + } + + // ACCOUNT + + pub async fn get_account(&self, account: &VpnApiAccount) -> Result { + self.get_authorized( + &[routes::PUBLIC, routes::V1, routes::ACCOUNT, account.id()], + account, + None, + ) + .await + .map_err(crate::error::VpnApiClientError::GetAccount) + } + + pub async fn post_account( + &self, + account: &VpnApiAccount, + platform: Platform, + ) -> Result { + let body = CreateAccountRequestBody { + account_addr: account.id().to_string(), + pub_key: account.pub_key().to_string(), + signature_base64: account.signature_base64().to_string(), + }; + + self.post_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + platform.api_path_component(), + ], + NO_PARAMS, + &body, + ) + .await + .map_err(crate::error::VpnApiClientError::PostAccount) + } + + pub async fn get_health(&self) -> Result { + self.get_json_with_retry(&[routes::PUBLIC, routes::V1, routes::HEALTH], NO_PARAMS) + .await + .map_err(crate::error::VpnApiClientError::GetHealth) + } + + pub async fn get_account_summary( + &self, + account: &VpnApiAccount, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::SUMMARY, + ], + account, + None, + ) + .await + .map_err(VpnApiClientError::GetAccountSummary) + } + + // DEVICES + + pub async fn get_devices(&self, account: &VpnApiAccount) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + ], + account, + None, + ) + .await + .map_err(VpnApiClientError::GetDevices) + } + + pub async fn register_device( + &self, + account: &VpnApiAccount, + device: &Device, + ) -> Result { + let body = RegisterDeviceRequestBody { + device_identity_key: device.identity_key().to_base58_string(), + signature: device.sign_identity_key().to_base64_string(), + }; + + self.post_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + ], + &body, + account, + Some(device), + ) + .await + .map_err(VpnApiClientError::RegisterDevice) + } + + pub async fn get_active_devices( + &self, + account: &VpnApiAccount, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + routes::ACTIVE, + ], + account, + None, + ) + .await + .map_err(VpnApiClientError::GetActiveDevices) + } + + pub async fn get_device_by_id( + &self, + account: &VpnApiAccount, + device: &Device, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + &device.identity_key().to_string(), + ], + account, + None, + ) + .await + .map_err(VpnApiClientError::GetDeviceById) + } + + pub async fn update_device( + &self, + account: &VpnApiAccount, + device: &Device, + status: DeviceStatus, + ) -> Result { + let body = UpdateDeviceRequestBody { + status: UpdateDeviceRequestStatus::from(status), + }; + + self.patch_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + &device.identity_key().to_string(), + ], + &body, + account, + Some(device), + ) + .await + .map_err(VpnApiClientError::UpdateDevice) + } + + // ZK-NYM + + pub async fn get_device_zk_nyms( + &self, + account: &VpnApiAccount, + device: &Device, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + &device.identity_key().to_string(), + routes::ZKNYM, + ], + account, + Some(device), + ) + .await + .map_err(VpnApiClientError::GetDeviceZkNyms) + } + + pub async fn request_zk_nym( + &self, + account: &VpnApiAccount, + device: &Device, + withdrawal_request: String, + ecash_pubkey: String, + expiration_date: String, + ticketbook_type: String, + ) -> Result { + tracing::debug!("Requesting zk-nym for type: {}", ticketbook_type); + let body = RequestZkNymRequestBody { + withdrawal_request, + ecash_pubkey, + expiration_date, + ticketbook_type, + }; + tracing::debug!("Request body: {:#?}", body); + + self.post_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + &device.identity_key().to_string(), + routes::ZKNYM, + ], + &body, + account, + Some(device), + ) + .await + .map_err(VpnApiClientError::RequestZkNym) + } + + pub async fn get_zk_nyms_available_for_download( + &self, + account: &VpnApiAccount, + device: &Device, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + &device.identity_key().to_string(), + routes::ZKNYM, + routes::AVAILABLE, + ], + account, + Some(device), + ) + .await + .map_err(VpnApiClientError::GetDeviceZkNyms) + } + + pub async fn get_zk_nym_by_id( + &self, + account: &VpnApiAccount, + device: &Device, + id: &str, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + &device.identity_key().to_string(), + routes::ZKNYM, + id, + ], + account, + Some(device), + ) + .await + .map_err(VpnApiClientError::GetZkNymById) + } + + pub async fn confirm_zk_nym_download_by_id( + &self, + account: &VpnApiAccount, + device: &Device, + id: &str, + ) -> Result { + self.delete_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::DEVICE, + &device.identity_key().to_string(), + routes::ZKNYM, + id, + ], + account, + Some(device), + ) + .await + .map_err(VpnApiClientError::ConfirmZkNymDownloadById) + } + + // FREEPASS + + pub async fn get_free_passes( + &self, + account: &VpnApiAccount, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::FREEPASS, + ], + account, + None, + ) + .await + .map_err(VpnApiClientError::GetFreePasses) + } + + pub async fn apply_freepass( + &self, + account: &VpnApiAccount, + code: String, + ) -> Result { + let body = ApplyFreepassRequestBody { code }; + + self.post_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::FREEPASS, + ], + &body, + account, + None, + ) + .await + .map_err(VpnApiClientError::ApplyFreepass) + } + + // SUBSCRIPTIONS + + pub async fn get_subscriptions( + &self, + account: &VpnApiAccount, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::SUBSCRIPTION, + ], + account, + None, + ) + .await + .map_err(VpnApiClientError::GetSubscriptions) + } + + pub async fn create_subscription(&self, account: &VpnApiAccount) -> Result { + let body = CreateSubscriptionRequestBody { + valid_from_utc: "todo".to_string(), + subscription_kind: CreateSubscriptionKind::OneMonth, + }; + + self.post_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::SUBSCRIPTION, + ], + &body, + account, + None, + ) + .await + .map_err(VpnApiClientError::CreateSubscription) + } + + pub async fn get_active_subscriptions( + &self, + account: &VpnApiAccount, + ) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::SUBSCRIPTION, + routes::ACTIVE, + ], + account, + None, + ) + .await + .map_err(VpnApiClientError::GetActiveSubscriptions) + } + + pub async fn get_usage(&self, account: &VpnApiAccount) -> Result { + self.get_authorized( + &[ + routes::PUBLIC, + routes::V1, + routes::ACCOUNT, + account.id(), + routes::USAGE, + ], + account, + None, + ) + .await + .map_err(VpnApiClientError::GetUsage) + } + + // GATEWAYS + + pub async fn get_gateways( + &self, + min_performance: Option, + ) -> Result { + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::GATEWAYS, + ], + &min_performance.unwrap_or_default().to_param(), + ) + .await + .map_err(VpnApiClientError::GetGateways) + } + + pub async fn get_gateways_by_type( + &self, + kind: GatewayType, + min_performance: Option, + ) -> Result { + match kind { + GatewayType::MixnetEntry => self.get_entry_gateways(min_performance).await, + GatewayType::MixnetExit => self.get_exit_gateways(min_performance).await, + GatewayType::Wg => self.get_vpn_gateways(min_performance).await, + } + } + + pub async fn get_gateway_countries_by_type( + &self, + kind: GatewayType, + min_performance: Option, + ) -> Result { + match kind { + GatewayType::MixnetEntry => self.get_entry_gateway_countries(min_performance).await, + GatewayType::MixnetExit => self.get_exit_gateway_countries(min_performance).await, + GatewayType::Wg => self.get_vpn_gateway_countries(min_performance).await, + } + } + + pub async fn get_vpn_gateways( + &self, + min_performance: Option, + ) -> Result { + let mut params = min_performance.unwrap_or_default().to_param(); + params.push((routes::SHOW_VPN_ONLY.to_string(), "true".to_string())); + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::GATEWAYS, + ], + ¶ms, + ) + .await + .map_err(VpnApiClientError::GetVpnGateways) + } + + pub async fn get_vpn_gateway_countries( + &self, + min_performance: Option, + ) -> Result { + let mut params = min_performance.unwrap_or_default().to_param(); + params.push((routes::SHOW_VPN_ONLY.to_string(), "true".to_string())); + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::GATEWAYS, + routes::COUNTRIES, + ], + ¶ms, + ) + .await + .map_err(VpnApiClientError::GetVpnGatewayCountries) + } + + pub async fn get_gateway_countries( + &self, + min_performance: Option, + ) -> Result { + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::GATEWAYS, + routes::COUNTRIES, + ], + &min_performance.unwrap_or_default().to_param(), + ) + .await + .map_err(VpnApiClientError::GetGatewayCountries) + } + + pub async fn get_entry_gateways( + &self, + min_performance: Option, + ) -> Result { + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::GATEWAYS, + routes::ENTRY, + ], + &min_performance.unwrap_or_default().to_param(), + ) + .await + .map_err(VpnApiClientError::GetEntryGateways) + } + + pub async fn get_entry_gateway_countries( + &self, + min_performance: Option, + ) -> Result { + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::GATEWAYS, + routes::ENTRY, + routes::COUNTRIES, + ], + &min_performance.unwrap_or_default().to_param(), + ) + .await + .map_err(VpnApiClientError::GetEntryGatewayCountries) + } + + pub async fn get_exit_gateways( + &self, + min_performance: Option, + ) -> Result { + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::GATEWAYS, + routes::EXIT, + ], + &min_performance.unwrap_or_default().to_param(), + ) + .await + .map_err(VpnApiClientError::GetExitGateways) + } + + pub async fn get_exit_gateway_countries( + &self, + min_performance: Option, + ) -> Result { + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::GATEWAYS, + routes::EXIT, + routes::COUNTRIES, + ], + &min_performance.unwrap_or_default().to_param(), + ) + .await + .map_err(VpnApiClientError::GetExitGatewayCountries) + } + + // DIRECTORY ZK-NYM + + pub async fn get_directory_zk_nyms_ticketbook_partial_verification_keys( + &self, + ) -> Result { + self.get_json_with_retry( + &[ + routes::PUBLIC, + routes::V1, + routes::DIRECTORY, + routes::ZK_NYMS, + routes::TICKETBOOK, + routes::PARTIAL_VERIFICATION_KEYS, + ], + NO_PARAMS, + ) + .await + .map_err(VpnApiClientError::GetDirectoryZkNymsTicketbookPartialVerificationKeys) + } + + pub async fn get_wellknown_current_env(&self) -> Result { + tracing::debug!("Fetching nym vpn network details"); + self.inner + .get_json( + &[ + routes::PUBLIC, + routes::V1, + routes::WELLKNOWN, + routes::CURRENT_ENV, + ], + NO_PARAMS, + ) + .await + .map_err(VpnApiClientError::GetVpnNetworkDetails) + } +} + +fn jwt_error(error: &str) -> bool { + error.to_lowercase().contains("jwt") +} diff --git a/nym-vpn-api-client/src/error.rs b/nym-vpn-api-client/src/error.rs new file mode 100644 index 00000000000..d37db5ab2ef --- /dev/null +++ b/nym-vpn-api-client/src/error.rs @@ -0,0 +1,143 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::error::Error; + +pub use nym_http_api_client::HttpClientError; + +use nym_contracts_common::ContractsCommonError; + +use crate::response::{ErrorMessage, NymErrorResponse, UnexpectedError}; + +#[derive(Debug, thiserror::Error)] +pub enum VpnApiClientError { + #[error("failed tp create vpn api client")] + CreateVpnApiClient(#[source] HttpClientError), + + #[error("failed to get account")] + GetAccount(#[source] HttpClientError), + + #[error("failed to get account summary")] + GetAccountSummary(#[source] HttpClientError), + + #[error("failed to get devices")] + GetDevices(#[source] HttpClientError), + + #[error("failed to register device")] + RegisterDevice(#[source] HttpClientError), + + #[error("failed to get active devices")] + GetActiveDevices(#[source] HttpClientError), + + #[error("failed to get device by id")] + GetDeviceById(#[source] HttpClientError), + + #[error("failed to get device zk-nym")] + GetDeviceZkNyms(#[source] HttpClientError), + + #[error("failed to update device")] + UpdateDevice(#[source] HttpClientError), + + #[error("failed to request zk-nym")] + RequestZkNym(#[source] HttpClientError), + + #[error("failed to get active zk-nym")] + GetActiveZkNym(#[source] HttpClientError), + + #[error("failed to get zk-nym by id")] + GetZkNymById(#[source] HttpClientError), + + #[error("failed to confirm zk-nym download")] + ConfirmZkNymDownloadById(#[source] HttpClientError), + + #[error("failed to get free passes")] + GetFreePasses(#[source] HttpClientError), + + #[error("failed to apply free pass")] + ApplyFreepass(#[source] HttpClientError), + + #[error("failed to get subscriptions")] + GetSubscriptions(#[source] HttpClientError), + + #[error("failed to create subscription")] + CreateSubscription(#[source] HttpClientError), + + #[error("failed to get active subscription")] + GetActiveSubscriptions(#[source] HttpClientError), + + #[error("failed to get gateways")] + GetGateways(#[source] HttpClientError), + + #[error("failed to get gateway countries")] + GetGatewayCountries(#[source] HttpClientError), + + #[error("failed to get entry gateways")] + GetEntryGateways(#[source] HttpClientError), + + #[error("failed to get entry gateway countries")] + GetEntryGatewayCountries(#[source] HttpClientError), + + #[error("failed to get exit gateways")] + GetExitGateways(#[source] HttpClientError), + + #[error("failed to get exit gateway countries")] + GetExitGatewayCountries(#[source] HttpClientError), + + #[error("failed to get vpn gateways")] + GetVpnGateways(#[source] HttpClientError), + + #[error("failed to get vpn gateway countries")] + GetVpnGatewayCountries(#[source] HttpClientError), + + #[error("invalud percent value")] + InvalidPercentValue(#[source] ContractsCommonError), + + #[error("failed to derive from path")] + CosmosDeriveFromPath( + #[source] nym_validator_client::signing::direct_wallet::DirectSecp256k1HdWalletError, + ), + + #[error("failed to get directory zk-nym ticketbook partial verification keys")] + GetDirectoryZkNymsTicketbookPartialVerificationKeys(#[source] HttpClientError), + + #[error("failed to get health")] + GetHealth(#[source] HttpClientError), + + #[error("failed to get usage")] + GetUsage(#[source] HttpClientError), + + #[error("failed to get registered network environments")] + GetNetworkEnvs(#[source] HttpClientError), + + #[error("failed to get discovery info")] + GetDiscoveryInfo(#[source] HttpClientError), + + #[error("failed to get vpn network Details")] + GetVpnNetworkDetails(#[source] HttpClientError), + + #[error("failed to post account")] + PostAccount(#[source] HttpClientError), + + #[error("create account")] + CreateAccount(#[source] crate::types::AccountError), +} + +pub type Result = std::result::Result; + +impl TryFrom for NymErrorResponse { + type Error = VpnApiClientError; + + fn try_from(response: VpnApiClientError) -> std::result::Result { + crate::response::extract_error_response(&response).ok_or(response) + } +} + +impl VpnApiClientError { + pub fn http_client_error(&self) -> Option<&HttpClientError> + where + T: std::fmt::Display + std::fmt::Debug + 'static, + { + self.source() + .and_then(|source| source.downcast_ref::>()) + } +} diff --git a/nym-vpn-api-client/src/jwt.rs b/nym-vpn-api-client/src/jwt.rs new file mode 100644 index 00000000000..6e4d99eb158 --- /dev/null +++ b/nym-vpn-api-client/src/jwt.rs @@ -0,0 +1,247 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::fmt; + +use nym_crypto::asymmetric::ed25519; +use nym_validator_client::{DirectSecp256k1HdWallet, signing::signer::OfflineSigner}; +use serde::{Deserialize, Serialize}; +use serde_json::json; +use sha2::{Digest, Sha256}; + +use crate::types::VpnApiTime; + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub(crate) struct JwtHeader { + /// Type that is always "jwt" + typ: String, + /// Either "ES256K" or "ECDSA" + /// + /// NOTE: These JWTs are not meant to be used outside NymVPN API, so the encoding of their signatures + /// serialisation formats do not follow any RFCs, because NymVPN software creates and consumes them + /// + /// Elliptic curve signatures using secp256k1 scheme, sadly not in the table of standard algorithms in + /// https://www.rfc-editor.org/rfc/rfc7518#section-3.1. This scheme is chosen to match the signatures used + /// in the Nyx chain based on the Cosmos SDK. + /// + alg: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub(crate) struct JwtPayload { + /// Issued at, as a Unix epoch, timezone is UTC + iat: u128, + /// The number of seconds the token is valid for, after the issued at UTC epoch + exp: u8, + /// The base58 public key of the account (for signature verification) + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] + pubkey: Option, + /// The subject is the Cosmos account id of the user, or the public key of the device + sub: String, +} + +#[allow(unused)] +#[derive(Debug, Clone)] +pub(crate) struct Jwt { + header: JwtHeader, + payload: JwtPayload, + signature: String, + jwt: String, +} + +impl Jwt { + pub fn new_secp256k1(wallet: &DirectSecp256k1HdWallet) -> Jwt { + let timestamp = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs() as u128; + tracing::debug!("timestamp: {}", timestamp); + Jwt::new_secp256k1_with_now(wallet, timestamp) + } + + pub fn new_secp256k1_synced(wallet: &DirectSecp256k1HdWallet, remote_time: VpnApiTime) -> Jwt { + Jwt::new_secp256k1_with_now(wallet, remote_time.estimate_remote_now_unix()) + } + + pub fn new_secp256k1_with_now(wallet: &DirectSecp256k1HdWallet, now: u128) -> Jwt { + let account = wallet.get_accounts().unwrap(); // TODO: result + let address = account[0].address(); + let public_key = account[0].public_key().to_bytes(); + + let header = JwtHeader { + typ: "JWT".to_string(), + alg: "ES256K".to_string(), + }; + let payload = JwtPayload { + iat: now, + exp: 30, + pubkey: Some(bs58::encode(&public_key).into_string()), + sub: address.to_string(), + }; + + let header_base64 = base64_url::encode(&json!(header.clone()).to_string()); + let payload_base64 = base64_url::encode(&json!(payload.clone()).to_string()); + let message = format!("{header_base64}.{payload_base64}").into_bytes(); + + let signature = wallet.sign_raw(address, message).unwrap(); // TODO: result + let signature_bytes = signature.to_bytes().to_vec(); + + let signature_base64 = base64_url::encode(&signature_bytes); + + let jwt = format!("{header_base64}.{payload_base64}.{signature_base64}"); + + Jwt { + header, + payload, + signature: signature_base64, + jwt, + } + } + + pub fn new_ecdsa(key_pair: &ed25519::KeyPair) -> Jwt { + let timestamp = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs() as u128; + Jwt::new_ecdsa_with_now(key_pair, timestamp) + } + + pub fn new_ecdsa_synced(key_pair: &ed25519::KeyPair, remote_time: VpnApiTime) -> Jwt { + Jwt::new_ecdsa_with_now(key_pair, remote_time.estimate_remote_now_unix()) + } + + pub fn new_ecdsa_with_now(key_pair: &ed25519::KeyPair, now: u128) -> Jwt { + let header = JwtHeader { + typ: "JWT".to_string(), + alg: "ECDSA".to_string(), + }; + let payload = JwtPayload { + iat: now, + exp: 30, + pubkey: None, + sub: key_pair.public_key().to_base58_string(), + }; + + let header_base64 = base64_url::encode(&json!(header.clone()).to_string()); + let payload_base64 = base64_url::encode(&json!(payload.clone()).to_string()); + let message = format!("{header_base64}.{payload_base64}").into_bytes(); + let to_sign = Sha256::digest(&message); + + let signature = key_pair.private_key().sign(to_sign); + let signature_bytes = signature.to_bytes(); + + let signature_base64 = base64_url::encode(&signature_bytes); + + let jwt = format!("{header_base64}.{payload_base64}.{signature_base64}"); + + Jwt { + header, + payload, + signature: signature_base64, + jwt, + } + } +} + +impl fmt::Display for Jwt { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.jwt) + } +} + +#[cfg(test)] +mod tests { + use nym_crypto::asymmetric::ed25519; + use nym_validator_client::DirectSecp256k1HdWallet; + + use super::*; + + fn get_secp256k1_keypair() -> DirectSecp256k1HdWallet { + let mnemonic = "kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece"; + let mnemonic = bip39::Mnemonic::parse(mnemonic).unwrap(); + DirectSecp256k1HdWallet::from_mnemonic("n", mnemonic) + } + + #[test] + fn secp256k1_jwt_matches_javascript() { + let now = 1722535718u128; + let jwt_expected_from_js_snapshot = "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjMwLCJpYXQiOjE3MjI1MzU3MTgsInB1YmtleSI6IndneFpTM25CbWJBd2Nud0FpTnlDTjE5dWNTZHo5cVdkUXlidDJyYWtQVUhyIiwic3ViIjoibjE4Y2phemx4dTd0ODZzODV3YWwzbTdobms4ZXE3cGNmYWtoZHE1MyJ9.qxwY96D-vzMxHWZ840_l6YVDeuZeEkYqz2FaPS8ROztEqipXWCYUi8M1YTH1ZUuNyjgDAMS3NAM3hYvY09ODWQ"; + let jwt_expected_from_js_snapshot_components: Vec<&str> = + jwt_expected_from_js_snapshot.split('.').collect(); + + let wallet = get_secp256k1_keypair(); + let jwt = Jwt::new_secp256k1_with_now(&wallet, now); + + let jwt_str = jwt.to_string(); + let jwt_components: Vec<&str> = jwt_str.split('.').collect(); + + if jwt_str != jwt_expected_from_js_snapshot { + println!("== secp256k1 / ED256K1 =="); + println!( + "jwt_expected_from_js_snapshot = {}", + jwt_expected_from_js_snapshot + ); + println!("jwt_str = {}", jwt_str); + } + + assert_eq!( + jwt_expected_from_js_snapshot_components[0], + jwt_components[0] + ); // header + assert_eq!( + jwt_expected_from_js_snapshot_components[1], + jwt_components[1] + ); // payload + assert_eq!( + jwt_expected_from_js_snapshot_components[2], + jwt_components[2] + ); // signature + + assert_eq!(jwt_expected_from_js_snapshot, jwt_str); // whole JWT strings + } + + fn get_ed25519_keypair() -> ed25519::KeyPair { + // let mnemonic = "kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece"; + let private_key_base58 = "9JqXnPvTrWkq1Yq66d8GbXrcz5eryAhPZvZ46cEsBPUY"; + let public_key_base58 = "4SPdxfBYsuARBw6REQQa5vFiKcvmYiet9sSWqb751i3Z"; + + let private_key = bs58::decode(private_key_base58).into_vec().unwrap(); + let public_key = bs58::decode(public_key_base58).into_vec().unwrap(); + + ed25519::KeyPair::from_bytes(&private_key, &public_key).unwrap() + } + + #[test] + fn ed25519_ecdsa_jwt_matches_javascript() { + let now = 1722535718u128; + let jwt_expected_from_js_snapshot = "eyJhbGciOiJFQ0RTQSIsInR5cCI6IkpXVCJ9.eyJleHAiOjMwLCJpYXQiOjE3MjI1MzU3MTgsInN1YiI6IjRTUGR4ZkJZc3VBUkJ3NlJFUVFhNXZGaUtjdm1ZaWV0OXNTV3FiNzUxaTNaIn0.wSd8y1QdqOVYLf2uTMlnymmiIPQwpxXWd2QvPZ-XqV8O1PNiurQO5JPU65SnaOfggJVA5pnAgZLbj9ciOJKIDg"; + let jwt_expected_from_js_snapshot_components: Vec<&str> = + jwt_expected_from_js_snapshot.split('.').collect(); + + let key_pair = get_ed25519_keypair(); + + let jwt = Jwt::new_ecdsa_with_now(&key_pair, now); + + let jwt_str = jwt.to_string(); + let jwt_components: Vec<&str> = jwt_str.split('.').collect(); + + if jwt_str != jwt_expected_from_js_snapshot { + println!("== ed25519 / ECDSA =="); + println!( + "jwt_expected_from_js_snapshot = {}", + jwt_expected_from_js_snapshot + ); + println!("jwt_str = {}", jwt_str); + } + + assert_eq!( + jwt_expected_from_js_snapshot_components[0], + jwt_components[0] + ); // header + assert_eq!( + jwt_expected_from_js_snapshot_components[1], + jwt_components[1] + ); // payload + assert_eq!( + jwt_expected_from_js_snapshot_components[2], + jwt_components[2] + ); // signature + + assert_eq!(jwt_expected_from_js_snapshot, jwt_str); // whole JWT strings + } +} diff --git a/nym-vpn-api-client/src/lib.rs b/nym-vpn-api-client/src/lib.rs new file mode 100644 index 00000000000..ec95365cae4 --- /dev/null +++ b/nym-vpn-api-client/src/lib.rs @@ -0,0 +1,19 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +pub mod response; +pub mod types; + +pub(crate) mod jwt; + +mod bootstrap; +mod client; +mod error; +mod network_compatibility; +mod request; +mod routes; + +pub use bootstrap::BootstrapVpnApiClient; +pub use client::VpnApiClient; +pub use error::{HttpClientError, VpnApiClientError}; +pub use network_compatibility::NetworkCompatibility; diff --git a/nym-vpn-api-client/src/network_compatibility.rs b/nym-vpn-api-client/src/network_compatibility.rs new file mode 100644 index 00000000000..ff49a50af5d --- /dev/null +++ b/nym-vpn-api-client/src/network_compatibility.rs @@ -0,0 +1,35 @@ +use serde::{Deserialize, Serialize}; +use std::fmt; + +use crate::response::NetworkCompatibilityResponse; + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +pub struct NetworkCompatibility { + pub core: String, + pub ios: String, + pub macos: String, + pub tauri: String, + pub android: String, +} + +impl fmt::Display for NetworkCompatibility { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "core: {}, ios: {}, macos: {}, tauri: {}, android: {}", + self.core, self.ios, self.macos, self.tauri, self.android + ) + } +} + +impl From for NetworkCompatibility { + fn from(response: NetworkCompatibilityResponse) -> Self { + NetworkCompatibility { + core: response.core, + ios: response.ios, + macos: response.macos, + tauri: response.tauri, + android: response.android, + } + } +} diff --git a/nym-vpn-api-client/src/request.rs b/nym-vpn-api-client/src/request.rs new file mode 100644 index 00000000000..564809bf252 --- /dev/null +++ b/nym-vpn-api-client/src/request.rs @@ -0,0 +1,99 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct CreateAccountRequestBody { + pub account_addr: String, + pub pub_key: String, + pub signature_base64: String, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct RegisterDeviceRequestBody { + pub device_identity_key: String, + pub signature: String, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct RequestZkNymRequestBody { + pub withdrawal_request: String, + pub ecash_pubkey: String, + pub expiration_date: String, + pub ticketbook_type: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ApplyFreepassRequestBody { + pub code: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct CreateSubscriptionInvoicesRequestBody { + pub subscription: String, + pub date: String, + pub status: CreateSubscriptionInvoicesStatus, + pub invoice_no: String, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum CreateSubscriptionInvoicesStatus { + Unpaid, + Paid, + Cancelled, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct CreateSubscriptionRequestBody { + pub valid_from_utc: String, + pub subscription_kind: CreateSubscriptionKind, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum CreateSubscriptionKind { + OneMonth, + OneYear, + TwoYears, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct RequestRefundRequestBody { + subscription_invoice: String, + status: RequestRefundRequestStatus, + user_reason: RequestRefundRequestUserReason, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum RequestRefundRequestStatus { + Pending, + Complete, + Rejected, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum RequestRefundRequestUserReason { + SubscriptionInError, + PoorPerformance, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct UpdateDeviceRequestBody { + pub status: UpdateDeviceRequestStatus, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum UpdateDeviceRequestStatus { + Active, + Inactive, + DeleteMe, +} diff --git a/nym-vpn-api-client/src/response.rs b/nym-vpn-api-client/src/response.rs new file mode 100644 index 00000000000..36b712be283 --- /dev/null +++ b/nym-vpn-api-client/src/response.rs @@ -0,0 +1,658 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::{collections::HashSet, fmt, net::IpAddr}; + +use itertools::Itertools; +use nym_contracts_common::Percent; +use nym_credential_proxy_requests::api::v1::ticketbook::models::TicketbookWalletSharesResponse; +use serde::{Deserialize, Serialize}; +use time::OffsetDateTime; + +use crate::network_compatibility::NetworkCompatibility; + +const MAX_PROBE_RESULT_AGE_MINUTES: i64 = 60; + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +pub struct NymVpnRegisterAccountResponse { + pub created_on_utc: String, + pub last_updated_utc: String, + pub account_addr: String, + pub status: NymVpnRegisterAccountStatusResponse, + pub account_token: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum NymVpnRegisterAccountStatusResponse { + Active, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +pub struct NymVpnAccountResponse { + pub created_on_utc: String, + pub last_updated_utc: String, + pub account_addr: String, + pub status: NymVpnAccountStatusResponse, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum NymVpnAccountStatusResponse { + Active, + Inactive, + DeleteMe, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnAccountSummaryResponse { + pub account: NymVpnAccountResponse, + pub subscription: NymVpnAccountSummarySubscription, + pub devices: NymVpnAccountSummaryDevices, + pub fair_usage: NymVpnAccountSummaryFairUsage, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnAccountSummarySubscription { + pub is_active: bool, + pub active: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnAccountSummaryDevices { + pub active: u64, + pub max: u64, + pub remaining: u64, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +#[allow(non_snake_case)] +// These fields have the substring 'GB' in them, meaning we can't use `rename_all = "camelCase"` +// like for the other structs +pub struct NymVpnAccountSummaryFairUsage { + pub usedGB: u64, + pub limitGB: u64, + pub resetsOnUtc: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnHealthResponse { + pub status: String, + #[serde(with = "time::serde::rfc3339")] + pub timestamp_utc: OffsetDateTime, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +pub struct NymVpnDevice { + pub created_on_utc: String, + pub last_updated_utc: String, + pub device_identity_key: String, + pub status: NymVpnDeviceStatus, +} + +#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum NymVpnDeviceStatus { + Active, + Inactive, + DeleteMe, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnDevicesResponse { + pub total_items: u64, + pub page: u64, + pub page_size: u64, + pub items: Vec, +} + +impl fmt::Display for NymVpnDevicesResponse { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{}", + self.items + .iter() + .format_with(", ", |item, f| f(&format_args!("{item:?}"))) + ) + } +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnRefundsResponse { + pub total_items: u64, + pub page: u64, + pub page_size: u64, + pub items: Vec, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +pub struct NymVpnRefund { + pub created_on_utc: String, + pub last_updated_utc: String, + pub subscription_invoice: String, + pub status: NymVpnRefundStatus, + pub user_reason: NymVpnRefundUserReason, + pub data: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum NymVpnRefundStatus { + Pending, + Complete, + Rejected, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum NymVpnRefundUserReason { + SubscriptionInError, + PoorPerformance, + Other, +} + +// Legacy type, because the blinded_shares response for the POST seems to be different than the GET +// Remove once it's not needed anymore +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct NymVpnZkNymPost { + pub created_on_utc: String, + pub last_updated_utc: String, + pub id: String, + pub ticketbook_type: String, + pub valid_until_utc: String, + pub valid_from_utc: String, + pub issued_bandwidth_in_gb: f64, + pub blinded_shares: Option>>, + pub status: NymVpnZkNymStatus, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct NymVpnZkNym { + pub created_on_utc: String, + pub last_updated_utc: String, + pub id: String, + pub ticketbook_type: String, + pub valid_until_utc: String, + pub valid_from_utc: String, + pub issued_bandwidth_in_gb: f64, + pub blinded_shares: Option, + pub status: NymVpnZkNymStatus, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, strum::Display)] +#[serde(rename_all = "snake_case")] +pub enum NymVpnZkNymStatus { + Pending, + Active, + Revoking, + Revoked, + Error, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnZkNymResponse { + pub total_items: u64, + pub page: u64, + pub page_size: u64, + pub items: Vec, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +pub struct NymVpnSubscription { + pub created_on_utc: String, + pub last_updated_utc: String, + pub id: String, + pub valid_until_utc: String, + pub valid_from_utc: String, + pub status: NymVpnSubscriptionStatus, + pub kind: NymVpnSubscriptionKind, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum NymVpnSubscriptionStatus { + Pending, + Complete, + Active, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum NymVpnSubscriptionKind { + OneMonth, + OneYear, + TwoYears, + Freepass, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnSubscriptionResponse { + pub is_subscription_active: bool, + pub subscription: Option, + pub remaining_allowance_in_gb: f64, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnSubscriptionsResponse { + pub total_items: u64, + pub page: u64, + pub page_size: u64, + pub items: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] +#[serde(rename_all = "camelCase")] +pub struct NymVpnUsagesResponse { + pub total_items: u64, + pub page: u64, + pub page_size: u64, + pub items: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] +pub struct NymVpnUsage { + pub created_on_utc: String, + pub last_updated_utc: String, + pub id: String, + pub subscription_id: String, + pub valid_until_utc: String, + pub valid_from_utc: String, + pub bandwidth_allowance_gb: f64, + pub bandwidth_used_gb: f64, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct NymDirectoryGatewaysResponse(Vec); + +impl NymDirectoryGatewaysResponse { + pub fn into_inner(self) -> Vec { + self.0 + } +} + +impl IntoIterator for NymDirectoryGatewaysResponse { + type Item = NymDirectoryGateway; + type IntoIter = std::vec::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct NymDirectoryGateway { + pub identity_key: String, + pub name: String, + pub ip_packet_router: Option, + pub authenticator: Option, + pub location: Location, + pub last_probe: Option, + pub ip_addresses: Vec, + pub mix_port: u16, + pub role: Role, + pub entry: EntryInformation, + // The performance data here originates from the nym-api, and is effectively mixnet performance + // at the time of writing this + pub performance: Percent, + pub build_information: Option, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct EntryInformation { + pub hostname: Option, + pub ws_port: u16, + pub wss_port: Option, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct UxScore { + pub max_score: u8, + pub current_score: u8, + pub color: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct IpPacketRouter { + pub address: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Authenticator { + pub address: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub enum Role { + // a properly active mixnode + Mixnode { + layer: u8, + }, + + #[serde(alias = "entry", alias = "gateway")] + EntryGateway, + + #[serde(alias = "exit")] + ExitGateway, + + // equivalent of node that's in rewarded set but not in the inactive set + Standby, + + Inactive, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct BuildInformation { + pub build_version: String, + pub commit_branch: String, + pub commit_sha: String, +} + +impl NymDirectoryGateway { + pub fn is_fully_operational_entry(&self) -> bool { + self.last_probe + .as_ref() + .map(|probe| probe.is_fully_operational_entry()) + .unwrap_or(false) + } + + pub fn is_fully_operational_exit(&self) -> bool { + self.last_probe + .as_ref() + .map(|probe| probe.is_fully_operational_exit()) + .unwrap_or(false) + } +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Location { + pub two_letter_iso_country_code: String, + pub latitude: f64, + pub longitude: f64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Probe { + pub last_updated_utc: String, + pub outcome: ProbeOutcome, +} + +impl Probe { + pub fn is_fully_operational_entry(&self) -> bool { + if !is_recently_updated(&self.last_updated_utc) { + return false; + } + self.outcome.is_fully_operational_entry() + } + + pub fn is_fully_operational_exit(&self) -> bool { + if !is_recently_updated(&self.last_updated_utc) { + return false; + } + self.outcome.is_fully_operational_exit() + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ProbeOutcome { + pub as_entry: Entry, + pub as_exit: Option, + pub wg: Option, +} + +impl ProbeOutcome { + pub fn is_fully_operational_entry(&self) -> bool { + self.as_entry.can_connect && self.as_entry.can_route + } + + pub fn is_fully_operational_exit(&self) -> bool { + self.as_entry.can_connect + && self.as_entry.can_route + && self.as_exit.as_ref().is_some_and(|exit| { + exit.can_connect + && exit.can_route_ip_v4 + && exit.can_route_ip_external_v4 + && exit.can_route_ip_v6 + && exit.can_route_ip_external_v6 + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Entry { + pub can_connect: bool, + pub can_route: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Exit { + pub can_connect: bool, + pub can_route_ip_v4: bool, + pub can_route_ip_external_v4: bool, + pub can_route_ip_v6: bool, + pub can_route_ip_external_v6: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default)] +#[serde(rename = "wg")] +pub struct WgProbeResults { + pub can_register: bool, + pub can_handshake: bool, + pub can_resolve_dns: bool, + pub ping_hosts_performance: f32, + pub ping_ips_performance: f32, +} + +fn is_recently_updated(last_updated_utc: &str) -> bool { + if let Ok(last_updated) = last_updated_utc.parse::>() { + let now = chrono::Utc::now(); + let duration = now - last_updated; + duration.num_minutes() < MAX_PROBE_RESULT_AGE_MINUTES + } else { + false + } +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct NymDirectoryGatewayCountriesResponse(Vec); + +impl NymDirectoryGatewayCountriesResponse { + pub fn into_inner(self) -> Vec { + self.0 + } +} + +impl IntoIterator for NymDirectoryGatewayCountriesResponse { + type Item = NymDirectoryCountry; + type IntoIter = std::vec::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct NymDirectoryCountry(String); + +impl NymDirectoryCountry { + pub fn iso_code(&self) -> &str { + &self.0 + } + + pub fn into_string(self) -> String { + self.0 + } +} + +impl From for NymDirectoryCountry { + fn from(s: String) -> Self { + Self(s) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct NymErrorResponse { + pub message: String, + pub message_id: Option, + pub code_reference_id: Option, + pub status: String, +} + +impl fmt::Display for NymErrorResponse { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let fields = [ + Some(format!("message: {}", self.message)), + self.message_id + .as_deref() + .map(|x| format!("message_id: {x}")), + self.code_reference_id + .as_deref() + .map(|x| format!("code_reference_id: {x}")), + Some(format!("status: {}", self.status)), + ] + .iter() + .filter_map(|x| x.clone()) + .collect::>(); + write!(f, "{}", fields.join(", ")) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ErrorMessage { + message: String, +} + +impl fmt::Display for ErrorMessage { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.message) + } +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct UnexpectedError { + pub message: String, +} + +impl fmt::Display for UnexpectedError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.message) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct StatusOk { + status: String, +} + +impl fmt::Display for StatusOk { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.status) + } +} + +pub fn extract_error_response(err: &E) -> Option +where + E: std::error::Error + 'static, +{ + let mut source = err.source(); + while let Some(err) = source { + if let Some(status) = err + .downcast_ref::>() + .and_then(extract_error_response_inner::) + { + return Some(status); + } + source = err.source(); + } + None +} + +fn extract_error_response_inner(err: &nym_http_api_client::HttpClientError) -> Option +where + E: Clone + std::fmt::Display, +{ + match err { + nym_http_api_client::HttpClientError::EndpointFailure { error, .. } => Some(error.clone()), + _ => None, + } +} + +// The response type we fetch from the discovery endpoint +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct NymWellknownDiscoveryItemResponse { + pub network_name: String, + pub nym_api_url: String, + pub nym_vpn_api_url: String, + pub account_management: Option, + pub feature_flags: Option, + pub system_messages: Option>, + pub system_configuration: Option, + pub network_compatibility: Option, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] +pub struct AccountManagementResponse { + pub url: String, + pub paths: AccountManagementPathsResponse, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] +pub struct AccountManagementPathsResponse { + pub sign_up: String, + pub sign_in: String, + pub account: String, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct SystemMessageResponse { + pub name: String, + pub display_from: String, + pub display_until: String, + pub message: String, + pub properties: serde_json::Value, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] +pub struct SystemConfigurationResponse { + pub mix_thresholds: ScoreThresholdsResponse, + pub wg_thresholds: ScoreThresholdsResponse, + pub statistics_recipient: Option, + pub min_supported_app_versions: Option, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] +pub struct NetworkCompatibilityResponse { + pub core: String, + pub macos: String, + pub ios: String, + pub tauri: String, + pub android: String, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] +pub struct ScoreThresholdsResponse { + pub high: u8, + pub medium: u8, + pub low: u8, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct NymWellknownDiscoveryItem { + pub network_name: String, + pub nym_api_url: String, + pub nym_vpn_api_url: String, +} + +pub type RegisteredNetworksResponse = HashSet; diff --git a/nym-vpn-api-client/src/routes.rs b/nym-vpn-api-client/src/routes.rs new file mode 100644 index 00000000000..9e5bcc91e89 --- /dev/null +++ b/nym-vpn-api-client/src/routes.rs @@ -0,0 +1,33 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +pub(crate) const PUBLIC: &str = "public"; +pub(crate) const V1: &str = "v1"; +pub(crate) const ACCOUNT: &str = "account"; +pub(crate) const APPLE: &str = "apple"; +pub(crate) const HEALTH: &str = "health"; +pub(crate) const SUMMARY: &str = "summary"; +pub(crate) const DEVICE: &str = "device"; +pub(crate) const ACTIVE: &str = "active"; +pub(crate) const ZKNYM: &str = "zknym"; +pub(crate) const AVAILABLE: &str = "available"; +pub(crate) const FREEPASS: &str = "freepass"; +pub(crate) const SUBSCRIPTION: &str = "subscription"; +pub(crate) const USAGE: &str = "usage"; +pub(crate) const DIRECTORY: &str = "directory"; +pub(crate) const GATEWAYS: &str = "gateways"; +pub(crate) const COUNTRIES: &str = "countries"; +pub(crate) const ENTRY: &str = "entry"; +pub(crate) const EXIT: &str = "exit"; +pub(crate) const ZK_NYMS: &str = "zk-nyms"; +pub(crate) const TICKETBOOK: &str = "ticketbook"; +pub(crate) const PARTIAL_VERIFICATION_KEYS: &str = "partial-verification-keys"; + +pub(crate) const SHOW_VPN_ONLY: &str = "show_vpn_only"; +pub(crate) const VPN_MIN_PERFORMANCE: &str = "vpn_min_performance"; +pub(crate) const MIXNET_MIN_PERFORMANCE: &str = "mixnet_min_performance"; + +pub(crate) const WELLKNOWN: &str = ".wellknown"; +pub(crate) const ENVS_FILE: &str = "envs.json"; +pub(crate) const DISCOVERY_FILE: &str = "discovery.json"; +pub(crate) const CURRENT_ENV: &str = "current-env.json"; diff --git a/nym-vpn-api-client/src/types/account.rs b/nym-vpn-api-client/src/types/account.rs new file mode 100644 index 00000000000..6a698e65f5a --- /dev/null +++ b/nym-vpn-api-client/src/types/account.rs @@ -0,0 +1,248 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::fmt; + +use nym_compact_ecash::scheme::keygen::KeyPairUser; +use nym_validator_client::{ + DirectSecp256k1HdWallet, nyxd::bip32::DerivationPath, signing::signer::OfflineSigner as _, +}; +use time::{Duration, OffsetDateTime}; + +use crate::{VpnApiClientError, error::Result, jwt::Jwt}; + +const MAX_ACCEPTABLE_SKEW_SECONDS: i64 = 60; +const SKEW_SECONDS_CONSIDERED_SAME: i64 = 2; + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("wallet error")] + Wallet(#[from] nym_validator_client::signing::direct_wallet::DirectSecp256k1HdWalletError), + + #[error("no accounts in wallet")] + NoAccounts, +} + +#[derive(Clone, Debug)] +pub struct VpnApiAccount { + wallet: DirectSecp256k1HdWallet, + id: String, + pub_key: String, + signature_base64: String, +} + +impl VpnApiAccount { + fn derive_from_wallet(wallet: DirectSecp256k1HdWallet) -> std::result::Result { + let accounts = wallet.get_accounts()?; + let address = accounts.first().ok_or(Error::NoAccounts)?.address(); + let id = address.to_string(); + let pub_key = bs58::encode( + accounts + .first() + .ok_or(Error::NoAccounts)? + .public_key() + .to_bytes(), + ) + .into_string(); + + let message = id.clone().into_bytes(); + let signature = wallet.sign_raw(address, message)?; + let signature_bytes = signature.to_bytes().to_vec(); + let signature_base64 = base64_url::encode(&signature_bytes); + + Ok(Self { + wallet, + id, + pub_key, + signature_base64, + }) + } + + pub fn random() -> Result<(Self, bip39::Mnemonic)> { + let mnemonic = bip39::Mnemonic::generate(24).unwrap(); + let wallet = DirectSecp256k1HdWallet::from_mnemonic("n", mnemonic.clone()); + let account = Self::derive_from_wallet(wallet).map_err(VpnApiClientError::CreateAccount)?; + Ok((account, mnemonic)) + } + + pub fn id(&self) -> &str { + &self.id + } + + pub fn pub_key(&self) -> &str { + &self.pub_key + } + + pub fn signature_base64(&self) -> &str { + &self.signature_base64 + } + + pub(crate) fn jwt(&self, remote_time: Option) -> Jwt { + match remote_time { + Some(remote_time) => Jwt::new_secp256k1_synced(&self.wallet, remote_time), + None => Jwt::new_secp256k1(&self.wallet), + } + } + + pub fn create_ecash_keypair(&self) -> Result { + let hd_path = cosmos_derivation_path(); + let extended_private_key = self + .wallet + .derive_extended_private_key(&hd_path) + .map_err(VpnApiClientError::CosmosDeriveFromPath)?; + Ok(KeyPairUser::new_seeded( + extended_private_key.private_key().to_bytes(), + )) + } + + pub fn get_mnemonic(&self) -> String { + self.wallet.mnemonic() + } +} + +impl TryFrom for VpnApiAccount { + type Error = VpnApiClientError; + + fn try_from(mnemonic: bip39::Mnemonic) -> std::result::Result { + let wallet = DirectSecp256k1HdWallet::from_mnemonic("n", mnemonic.clone()); + Self::derive_from_wallet(wallet).map_err(VpnApiClientError::CreateAccount) + } +} + +fn cosmos_derivation_path() -> DerivationPath { + nym_config::defaults::COSMOS_DERIVATION_PATH + .parse() + .unwrap() +} + +#[derive(Clone, Copy, Debug)] +pub struct VpnApiTime { + // The local time on the client. + pub local_time: OffsetDateTime, + + // The estimated time on the remote server. Based on RTT, it's not guaranteed to be accurate. + pub estimated_remote_time: OffsetDateTime, +} + +impl VpnApiTime { + pub fn from_estimated_remote_time( + local_time: OffsetDateTime, + estimated_remote_time: OffsetDateTime, + ) -> Self { + Self { + local_time, + estimated_remote_time, + } + } + + pub fn from_remote_timestamp( + local_time_before_request: OffsetDateTime, + remote_timestamp: OffsetDateTime, + local_time_after_request: OffsetDateTime, + ) -> Self { + let rtt = local_time_after_request - local_time_before_request; + let estimated_remote_time = remote_timestamp + (rtt / 2); + Self { + local_time: local_time_after_request, + estimated_remote_time, + } + } + + // Local time minus remote time. Meaning if the value is positive, the local time is ahead + // of the remote time. + pub fn local_time_ahead_skew(&self) -> Duration { + self.local_time - self.estimated_remote_time + } + + pub fn is_almost_same(&self) -> bool { + self.local_time_ahead_skew().abs().whole_seconds() < SKEW_SECONDS_CONSIDERED_SAME + } + + pub fn is_acceptable_synced(&self) -> bool { + self.local_time_ahead_skew().abs().whole_seconds() < MAX_ACCEPTABLE_SKEW_SECONDS + } + + pub fn is_synced(&self) -> VpnApiTimeSynced { + if self.is_almost_same() { + VpnApiTimeSynced::AlmostSame + } else if self.is_acceptable_synced() { + VpnApiTimeSynced::AcceptableSynced + } else { + VpnApiTimeSynced::NotSynced + } + } + + pub fn estimate_remote_now(&self) -> OffsetDateTime { + tracing::debug!( + "Estimating remote now using (local time ahead) skew: {}", + self.local_time_ahead_skew() + ); + let local_time_now = OffsetDateTime::now_utc(); + local_time_now - self.local_time_ahead_skew() + } + + pub fn estimate_remote_now_unix(&self) -> u128 { + self.estimate_remote_now().unix_timestamp() as u128 + } +} + +impl fmt::Display for VpnApiTime { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!( + f, + "Local time: {}, Remote time: {}, Skew: {}", + self.local_time, + self.estimated_remote_time, + self.local_time_ahead_skew(), + ) + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum VpnApiTimeSynced { + AlmostSame, + AcceptableSynced, + NotSynced, +} + +impl VpnApiTimeSynced { + pub fn is_synced(&self) -> bool { + matches!( + self, + VpnApiTimeSynced::AlmostSame | VpnApiTimeSynced::AcceptableSynced + ) + } + + pub fn is_not_synced(&self) -> bool { + !self.is_synced() + } +} + +#[cfg(test)] +mod tests { + use crate::types::test_fixtures::{TEST_DEFAULT_MNEMONIC, TEST_DEFAULT_MNEMONIC_ID}; + + use super::*; + + #[test] + fn create_account_from_mnemonic() { + let account = + VpnApiAccount::try_from(bip39::Mnemonic::parse(TEST_DEFAULT_MNEMONIC).unwrap()) + .unwrap(); + assert_eq!(account.id(), TEST_DEFAULT_MNEMONIC_ID); + } + + #[test] + fn create_random_account() { + let (_, mnemonic) = VpnApiAccount::random().unwrap(); + assert_eq!(mnemonic.word_count(), 24); + } + + #[test] + fn derive_wallets() { + for word_count in [12, 24] { + let wallet = DirectSecp256k1HdWallet::generate("n", word_count).unwrap(); + VpnApiAccount::derive_from_wallet(wallet).unwrap(); + } + } +} diff --git a/nym-vpn-api-client/src/types/device.rs b/nym-vpn-api-client/src/types/device.rs new file mode 100644 index 00000000000..9c2178853d1 --- /dev/null +++ b/nym-vpn-api-client/src/types/device.rs @@ -0,0 +1,222 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::{fmt, sync::Arc}; + +use nym_crypto::asymmetric::ed25519; +use sha2::Digest as _; + +use crate::{jwt::Jwt, request::UpdateDeviceRequestStatus}; + +use super::VpnApiTime; + +#[derive(Clone)] +pub struct Device { + keypair: Arc, +} + +impl Device { + pub fn identity_key(&self) -> &ed25519::PublicKey { + self.keypair.public_key() + } + + pub(crate) fn jwt(&self, remote_time: Option) -> Jwt { + match remote_time { + Some(remote_time) => Jwt::new_ecdsa_synced(&self.keypair, remote_time), + None => Jwt::new_ecdsa(&self.keypair), + } + } + + pub fn sign>(&self, message: M) -> DeviceSignature { + let digest = { + let mut hasher = sha2::Sha256::new(); + hasher.update(message); + hasher.finalize() + }; + + DeviceSignature(self.keypair.private_key().sign(digest)) + } + + pub fn sign_identity_key(&self) -> DeviceSignature { + self.sign(self.identity_key().to_base58_string()) + } +} + +impl fmt::Display for Device { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "Device {{ {} }}", self.identity_key().to_base58_string()) + } +} + +impl fmt::Debug for Device { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!( + f, + "Device {{ identity_key: {} }}", + self.identity_key().to_base58_string() + ) + } +} + +impl From> for Device { + fn from(keypair: Arc) -> Self { + Self { keypair } + } +} + +impl From for Device { + fn from(keypair: ed25519::KeyPair) -> Self { + Self { + keypair: Arc::new(keypair), + } + } +} + +// In tests we create from a mnemonic, in production these are always created directly from +// the keypair +#[cfg(test)] +impl From for Device { + fn from(mnemonic: bip39::Mnemonic) -> Self { + let (entropy, _) = mnemonic.to_entropy_array(); + // Entropy is statically >= 32 bytes, so we can safely extract the first 32 + // bytes + let seed = &entropy[0..32]; + + let signing_key = ed25519::PrivateKey::from_bytes(seed).unwrap(); + let verifying_key = signing_key.public_key(); + + let privkey = signing_key.to_bytes().to_vec(); + let pubkey = verifying_key.to_bytes().to_vec(); + + let keypair = ed25519::KeyPair::from_bytes(&privkey, &pubkey).unwrap(); + + Self { + keypair: Arc::new(keypair), + } + } +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum DeviceStatus { + Active, + Inactive, + DeleteMe, +} + +impl From for UpdateDeviceRequestStatus { + fn from(status: DeviceStatus) -> Self { + match status { + DeviceStatus::Active => UpdateDeviceRequestStatus::Active, + DeviceStatus::Inactive => UpdateDeviceRequestStatus::Inactive, + DeviceStatus::DeleteMe => UpdateDeviceRequestStatus::DeleteMe, + } + } +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct DeviceSignature(ed25519::Signature); + +impl DeviceSignature { + pub fn to_bytes(&self) -> [u8; 64] { + self.0.to_bytes() + } + + pub fn to_base64_url_string(&self) -> String { + base64_url::encode(&self.to_bytes()) + } + + pub fn to_base64_string(&self) -> String { + base64_url::unescape(&self.to_base64_url_string()).to_string() + } +} + +#[cfg(test)] +mod tests { + use crate::types::test_fixtures::{ + TEST_DEFAULT_DEVICE_IDENTITY_KEY, TEST_DEFAULT_DEVICE_MNEMONIC, + }; + + use super::*; + + fn ed25519_keypair_fixture() -> ed25519::KeyPair { + // The mnemonic used to generate the keypair + let _mnemonic = "kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece"; + + // The corresponding keypair generated from the mnemonic + let private_key_base58 = "9JqXnPvTrWkq1Yq66d8GbXrcz5eryAhPZvZ46cEsBPUY"; + let public_key_base58 = "4SPdxfBYsuARBw6REQQa5vFiKcvmYiet9sSWqb751i3Z"; + + let private_key = bs58::decode(private_key_base58).into_vec().unwrap(); + let public_key = bs58::decode(public_key_base58).into_vec().unwrap(); + + ed25519::KeyPair::from_bytes(&private_key, &public_key).unwrap() + } + + #[test] + fn verify_ed25519_keypair_fixture() { + let device = Device::from( + bip39::Mnemonic::parse("kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece").unwrap() + ); + let expected_keypair = ed25519_keypair_fixture(); + assert_eq!( + device.keypair.private_key().to_base58_string(), + expected_keypair.private_key().to_base58_string() + ); + assert_eq!( + device.keypair.public_key().to_base58_string(), + expected_keypair.public_key().to_base58_string() + ); + } + + #[test] + fn create_device_from_mnemonic_1() { + let device = Device::from(bip39::Mnemonic::parse(TEST_DEFAULT_DEVICE_MNEMONIC).unwrap()); + assert_eq!( + device.identity_key().to_base58_string(), + TEST_DEFAULT_DEVICE_IDENTITY_KEY + ); + } + + #[test] + fn create_device_from_mnemonic_2() { + let device = Device::from( + bip39::Mnemonic::parse("kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece").unwrap() + ); + assert_eq!( + device.identity_key().to_base58_string(), + "4SPdxfBYsuARBw6REQQa5vFiKcvmYiet9sSWqb751i3Z", + ); + assert_eq!( + device.keypair.private_key().to_base58_string(), + "9JqXnPvTrWkq1Yq66d8GbXrcz5eryAhPZvZ46cEsBPUY", + ); + } + + #[test] + fn create_device_from_keypair() { + let device = Device::from(ed25519_keypair_fixture()); + assert_eq!( + device.keypair.public_key().to_base58_string(), + "4SPdxfBYsuARBw6REQQa5vFiKcvmYiet9sSWqb751i3Z", + ); + assert_eq!( + device.keypair.private_key().to_base58_string(), + "9JqXnPvTrWkq1Yq66d8GbXrcz5eryAhPZvZ46cEsBPUY", + ); + } + + #[test] + fn sign_identity_key() { + let device = Device::from(bip39::Mnemonic::parse(TEST_DEFAULT_DEVICE_MNEMONIC).unwrap()); + assert_eq!( + device.identity_key().to_base58_string(), + TEST_DEFAULT_DEVICE_IDENTITY_KEY + ); + + let signature = device.sign_identity_key().to_base64_string(); + assert_eq!( + signature, + "W5Zv1QhG37Al0QQH/9tqOmv1MU9IjfWP1xDq116GGSu/1Z6cnAW0sOyfrIiqdEleUKJB9wC/HjcsifaogymWAw==" + ); + } +} diff --git a/nym-vpn-api-client/src/types/gateway.rs b/nym-vpn-api-client/src/types/gateway.rs new file mode 100644 index 00000000000..b480c865655 --- /dev/null +++ b/nym-vpn-api-client/src/types/gateway.rs @@ -0,0 +1,63 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +pub use nym_contracts_common::Percent; + +use crate::VpnApiClientError; + +#[derive(Clone, Copy, Default, Debug)] +pub struct GatewayMinPerformance { + pub mixnet_min_performance: Option, + pub vpn_min_performance: Option, +} + +impl GatewayMinPerformance { + pub fn from_percentage_values( + mixnet_min_performance: Option, + vpn_min_performance: Option, + ) -> Result { + let mixnet_min_performance = mixnet_min_performance + .map(Percent::from_percentage_value) + .transpose() + .map_err(VpnApiClientError::InvalidPercentValue)?; + let vpn_min_performance = vpn_min_performance + .map(Percent::from_percentage_value) + .transpose() + .map_err(VpnApiClientError::InvalidPercentValue)?; + Ok(Self { + mixnet_min_performance, + vpn_min_performance, + }) + } + + pub(crate) fn to_param(self) -> Vec<(String, String)> { + let mut params = vec![]; + if let Some(threshold) = self.mixnet_min_performance { + params.push(( + crate::routes::MIXNET_MIN_PERFORMANCE.to_string(), + threshold.to_string(), + )); + }; + if let Some(threshold) = self.vpn_min_performance { + params.push(( + crate::routes::VPN_MIN_PERFORMANCE.to_string(), + threshold.to_string(), + )); + }; + params + } +} + +#[derive(Clone, Debug)] +pub enum GatewayType { + MixnetEntry, + MixnetExit, + Wg, +} + +#[derive(Clone, Copy, Debug)] +pub struct ScoreThresholds { + pub high: u8, + pub medium: u8, + pub low: u8, +} diff --git a/nym-vpn-api-client/src/types/mod.rs b/nym-vpn-api-client/src/types/mod.rs new file mode 100644 index 00000000000..6aecd37fd23 --- /dev/null +++ b/nym-vpn-api-client/src/types/mod.rs @@ -0,0 +1,17 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +mod account; +mod device; +mod gateway; +mod platform; + +#[cfg(test)] +mod test_fixtures; + +pub use account::{Error as AccountError, VpnApiAccount, VpnApiTime, VpnApiTimeSynced}; +pub use device::{Device, DeviceStatus}; +pub use gateway::{GatewayMinPerformance, GatewayType, ScoreThresholds}; +pub use platform::Platform; + +pub use nym_contracts_common::{NaiveFloat, Percent}; diff --git a/nym-vpn-api-client/src/types/platform.rs b/nym-vpn-api-client/src/types/platform.rs new file mode 100644 index 00000000000..ae15908c2ee --- /dev/null +++ b/nym-vpn-api-client/src/types/platform.rs @@ -0,0 +1,16 @@ +// Copyright 2025 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +#[derive(Clone, Copy, Debug)] +pub enum Platform { + Apple, + Unspecified, +} +impl Platform { + pub fn api_path_component(&self) -> &'static str { + match self { + Platform::Apple => crate::routes::APPLE, + Platform::Unspecified => "", + } + } +} diff --git a/nym-vpn-api-client/src/types/test_fixtures.rs b/nym-vpn-api-client/src/types/test_fixtures.rs new file mode 100644 index 00000000000..c5267e972fe --- /dev/null +++ b/nym-vpn-api-client/src/types/test_fixtures.rs @@ -0,0 +1,11 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +// The default acccount mnemonic, the same as in the js integration tests +pub(super) const TEST_DEFAULT_MNEMONIC: &str = "range mystery picture decline olympic acoustic lesson quick rebuild panda royal fold start leader egg hammer width olympic worry length crawl couch link mobile"; +pub(super) const TEST_DEFAULT_MNEMONIC_ID: &str = "n1sslaag27wfydyrvyua72hg5e0vteglxrs8nw3c"; + +// The default device mnemonic, the same as in the js integration tests +pub(super) const TEST_DEFAULT_DEVICE_MNEMONIC: &str = "pitch deputy proof fire movie put bread ribbon what chef zebra car vacuum gadget steak board state oyster layer glory barely thrive nice box"; +pub(super) const TEST_DEFAULT_DEVICE_IDENTITY_KEY: &str = + "FJDUECYAeosXhNGjxf8w5MJM7N2DfDwQznvWwTxJz6ft"; diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index e59f2308626..b6b58c2eb0b 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -48,7 +48,7 @@ nym-bin-common = { path = "../../../common/bin-common", features = [ "basic_tracing", ] } -nym-ip-packet-client = { git = "https://github.com/nymtech/nym-vpn-client", rev = "5c3aacfce158aac73cbd3fd905d90269f8bacc01" } # max/re-export-test https://github.com/nymtech/nym-vpn-client/commit/5c3aacfce158aac73cbd3fd905d90269f8bacc01 +# nym-ip-packet-client = { git = "https://github.com/nymtech/nym-vpn-client", rev = "5c3aacfce158aac73cbd3fd905d90269f8bacc01" } # nym-gateway-directory bytecodec = { workspace = true } From 5979bfbb24837eae514c054c0b41253e165a294e Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 4 Jul 2025 15:01:11 +0200 Subject: [PATCH 028/139] before directory modification --- sdk/rust/nym-sdk/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index b6b58c2eb0b..df3b9f7f09b 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -48,8 +48,8 @@ nym-bin-common = { path = "../../../common/bin-common", features = [ "basic_tracing", ] } -# nym-ip-packet-client = { git = "https://github.com/nymtech/nym-vpn-client", rev = "5c3aacfce158aac73cbd3fd905d90269f8bacc01" } -# nym-gateway-directory +nym-ip-packet-client = { path = "../../../nym-ip-packet-client" } +nym-gateway-directory = { path = "../../../nym-gateway-directory" } bytecodec = { workspace = true } httpcodec = { workspace = true } From e455f52bf7c8b84a3e978d1c6f1696922094c393 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 4 Jul 2025 16:30:28 +0200 Subject: [PATCH 029/139] removed circular dep from gateway-directory --- Cargo.toml | 1 - nym-gateway-directory/Cargo.toml | 11 +- nym-gateway-directory/src/caching_client.rs | 7 +- .../src/entries/auth_addresses.rs | 4 +- .../src/entries/entry_point.rs | 5 +- .../src/entries/exit_point.rs | 5 +- nym-gateway-directory/src/entries/gateway.rs | 7 +- .../src/entries/ipr_addresses.rs | 5 +- nym-gateway-directory/src/lib.rs | 3 +- sdk/rust/nym-sdk/Cargo.toml | 3 +- sdk/rust/nym-sdk/src/ip_packet_client.rs | 14 ++ .../nym-sdk/src/ip_packet_client/connect.rs | 206 ++++++++++++++++++ .../nym-sdk/src/ip_packet_client/error.rs | 52 +++++ .../nym-sdk/src/ip_packet_client/helpers.rs | 30 +++ .../nym-sdk/src/ip_packet_client/listener.rs | 121 ++++++++++ sdk/rust/nym-sdk/src/lib.rs | 3 +- 16 files changed, 453 insertions(+), 24 deletions(-) create mode 100644 sdk/rust/nym-sdk/src/ip_packet_client.rs create mode 100644 sdk/rust/nym-sdk/src/ip_packet_client/connect.rs create mode 100644 sdk/rust/nym-sdk/src/ip_packet_client/error.rs create mode 100644 sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs create mode 100644 sdk/rust/nym-sdk/src/ip_packet_client/listener.rs diff --git a/Cargo.toml b/Cargo.toml index 0cd635f11d3..953b45df31a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -128,7 +128,6 @@ members = [ "nym-credential-proxy/vpn-api-lib-wasm", "nym-data-observatory", "nym-gateway-directory", - "nym-ip-packet-client", "nym-network-monitor", "nym-node", "nym-node-status-api/nym-node-status-agent", diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 3b1914a0d27..2f08c67ece6 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "nym-gateway-directory" -# version.workspace = true authors.workspace = true repository.workspace = true homepage.workspace = true @@ -12,13 +11,13 @@ license.workspace = true futures.workspace = true itertools.workspace = true nym-client-core = { path = "../common/client-core" } -nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 +nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 nym-http-api-client = { path = "../common/http-api-client" } -nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } -nym-sdk = { path = "../sdk/rust/nym-sdk" } -nym-topology = { path = "../common/topology" } +nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } +nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk +nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk nym-validator-client = { path = "../common/client-libs/validator-client" } -# nym-vpn-api-client = { path = "../nym-vpn-api-client" } # pull in remote and see if that works? I wonder if I can sack this off +# nym-vpn-api-client = { path = "../nym-vpn-api-client" } TODO modify gateway-directory so it isn't reliant on this rand.workspace = true serde.workspace = true strum.workspace = true diff --git a/nym-gateway-directory/src/caching_client.rs b/nym-gateway-directory/src/caching_client.rs index 790d22a1520..e57df88e9d5 100644 --- a/nym-gateway-directory/src/caching_client.rs +++ b/nym-gateway-directory/src/caching_client.rs @@ -8,14 +8,15 @@ use std::{ time::{Duration, Instant}, }; -use futures::{FutureExt, StreamExt, stream::FuturesUnordered}; +use futures::{stream::FuturesUnordered, FutureExt, StreamExt}; use nym_offline_monitor::ConnectivityHandle; -pub use nym_sdk::mixnet::NodeIdentity; +use nym_sphinx::addressing::clients::Recipient; +use nym_sphinx::addressing::nodes::NodeIdentity; use strum::IntoEnumIterator; use tokio::sync::Mutex; use crate::{ - Config, Country, Error, Gateway, GatewayClient, GatewayList, GatewayType, error::Result, + error::Result, Config, Country, Error, Gateway, GatewayClient, GatewayList, GatewayType, }; #[derive(Clone)] diff --git a/nym-gateway-directory/src/entries/auth_addresses.rs b/nym-gateway-directory/src/entries/auth_addresses.rs index a958032cae4..17b6e2ad664 100644 --- a/nym-gateway-directory/src/entries/auth_addresses.rs +++ b/nym-gateway-directory/src/entries/auth_addresses.rs @@ -3,9 +3,9 @@ use std::fmt::Display; -pub use nym_sdk::mixnet::Recipient; +use nym_sphinx::addressing::clients::Recipient; -use crate::{Error, error::Result}; +use crate::{error::Result, Error}; // optional, until we remove the wireguard feature flag #[derive(Debug, Copy, Clone)] diff --git a/nym-gateway-directory/src/entries/entry_point.rs b/nym-gateway-directory/src/entries/entry_point.rs index 24458351f96..803e7c2e7d1 100644 --- a/nym-gateway-directory/src/entries/entry_point.rs +++ b/nym-gateway-directory/src/entries/entry_point.rs @@ -3,12 +3,13 @@ use std::fmt::{Display, Formatter}; -pub use nym_sdk::mixnet::NodeIdentity; +use nym_sphinx::addressing::nodes::NodeIdentity; + use serde::{Deserialize, Serialize}; use tracing::debug; use super::gateway::{Gateway, GatewayList}; -use crate::{Error, error::Result}; +use crate::{error::Result, Error}; // The entry point is always a gateway identity, or some other entry that can be resolved to a // gateway identity. diff --git a/nym-gateway-directory/src/entries/exit_point.rs b/nym-gateway-directory/src/entries/exit_point.rs index 7a95be8295f..2075fc974d8 100644 --- a/nym-gateway-directory/src/entries/exit_point.rs +++ b/nym-gateway-directory/src/entries/exit_point.rs @@ -3,11 +3,12 @@ use std::fmt::{Display, Formatter}; -pub use nym_sdk::mixnet::{NodeIdentity, Recipient}; +use nym_sphinx::addressing::clients::Recipient; +use nym_sphinx::addressing::nodes::NodeIdentity; use serde::{Deserialize, Serialize}; use super::gateway::{Gateway, GatewayList}; -use crate::{Error, IpPacketRouterAddress, error::Result}; +use crate::{error::Result, Error, IpPacketRouterAddress}; // The exit point is a nym-address, but if the exit ip-packet-router is running embedded on a // gateway, we can refer to it by the gateway identity. diff --git a/nym-gateway-directory/src/entries/gateway.rs b/nym-gateway-directory/src/entries/gateway.rs index eb8ecf852ee..efa40996994 100644 --- a/nym-gateway-directory/src/entries/gateway.rs +++ b/nym-gateway-directory/src/entries/gateway.rs @@ -2,16 +2,17 @@ // SPDX-License-Identifier: GPL-3.0-only use itertools::Itertools; -pub use nym_sdk::mixnet::NodeIdentity; +use nym_sphinx::addressing::nodes::NodeIdentity; + use nym_topology::{NodeId, RoutingNode}; use nym_vpn_api_client::types::{NaiveFloat, Percent, ScoreThresholds}; use rand::seq::IteratorRandom; use std::{fmt, net::IpAddr}; use tracing::error; -use crate::{AuthAddress, Country, Error, IpPacketRouterAddress, error::Result}; +use crate::{error::Result, AuthAddress, Country, Error, IpPacketRouterAddress}; -use super::score::{HIGH_SCORE_THRESHOLD, LOW_SCORE_THRESHOLD, MEDIUM_SCORE_THRESHOLD, Score}; +use super::score::{Score, HIGH_SCORE_THRESHOLD, LOW_SCORE_THRESHOLD, MEDIUM_SCORE_THRESHOLD}; pub type NymNode = Gateway; diff --git a/nym-gateway-directory/src/entries/ipr_addresses.rs b/nym-gateway-directory/src/entries/ipr_addresses.rs index e6c0eb31150..752ba74a541 100644 --- a/nym-gateway-directory/src/entries/ipr_addresses.rs +++ b/nym-gateway-directory/src/entries/ipr_addresses.rs @@ -1,10 +1,11 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -pub use nym_sdk::mixnet::{NodeIdentity, Recipient}; +use nym_sphinx::addressing::clients::Recipient; +use nym_sphinx::addressing::nodes::NodeIdentity; use nym_validator_client::models::NymNodeData; -use crate::{Error, error::Result}; +use crate::{error::Result, Error}; #[derive(Debug, Copy, Clone)] pub struct IpPacketRouterAddress(Recipient); diff --git a/nym-gateway-directory/src/lib.rs b/nym-gateway-directory/src/lib.rs index 9c11045e021..0744b55eadf 100644 --- a/nym-gateway-directory/src/lib.rs +++ b/nym-gateway-directory/src/lib.rs @@ -7,7 +7,8 @@ mod error; mod gateway_client; mod helpers; -pub use nym_sdk::mixnet::{NodeIdentity, Recipient}; +use nym_sphinx::addressing::clients::Recipient; +use nym_sphinx::addressing::nodes::NodeIdentity; pub use nym_vpn_api_client::types::{GatewayMinPerformance, Percent}; pub use crate::{ diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index df3b9f7f09b..800644ea54d 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -48,7 +48,6 @@ nym-bin-common = { path = "../../../common/bin-common", features = [ "basic_tracing", ] } -nym-ip-packet-client = { path = "../../../nym-ip-packet-client" } nym-gateway-directory = { path = "../../../nym-gateway-directory" } bytecodec = { workspace = true } @@ -66,6 +65,8 @@ url = { workspace = true } toml = { workspace = true } tempfile = { workspace = true } +nym-ip-packet-requests = { path = "../../../common/ip-packet-requests" } + # tcpproxy dependencies clap = { workspace = true, features = ["derive"] } anyhow.workspace = true diff --git a/sdk/rust/nym-sdk/src/ip_packet_client.rs b/sdk/rust/nym-sdk/src/ip_packet_client.rs new file mode 100644 index 00000000000..8aa5ffdf427 --- /dev/null +++ b/sdk/rust/nym-sdk/src/ip_packet_client.rs @@ -0,0 +1,14 @@ +// Copyright 2023-2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +mod connect; +mod error; +mod helpers; +mod listener; + +pub use connect::IprClientConnect; +pub use error::Error; +pub use listener::{IprListener, MixnetMessageOutcome}; + +// Re-export the currently used version +pub use nym_ip_packet_requests::v8 as current; diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs new file mode 100644 index 00000000000..f6e28d4f41b --- /dev/null +++ b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs @@ -0,0 +1,206 @@ +// Copyright 2023-2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::{sync::Arc, time::Duration}; + +pub use crate::mixnet::{ + InputMessage, MixnetClient, MixnetClientSender, MixnetMessageSender, Recipient, + TransmissionLane, +}; +use nym_gateway_directory::IpPacketRouterAddress; +use nym_ip_packet_requests::IpPair; +use tokio::time::sleep; +use tokio_util::sync::CancellationToken; +use tracing::{debug, error}; + +use crate::{ + current::{ + request::IpPacketRequest, + response::{ + ConnectResponse, ConnectResponseReply, ControlResponse, IpPacketResponse, + IpPacketResponseData, + }, + }, + error::{Error, Result}, + helpers::check_ipr_message_version, +}; + +pub type SharedMixnetClient = Arc>>; + +const IPR_CONNECT_TIMEOUT: Duration = Duration::from_secs(10); + +#[derive(Clone, Debug, PartialEq, Eq)] +enum ConnectionState { + Disconnected, + Connecting, + Connected, + #[allow(unused)] + Disconnecting, +} + +pub struct IprClientConnect { + // During connection we need the mixnet client, but once connected we expect to setup a channel + // from the main mixnet listener at the top-level. + // As such, we drop the shared mixnet client once we're connected. + mixnet_client: SharedMixnetClient, + mixnet_sender: MixnetClientSender, + connected: ConnectionState, + cancel_token: CancellationToken, +} + +impl IprClientConnect { + pub async fn new(mixnet_client: SharedMixnetClient, cancel_token: CancellationToken) -> Self { + let mixnet_sender = mixnet_client.lock().await.as_ref().unwrap().split_sender(); + Self { + mixnet_client, + mixnet_sender, + connected: ConnectionState::Disconnected, + cancel_token, + } + } + + pub async fn connect( + &mut self, + ip_packet_router_address: IpPacketRouterAddress, + ) -> Result { + if self.connected != ConnectionState::Disconnected { + return Err(Error::AlreadyConnected); + } + + tracing::info!("Connecting to exit gateway"); + self.connected = ConnectionState::Connecting; + match self.connect_inner(ip_packet_router_address).await { + Ok(ips) => { + debug!("Successfully connected to the ip-packet-router"); + self.connected = ConnectionState::Connected; + Ok(ips) + } + Err(err) => { + error!("Failed to connect to the ip-packet-router: {:?}", err); + self.connected = ConnectionState::Disconnected; + Err(err) + } + } + } + + async fn connect_inner( + &mut self, + ip_packet_router_address: IpPacketRouterAddress, + ) -> Result { + let request_id = self.send_connect_request(ip_packet_router_address).await?; + + debug!("Waiting for reply..."); + self.listen_for_connect_response(request_id).await + } + + async fn send_connect_request( + &self, + ip_packet_router_address: IpPacketRouterAddress, + ) -> Result { + let (request, request_id) = IpPacketRequest::new_connect_request(None); + + // We use 20 surbs for the connect request because typically the IPR is configured to have + // a min threshold of 10 surbs that it reserves for itself to request additional surbs. + let surbs = 20; + self.mixnet_sender + .send(create_input_message( + Recipient::from(ip_packet_router_address), + request, + surbs, + )) + .await + .map_err(|err| Error::SdkError(Box::new(err)))?; + + Ok(request_id) + } + + async fn handle_connect_response(&self, response: ConnectResponse) -> Result { + debug!("Handling dynamic connect response"); + match response.reply { + ConnectResponseReply::Success(r) => Ok(r.ips), + ConnectResponseReply::Failure(reason) => Err(Error::ConnectRequestDenied { reason }), + } + } + + async fn handle_ip_packet_router_response(&self, response: IpPacketResponse) -> Result { + let control_response = match response.data { + IpPacketResponseData::Control(control_response) => control_response, + _ => { + error!("Received non-control response while waiting for connect response"); + return Err(Error::UnexpectedConnectResponse); + } + }; + + match *control_response { + ControlResponse::Connect(resp) => self.handle_connect_response(resp).await, + response => { + error!("Unexpected response: {response:?}"); + Err(Error::UnexpectedConnectResponse) + } + } + } + + async fn listen_for_connect_response(&self, request_id: u64) -> Result { + // Connecting is basically synchronous from the perspective of the mixnet client, so it's safe + // to just grab ahold of the mutex and keep it until we get the response. + let mut mixnet_client_handle = self.mixnet_client.lock().await; + let mixnet_client = mixnet_client_handle.as_mut().unwrap(); + + let timeout = sleep(IPR_CONNECT_TIMEOUT); + tokio::pin!(timeout); + + loop { + tokio::select! { + _ = self.cancel_token.cancelled() => { + error!("Cancelled while waiting for reply to connect request"); + return Err(Error::Cancelled); + }, + _ = &mut timeout => { + error!("Timed out waiting for reply to connect request"); + return Err(Error::TimeoutWaitingForConnectResponse); + }, + msgs = mixnet_client.wait_for_messages() => match msgs { + None => { + return Err(Error::NoMixnetMessagesReceived); + } + Some(msgs) => { + for msg in msgs { + // Confirm that the version is correct + if let Err(err) = check_ipr_message_version(&msg) { + tracing::info!("Mixnet message version mismatch: {err}"); + continue; + } + + // Then we deserialize the message + tracing::debug!("IprClient: got message while waiting for connect response"); + let Ok(response) = IpPacketResponse::from_reconstructed_message(&msg) else { + // This is ok, it's likely just one of our self-pings + tracing::debug!("Failed to deserialize mixnet message"); + continue; + }; + + if response.id() == Some(request_id) { + tracing::debug!("Got response with matching id"); + return self.handle_ip_packet_router_response(response).await; + } + } + } + } + } + } + } +} + +fn create_input_message( + recipient: Recipient, + request: IpPacketRequest, + surbs: u32, +) -> InputMessage { + InputMessage::new_anonymous( + recipient, + request.to_bytes().unwrap(), + surbs, + TransmissionLane::General, + None, + ) +} diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/error.rs b/sdk/rust/nym-sdk/src/ip_packet_client/error.rs new file mode 100644 index 00000000000..0979602dc24 --- /dev/null +++ b/sdk/rust/nym-sdk/src/ip_packet_client/error.rs @@ -0,0 +1,52 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use crate::current::response::ConnectFailureReason; + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("nym sdk")] + SdkError(#[source] Box), + + #[error( + "received response with version v{received}, the client is too new and can only understand v{expected}" + )] + ReceivedResponseWithOldVersion { expected: u8, received: u8 }, + + #[error( + "received response with version v{received}, the client is too old and can only understand v{expected}" + )] + ReceivedResponseWithNewVersion { expected: u8, received: u8 }, + + #[error("got reply for connect request, but it appears intended for the wrong address?")] + GotReplyIntendedForWrongAddress, + + #[error("unexpected connect response")] + UnexpectedConnectResponse, + + #[error("mixnet client stopped returning responses")] + NoMixnetMessagesReceived, + + #[error("timeout waiting for connect response from exit gateway (ipr)")] + TimeoutWaitingForConnectResponse, + + #[error("connection cancelled")] + Cancelled, + + #[error("connect request denied: {reason}")] + ConnectRequestDenied { reason: ConnectFailureReason }, + + #[error("failed to get version from message")] + NoVersionInMessage, + + #[error("already connected to the mixnet")] + AlreadyConnected, + + #[error("failed to create connect request")] + FailedToCreateConnectRequest { + source: nym_ip_packet_requests::sign::SignatureError, + }, +} + +// Result type based on our error type +pub type Result = std::result::Result; diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs b/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs new file mode 100644 index 00000000000..612657ce9de --- /dev/null +++ b/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs @@ -0,0 +1,30 @@ +// Copyright 2023-2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::cmp::Ordering; + +pub use crate::mixnet::ReconstructedMessage; + +use crate::{current::VERSION as CURRENT_VERSION, error::Result, Error}; + +pub(crate) fn check_ipr_message_version(message: &ReconstructedMessage) -> Result<()> { + // Assuming it's a IPR message, it will have a version as its first byte + if let Some(version) = message.message.first() { + match version.cmp(&CURRENT_VERSION) { + Ordering::Greater => Err(Error::ReceivedResponseWithNewVersion { + expected: CURRENT_VERSION, + received: *version, + }), + Ordering::Less => Err(Error::ReceivedResponseWithOldVersion { + expected: CURRENT_VERSION, + received: *version, + }), + Ordering::Equal => { + // We're good + Ok(()) + } + } + } else { + Err(Error::NoVersionInMessage) + } +} diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs b/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs new file mode 100644 index 00000000000..4642f788af5 --- /dev/null +++ b/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs @@ -0,0 +1,121 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use bytes::Bytes; +use futures::StreamExt; +use nym_ip_packet_requests::{codec::MultiIpPacketCodec, v8::response::ControlResponse}; +pub use nym_sdk::mixnet::ReconstructedMessage; +use tokio_util::codec::FramedRead; +use tracing::{debug, error, info, warn}; + +use crate::{ + current::{ + request::{ControlRequest, IpPacketRequest, IpPacketRequestData}, + response::{InfoLevel, IpPacketResponse, IpPacketResponseData}, + }, + helpers::check_ipr_message_version, +}; + +pub enum MixnetMessageOutcome { + IpPackets(Vec), + MixnetSelfPing, + Disconnect, +} + +pub struct IprListener {} + +#[derive(Debug, thiserror::Error)] +pub enum IprListenerError { + #[error(transparent)] + IprClientError(#[from] crate::Error), +} + +impl IprListener { + pub fn new() -> Self { + Self {} + } + + fn is_mix_ping(&self, request: &IpPacketRequest) -> bool { + match request.data { + IpPacketRequestData::Control(ref control) => { + matches!(**control, ControlRequest::Ping(_)) + } + _ => { + debug!("Received unexpected request: {request:?}"); + false + } + } + } + + pub async fn handle_reconstructed_message( + &mut self, + message: ReconstructedMessage, + ) -> Result, IprListenerError> { + check_ipr_message_version(&message)?; + + match IpPacketResponse::from_reconstructed_message(&message) { + Ok(response) => { + match response.data { + IpPacketResponseData::Data(data_response) => { + // Un-bundle the mixnet message and send the individual IP packets + // to the tun device + let framed_reader = FramedRead::new( + data_response.ip_packet.as_ref(), + MultiIpPacketCodec::new(), + ); + let responses: Vec = framed_reader + .filter_map(|res| async { res.ok().map(|packet| packet.into_bytes()) }) + .collect() + .await; + return Ok(Some(MixnetMessageOutcome::IpPackets(responses))); + } + IpPacketResponseData::Control(control_response) => match *control_response { + ControlResponse::Connect(_) => { + info!("Received connect response when already connected - ignoring"); + } + ControlResponse::Disconnect(_) => { + info!("Received disconnect response"); + return Ok(Some(MixnetMessageOutcome::Disconnect)); + } + ControlResponse::UnrequestedDisconnect(_) => { + info!("Received unrequested disconnect response, ignoring for now"); + } + ControlResponse::Pong(_) => { + info!("Received pong response, ignoring for now"); + } + ControlResponse::Health(_) => { + info!("Received health response, ignoring for now"); + } + ControlResponse::Info(info) => { + let msg = + format!("Received info response from the mixnet: {}", info.reply); + match info.level { + InfoLevel::Info => info!("{msg}"), + InfoLevel::Warn => warn!("{msg}"), + InfoLevel::Error => error!("{msg}"), + } + } + }, + } + } + Err(err) => { + // The exception to when we are not expecting a response, is when we + // are sending a ping to ourselves. + if let Ok(request) = IpPacketRequest::from_reconstructed_message(&message) { + if self.is_mix_ping(&request) { + return Ok(Some(MixnetMessageOutcome::MixnetSelfPing)); + } + } else { + warn!("Failed to deserialize reconstructed message: {err}"); + } + } + } + Ok(None) + } +} + +impl Default for IprListener { + fn default() -> Self { + Self::new() + } +} diff --git a/sdk/rust/nym-sdk/src/lib.rs b/sdk/rust/nym-sdk/src/lib.rs index 5536e9ccc1c..21468efed1a 100644 --- a/sdk/rust/nym-sdk/src/lib.rs +++ b/sdk/rust/nym-sdk/src/lib.rs @@ -8,9 +8,10 @@ mod error; pub mod bandwidth; pub mod client_pool; +pub mod ip_packet_client; pub mod mixnet; -pub mod tcp_proxy; pub mod stream_wrapper; +pub mod tcp_proxy; pub use error::{Error, Result}; #[allow(deprecated)] From e000e78807ad2526be79e0381d5477561d82b403 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 7 Jul 2025 14:55:45 +0200 Subject: [PATCH 030/139] out of dependency hell --- Cargo.lock | 13051 ++++++++++++++++ Cargo.toml | 8 + nym-gateway-directory/Cargo.toml | 17 +- nym-gateway-directory/src/entries/gateway.rs | 2 +- nym-gateway-directory/src/error.rs | 4 +- nym-gateway-directory/src/gateway_client.rs | 5 +- nym-ip-packet-client/src/lib.rs | 14 - nym-ip-packet-client/src/listener.rs | 121 - nym-vpn-api-client/Cargo.toml | 40 - nym-vpn-api-client/src/bootstrap.rs | 65 - nym-vpn-api-client/src/client.rs | 1164 -- nym-vpn-api-client/src/error.rs | 143 - nym-vpn-api-client/src/jwt.rs | 247 - nym-vpn-api-client/src/lib.rs | 19 - .../src/network_compatibility.rs | 35 - nym-vpn-api-client/src/request.rs | 99 - nym-vpn-api-client/src/response.rs | 658 - nym-vpn-api-client/src/routes.rs | 33 - nym-vpn-api-client/src/types/account.rs | 248 - nym-vpn-api-client/src/types/device.rs | 222 - nym-vpn-api-client/src/types/gateway.rs | 63 - nym-vpn-api-client/src/types/mod.rs | 17 - nym-vpn-api-client/src/types/platform.rs | 16 - nym-vpn-api-client/src/types/test_fixtures.rs | 11 - sdk/rust/nym-sdk/Cargo.toml | 1 + .../nym-sdk/src/ip_packet_client/connect.rs | 9 +- .../nym-sdk/src/ip_packet_client/error.rs | 5 +- .../nym-sdk/src/ip_packet_client/helpers.rs | 5 +- .../nym-sdk/src/ip_packet_client/listener.rs | 19 +- .../mixnet_stream_wrapper_ipr.rs | 24 +- 30 files changed, 13116 insertions(+), 3249 deletions(-) create mode 100644 Cargo.lock delete mode 100644 nym-ip-packet-client/src/lib.rs delete mode 100644 nym-ip-packet-client/src/listener.rs delete mode 100644 nym-vpn-api-client/Cargo.toml delete mode 100644 nym-vpn-api-client/src/bootstrap.rs delete mode 100644 nym-vpn-api-client/src/client.rs delete mode 100644 nym-vpn-api-client/src/error.rs delete mode 100644 nym-vpn-api-client/src/jwt.rs delete mode 100644 nym-vpn-api-client/src/lib.rs delete mode 100644 nym-vpn-api-client/src/network_compatibility.rs delete mode 100644 nym-vpn-api-client/src/request.rs delete mode 100644 nym-vpn-api-client/src/response.rs delete mode 100644 nym-vpn-api-client/src/routes.rs delete mode 100644 nym-vpn-api-client/src/types/account.rs delete mode 100644 nym-vpn-api-client/src/types/device.rs delete mode 100644 nym-vpn-api-client/src/types/gateway.rs delete mode 100644 nym-vpn-api-client/src/types/mod.rs delete mode 100644 nym-vpn-api-client/src/types/platform.rs delete mode 100644 nym-vpn-api-client/src/types/test_fixtures.rs diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000000..5f6458ad4aa --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,13051 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "accessory" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28e416a3ab45838bac2ab2d81b1088d738d7b2d2c5272a54d39366565a29bd80" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "addr" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" +dependencies = [ + "psl", + "psl-types", +] + +[[package]] +name = "adler2" +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", + "generic-array 0.14.9", +] + +[[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 2.6.1", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "ammonia" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" +dependencies = [ + "cssparser", + "html5ever", + "maplit", + "tendril", + "url", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2 0.10.6", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "askama" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7" +dependencies = [ + "askama_derive", + "itoa", + "percent-encoding", + "serde", + "serde_json", +] + +[[package]] +name = "askama_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac" +dependencies = [ + "askama_parser", + "basic-toml", + "memchr", + "proc-macro2", + "quote", + "rustc-hash", + "serde", + "serde_derive", + "syn 2.0.106", +] + +[[package]] +name = "askama_parser" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f" +dependencies = [ + "memchr", + "serde", + "serde_derive", + "winnow", +] + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-compression" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" +dependencies = [ + "compression-codecs", + "compression-core", + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "async-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3609af4bbf701ddaf1f6bb4e6257dff4ff8932327d0e685d3f653724c258b1ac" +dependencies = [ + "futures-io", + "futures-util", + "log", + "pin-project-lite", + "rustls-native-certs 0.7.3", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tungstenite 0.21.0", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-future" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "autodoc" +version = "0.1.0" +dependencies = [ + "env_logger", + "log", +] + +[[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.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "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.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-client-ip" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" +dependencies = [ + "axum", + "forwarded-header-value", + "serde", +] + +[[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.3.1", + "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-extra" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" +dependencies = [ + "axum", + "axum-core", + "bytes", + "fastrand 2.3.0", + "futures-util", + "headers", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "multer", + "pin-project-lite", + "serde", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[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.106", +] + +[[package]] +name = "axum-test" +version = "16.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e3a443d2608936a02a222da7b746eb412fede7225b3030b64fe9be99eab8dc" +dependencies = [ + "anyhow", + "assert-json-diff", + "auto-future", + "axum", + "bytes", + "bytesize", + "cookie", + "http 1.3.1", + "http-body-util", + "hyper 1.7.0", + "hyper-util", + "mime", + "pretty_assertions", + "reserve-port", + "rust-multipart-rfc7578_2", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tokio", + "tower 0.5.2", + "url", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "base85rs" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87678d33a2af71f019ed11f52db246ca6c5557edee2cccbe689676d1ad9c6b5a" + +[[package]] +name = "basic-toml" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" +dependencies = [ + "serde", +] + +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "binstring" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" + +[[package]] +name = "bip32" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" +dependencies = [ + "bs58", + "hmac", + "k256", + "rand_core 0.6.4", + "ripemd", + "secp256k1", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bip39" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", + "zeroize", +] + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +dependencies = [ + "byte-tools", + "crypto-mac", + "digest 0.8.1", + "opaque-debug 0.2.3", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "bloomfilter" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" +dependencies = [ + "getrandom 0.2.16", + "siphasher 1.0.1", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/jstuczyn/bls12_381?branch=temp/experimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" +dependencies = [ + "digest 0.10.7", + "ff", + "group", + "pairing", + "rand_core 0.6.4", + "serde", + "serdect 0.3.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bnum" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.9", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytecodec" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" +dependencies = [ + "byteorder", + "trackable 0.2.24", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "bytesize" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" + +[[package]] +name = "camino" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "castaway" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" + +[[package]] +name = "cc" +version = "1.2.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "celes" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" +dependencies = [ + "phf 0.11.3", + "serde", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" +dependencies = [ + "byteorder", + "keystream", +] + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link 0.2.1", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "clap" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_complete" +version = "4.5.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" +dependencies = [ + "clap", +] + +[[package]] +name = "clap_complete_fig" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" +dependencies = [ + "clap", + "clap_complete", +] + +[[package]] +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "clap_lex" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" + +[[package]] +name = "coarsetime" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + +[[package]] +name = "comfy-table" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" +dependencies = [ + "crossterm 0.29.0", + "unicode-segmentation", + "unicode-width 0.2.2", +] + +[[package]] +name = "compression-codecs" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "console-api" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime", + "hyper-util", + "prost", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-str" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462e1f6a8e005acc8835d32d60cbd7973ed65ea2a8d8473830e675f050956427" +dependencies = [ + "prost", + "tendermint-proto", +] + +[[package]] +name = "cosmrs" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1394c263335da09e8ba8c4b2c675d804e3e0deb44cce0866a5f838d3ddd43d02" +dependencies = [ + "bip32", + "cosmos-sdk-proto", + "ecdsa", + "eyre", + "k256", + "rand_core 0.6.4", + "serde", + "serde_json", + "signature", + "subtle-encoding", + "tendermint", + "tendermint-rpc", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-core" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" + +[[package]] +name = "cosmwasm-crypto" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "cosmwasm-core", + "curve25519-dalek", + "digest 0.10.7", + "ecdsa", + "ed25519-zebra", + "k256", + "num-traits", + "p256", + "rand_core 0.6.4", + "rayon", + "sha2 0.10.9", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "cosmwasm-schema" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" +dependencies = [ + "cosmwasm-schema-derive", + "schemars 0.8.22", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "cosmwasm-std" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" +dependencies = [ + "base64 0.22.1", + "bech32", + "bnum", + "cosmwasm-core", + "cosmwasm-crypto", + "cosmwasm-derive", + "derive_more 1.0.0", + "hex", + "rand_core 0.6.4", + "rmp-serde", + "schemars 0.8.22", + "serde", + "serde-json-wasm", + "sha2 0.10.9", + "static_assertions", + "thiserror 1.0.69", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "futures", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "tokio", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.9.4", + "crossterm_winapi", + "document-features", + "parking_lot", + "rustix", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.9", + "rand_core 0.6.4", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.9", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +dependencies = [ + "generic-array 0.12.4", + "subtle 1.0.0", +] + +[[package]] +name = "cssparser" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf 0.11.3", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.106", +] + +[[package]] +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +dependencies = [ + "memchr", +] + +[[package]] +name = "ct-codecs" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8" + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "cupid" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1" +dependencies = [ + "gcc", + "rustc_version 0.2.3", +] + +[[package]] +name = "curl" +version = "0.4.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.6.1", + "windows-sys 0.59.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.83+curl-8.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.59.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "serde", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "cw-controllers" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw-multi-test" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" +dependencies = [ + "anyhow", + "bech32", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "itertools 0.14.0", + "prost", + "schemars 0.8.22", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", +] + +[[package]] +name = "cw-storage-plus" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" +dependencies = [ + "cosmwasm-std", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "cw-utils" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw20" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "cw3" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw20", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw4" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", + "serde", +] + +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "debounced" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "107e5cd9b5163c19751e53eef634cae25cf5ed5f6d0c81125feaa92e43703cc7" +dependencies = [ + "futures-timer", + "futures-util", +] + +[[package]] +name = "defguard_wireguard_rs" +version = "0.4.7" +source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.4.7#ef1cf3714629bf5016fb38cbb7320451dc69fb09" +dependencies = [ + "base64 0.22.1", + "libc", + "log", + "netlink-packet-core 0.7.0", + "netlink-packet-generic 0.3.3", + "netlink-packet-route 0.20.1", + "netlink-packet-utils", + "netlink-packet-wireguard", + "netlink-sys", + "nix 0.29.0", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "delegate-display" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9926686c832494164c33a36bf65118f4bd6e704000b58c94681bf62e9ad67a74" +dependencies = [ + "impartial-ord", + "itoa", + "macroific", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "unicode-xid", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.4", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "dkg-bypass-contract" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "nym-coconut-dkg-common", + "nym-contracts-common", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "dtoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "easy-addr" +version = "0.1.0" +dependencies = [ + "cosmwasm-std", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect 0.2.0", + "signature", + "spki", +] + +[[package]] +name = "echo-server" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "bytecodec", + "bytes", + "clap", + "dashmap", + "dirs", + "futures", + "nym-bin-common", + "nym-crypto", + "nym-sdk", + "serde", + "tempfile", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + +[[package]] +name = "ed25519-compact" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" +dependencies = [ + "ct-codecs", + "getrandom 0.2.16", +] + +[[package]] +name = "ed25519-consensus" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" +dependencies = [ + "curve25519-dalek-ng", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0017d969298eec91e3db7a2985a8cab4df6341d86e6f3a6f5878b13fb7846bc9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.9", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect 0.2.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "env_filter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "etherparse" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "827292ea592108849932ad8e30218f8b1f21c0dfd0696698a18b5d0aed62d990" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.1", + "pin-project-lite", +] + +[[package]] +name = "extension-storage" +version = "1.4.0-rc.0" +dependencies = [ + "bip39", + "console_error_panic_hook", + "js-sys", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-storage", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fancy_constructor" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "filetime" +version = "0.2.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.60.2", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "eyre", + "paste", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "forwarded-header-value" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +dependencies = [ + "nonempty", + "thiserror 1.0.69", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "serde", + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug 0.3.1", + "polyval", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 1.3.1", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "goblin" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.11.4", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.11.4", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "zerocopy", +] + +[[package]] +name = "handlebars" +version = "3.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" +dependencies = [ + "log", + "pest", + "pest_derive", + "quick-error", + "serde", + "serde_json", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64 0.22.1", + "bytes", + "headers-core", + "http 1.3.1", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.3.1", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + +[[package]] +name = "hickory-proto" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +dependencies = [ + "async-trait", + "bytes", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "h2 0.4.12", + "http 1.3.1", + "idna", + "ipnet", + "once_cell", + "rand 0.9.2", + "ring", + "rustls 0.23.32", + "thiserror 2.0.17", + "tinyvec", + "tokio", + "tokio-rustls 0.26.4", + "tracing", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "moka", + "once_cell", + "parking_lot", + "rand 0.9.2", + "resolv-conf", + "rustls 0.23.32", + "smallvec", + "thiserror 2.0.17", + "tokio", + "tokio-rustls 0.26.4", + "tracing", + "webpki-roots 0.26.11", +] + +[[package]] +name = "hidapi" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "winapi", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha1-compact" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" + +[[package]] +name = "hmac-sha256" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha512" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "html5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" +dependencies = [ + "log", + "markup5ever", + "match_token", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpcodec" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" +dependencies = [ + "bytecodec", + "trackable 0.2.24", +] + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "humantime" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" + +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +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", + "hyper-util", + "rustls 0.23.32", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower-service", + "webpki-roots 1.0.3", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper 1.7.0", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.7.0", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.1", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impartial-ord" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "importer-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "bip39", + "clap", + "dirs", + "importer-contract", + "nym-bin-common", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-validator-client", + "nym-vesting-contract-common", + "serde", + "serde_json", + "tokio", + "tracing", +] + +[[package]] +name = "importer-contract" +version = "0.1.0" +dependencies = [ + "base85rs", + "cosmwasm-schema", + "cosmwasm-std", +] + +[[package]] +name = "indenter" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" + +[[package]] +name = "indexed_db_futures" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" +dependencies = [ + "accessory", + "cfg-if", + "delegate-display", + "derive_more 2.0.1", + "fancy_constructor", + "indexed_db_futures_macros_internal", + "js-sys", + "sealed", + "smallvec", + "thiserror 2.0.17", + "tokio", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "indexed_db_futures_macros_internal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caeba94923b68f254abef921cea7e7698bf4675fdd89d7c58bf1ed885b49a27d" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", + "serde", + "serde_core", +] + +[[package]] +name = "indicatif" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +dependencies = [ + "console", + "portable-atomic", + "unicode-width 0.2.2", + "unit-prefix", + "vt100", + "web-time", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding", + "generic-array 0.14.9", +] + +[[package]] +name = "inquire" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" +dependencies = [ + "bitflags 1.3.2", + "crossterm 0.25.0", + "dyn-clone", + "lazy_static", + "newline-converter", + "thiserror 1.0.69", + "unicode-segmentation", + "unicode-width 0.1.14", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "inventory" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +dependencies = [ + "rustversion", +] + +[[package]] +name = "ip_network" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.10", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "isahc" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel", + "castaway", + "crossbeam-utils", + "curl", + "curl-sys", + "event-listener 2.5.3", + "futures-lite", + "http 0.2.12", + "log", + "once_cell", + "polling", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jwt-simple" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "731011e9647a71ff4f8474176ff6ce6e0d2de87a0173f15613af3a84c3e3401a" +dependencies = [ + "anyhow", + "binstring", + "blake2b_simd", + "coarsetime", + "ct-codecs", + "ed25519-compact", + "hmac-sha1-compact", + "hmac-sha256", + "hmac-sha512", + "k256", + "p256", + "p384", + "rand 0.8.5", + "serde", + "serde_json", + "superboring", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.9", + "signature", +] + +[[package]] +name = "keystream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" + +[[package]] +name = "kqueue" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "ledger-apdu" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" +dependencies = [ + "arrayref", + "no-std-compat", + "snafu", +] + +[[package]] +name = "ledger-transport" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" +dependencies = [ + "async-trait", + "ledger-apdu", +] + +[[package]] +name = "ledger-transport-hid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" +dependencies = [ + "byteorder", + "cfg-if", + "hex", + "hidapi", + "ledger-transport", + "libc", + "log", + "thiserror 1.0.69", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags 2.9.4", + "libc", + "redox_syscall", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "lioness" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" +dependencies = [ + "arrayref", + "blake2 0.8.1", + "chacha", + "keystream", +] + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "macroific" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89f276537b4b8f981bf1c13d79470980f71134b7bdcc5e6e911e910e556b0285" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "macroific_macro", +] + +[[package]] +name = "macroific_attr_parse" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad4023761b45fcd36abed8fb7ae6a80456b0a38102d55e89a57d9a594a236be9" +dependencies = [ + "proc-macro2", + "quote", + "sealed", + "syn 2.0.106", +] + +[[package]] +name = "macroific_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a7594d3c14916fa55bef7e9d18c5daa9ed410dd37504251e4b75bbdeec33e3" +dependencies = [ + "proc-macro2", + "quote", + "sealed", + "syn 2.0.106", +] + +[[package]] +name = "macroific_macro" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da6f2ed796261b0a74e2b52b42c693bb6dee1effba3a482c49592659f824b3b" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "markup5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minicov" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +dependencies = [ + "cc", + "walkdir", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.59.0", +] + +[[package]] +name = "mix-fetch-wasm" +version = "1.4.0-rc.0" +dependencies = [ + "async-trait", + "futures", + "js-sys", + "nym-bin-common", + "nym-http-api-client", + "nym-ordered-buffer", + "nym-service-providers-common", + "nym-socks5-requests", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "tokio", + "tsify", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-client-core", + "wasm-utils", +] + +[[package]] +name = "mixnet-connectivity-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "futures", + "nym-bin-common", + "nym-crypto", + "nym-network-defaults", + "nym-sdk", + "tokio", + "tracing", +] + +[[package]] +name = "mock_instant" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" + +[[package]] +name = "moka" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" +dependencies = [ + "async-lock", + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "equivalent", + "event-listener 5.4.1", + "futures-util", + "parking_lot", + "portable-atomic", + "rustc_version 0.4.1", + "smallvec", + "tagptr", + "uuid", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.3.1", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-core" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" +dependencies = [ + "paste", +] + +[[package]] +name = "netlink-packet-generic" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-core 0.7.0", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-generic" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f891b2e0054cac5a684a06628f59568f841c93da4e551239da6e518f539e775" +dependencies = [ + "netlink-packet-core 0.8.1", +] + +[[package]] +name = "netlink-packet-route" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" +dependencies = [ + "anyhow", + "bitflags 2.9.4", + "byteorder", + "libc", + "log", + "netlink-packet-core 0.7.0", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d83370a96813d7c977f8b63054f1162df6e5784f1c598d689236564fb5a6f2" +dependencies = [ + "anyhow", + "bitflags 2.9.4", + "byteorder", + "libc", + "log", + "netlink-packet-core 0.7.0", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-packet-wireguard" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598962d9067d3153a00106da10e7b8276cea68f396f4a22f5b4a079270d92e29" +dependencies = [ + "libc", + "log", + "netlink-packet-core 0.8.1", + "netlink-packet-generic 0.4.0", +] + +[[package]] +name = "netlink-proto" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" +dependencies = [ + "bytes", + "futures", + "log", + "netlink-packet-core 0.7.0", + "netlink-sys", + "thiserror 2.0.17", +] + +[[package]] +name = "netlink-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +dependencies = [ + "bytes", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "newline-converter" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "notify" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" +dependencies = [ + "bitflags 1.3.2", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "mio 0.8.11", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "nym-api" +version = "1.1.67" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "axum-test", + "bincode", + "bip39", + "bs58", + "cfg-if", + "clap", + "console-subscriber", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw3", + "cw4", + "dashmap", + "dotenvy", + "futures", + "humantime-serde", + "moka", + "nym-api-requests", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-cache", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-credential-storage", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-dkg", + "nym-ecash-contract-common", + "nym-ecash-signer-check", + "nym-ecash-time", + "nym-gateway-client", + "nym-http-api-client", + "nym-http-api-common", + "nym-mixnet-contract-common", + "nym-node-requests", + "nym-node-tester-utils", + "nym-pemstore", + "nym-serde-helpers", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-ticketbooks-merkle", + "nym-topology", + "nym-types", + "nym-validator-client", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.24", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx", + "tempfile", + "tendermint", + "test-with", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "ts-rs", + "url", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", + "zeroize", +] + +[[package]] +name = "nym-api-requests" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmrs", + "cosmwasm-std", + "ecdsa", + "hex", + "humantime-serde", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-signer-check-types", + "nym-ecash-time", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-node-requests", + "nym-noise-keys", + "nym-serde-helpers", + "nym-ticketbooks-merkle", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tracing", + "ts-rs", + "utoipa", +] + +[[package]] +name = "nym-apple-network" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "block2", + "dispatch2", + "nix 0.30.1", + "objc2", + "objc2-foundation", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-async-file-watcher" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "notify", + "tokio", +] + +[[package]] +name = "nym-authenticator-client" +version = "0.1.0" +dependencies = [ + "bincode", + "futures", + "nym-authenticator-requests", + "nym-bandwidth-controller", + "nym-credentials-interface", + "nym-crypto", + "nym-registration-common", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-validator-client", + "nym-wireguard-types", + "semver 1.0.27", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-authenticator-requests" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bincode", + "hmac", + "nym-credentials-interface", + "nym-crypto", + "nym-network-defaults", + "nym-service-provider-requests-common", + "nym-sphinx", + "nym-wireguard-types", + "rand 0.8.5", + "semver 1.0.27", + "serde", + "sha2 0.10.9", + "strum_macros", + "thiserror 2.0.17", + "x25519-dalek", +] + +[[package]] +name = "nym-bandwidth-controller" +version = "0.1.0" +dependencies = [ + "async-trait", + "bip39", + "log", + "nym-credential-storage", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", + "nym-network-defaults", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "thiserror 2.0.17", + "url", + "zeroize", +] + +[[package]] +name = "nym-bin-common" +version = "0.6.0" +dependencies = [ + "clap", + "clap_complete", + "clap_complete_fig", + "const-str", + "log", + "opentelemetry", + "opentelemetry-jaeger", + "schemars 0.8.22", + "serde", + "serde_json", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "tracing-tree", + "utoipa", + "vergen", +] + +[[package]] +name = "nym-cache" +version = "0.1.0" +dependencies = [ + "tokio", +] + +[[package]] +name = "nym-cli" +version = "1.1.64" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bip39", + "bs58", + "clap", + "clap_complete", + "clap_complete_fig", + "dotenvy", + "inquire", + "log", + "nym-bin-common", + "nym-cli-commands", + "nym-network-defaults", + "nym-validator-client", + "serde", + "serde_json", + "tap", + "tokio", +] + +[[package]] +name = "nym-cli-commands" +version = "1.0.0" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bip39", + "bs58", + "cfg-if", + "clap", + "colored", + "comfy-table", + "cosmrs", + "cosmwasm-std", + "csv", + "cw-utils", + "futures", + "handlebars", + "humantime-serde", + "inquire", + "k256", + "log", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-client-core", + "nym-coconut-dkg-common", + "nym-config", + "nym-contracts-common", + "nym-credential-proxy-requests", + "nym-credential-storage", + "nym-credential-utils", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", + "nym-http-api-client", + "nym-id", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-network-defaults", + "nym-pemstore", + "nym-sphinx", + "nym-types", + "nym-validator-client", + "nym-vesting-contract-common", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "toml 0.8.23", + "url", + "zeroize", +] + +[[package]] +name = "nym-client" +version = "1.1.64" +dependencies = [ + "bs58", + "clap", + "dirs", + "futures", + "log", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-client-core", + "nym-client-websocket-requests", + "nym-config", + "nym-credential-storage", + "nym-credentials", + "nym-crypto", + "nym-gateway-requests", + "nym-id", + "nym-network-defaults", + "nym-pemstore", + "nym-sphinx", + "nym-task", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tungstenite", + "url", + "zeroize", +] + +[[package]] +name = "nym-client-core" +version = "1.1.15" +dependencies = [ + "async-trait", + "base64 0.21.7", + "bincode", + "bs58", + "cfg-if", + "clap", + "comfy-table", + "futures", + "gloo-timers", + "http-body-util", + "humantime", + "hyper 1.7.0", + "hyper-util", + "nym-bandwidth-controller", + "nym-client-core-config-types", + "nym-client-core-gateways-storage", + "nym-client-core-surb-storage", + "nym-credential-storage", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", + "nym-gateway-client", + "nym-gateway-requests", + "nym-http-api-client", + "nym-id", + "nym-mixnet-client", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-nonexhaustive-delayqueue", + "nym-pemstore", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "sha2 0.10.9", + "si-scale", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "tungstenite 0.20.1", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-client-core-config-types" +version = "0.1.0" +dependencies = [ + "humantime-serde", + "nym-config", + "nym-pemstore", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-statistics-common", + "serde", + "thiserror 2.0.17", + "url", +] + +[[package]] +name = "nym-client-core-gateways-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "cosmrs", + "nym-crypto", + "nym-gateway-requests", + "serde", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-client-core-surb-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "dashmap", + "nym-crypto", + "nym-sphinx", + "nym-task", + "sqlx", + "sqlx-pool-guard", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-client-wasm" +version = "1.4.0-rc.0" +dependencies = [ + "anyhow", + "futures", + "js-sys", + "nym-bin-common", + "nym-node-tester-utils", + "nym-node-tester-wasm", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "wasm-client-core", + "wasm-utils", +] + +[[package]] +name = "nym-client-websocket-requests" +version = "0.1.0" +dependencies = [ + "nym-sphinx", + "serde", + "serde_json", +] + +[[package]] +name = "nym-coconut-dkg-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw4", + "nym-contracts-common", + "nym-multisig-contract-common", +] + +[[package]] +name = "nym-common" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "tracing", + "tracing-test", +] + +[[package]] +name = "nym-compact-ecash" +version = "0.1.0" +dependencies = [ + "bincode", + "bls12_381", + "bs58", + "cfg-if", + "criterion", + "digest 0.10.7", + "ff", + "group", + "itertools 0.14.0", + "nym-network-defaults", + "nym-pemstore", + "rand 0.8.5", + "rayon", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-config" +version = "0.1.0" +dependencies = [ + "dirs", + "handlebars", + "log", + "nym-network-defaults", + "serde", + "thiserror 2.0.17", + "toml 0.8.23", + "url", +] + +[[package]] +name = "nym-contracts-common" +version = "0.5.0" +dependencies = [ + "anyhow", + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "serde", + "serde_json", + "thiserror 2.0.17", + "utoipa", + "vergen", +] + +[[package]] +name = "nym-contracts-common-testing" +version = "0.1.0" +dependencies = [ + "anyhow", + "cosmwasm-std", + "cw-multi-test", + "cw-storage-plus", + "nym-contracts-common", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", +] + +[[package]] +name = "nym-cpp-ffi" +version = "0.1.2" +dependencies = [ + "anyhow", + "bs58", + "lazy_static", + "nym-bin-common", + "nym-ffi-shared", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "tokio", +] + +[[package]] +name = "nym-credential-proxy" +version = "0.3.0" +dependencies = [ + "anyhow", + "axum", + "bip39", + "bs58", + "cfg-if", + "clap", + "futures", + "humantime", + "nym-bin-common", + "nym-compact-ecash", + "nym-config", + "nym-credential-proxy-lib", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-signer-check", + "nym-http-api-common", + "nym-network-defaults", + "nym-validator-client", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "strum", + "strum_macros", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "url", + "utoipa", + "utoipa-swagger-ui", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-credential-proxy-lib" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "bip39", + "bs58", + "futures", + "humantime", + "nym-cache", + "nym-compact-ecash", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-signer-check", + "nym-network-defaults", + "nym-validator-client", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "strum", + "strum_macros", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tracing", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-credential-proxy-requests" +version = "0.1.0" +dependencies = [ + "async-trait", + "nym-credentials", + "nym-credentials-interface", + "nym-http-api-client", + "nym-http-api-common", + "nym-serde-helpers", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "serde_json", + "time", + "tsify", + "utoipa", + "uuid", + "wasm-bindgen", + "wasmtimer", +] + +[[package]] +name = "nym-credential-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "log", + "nym-compact-ecash", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", + "nym-test-utils", + "serde", + "sqlx", + "sqlx-pool-guard", + "thiserror 2.0.17", + "tokio", + "zeroize", +] + +[[package]] +name = "nym-credential-utils" +version = "0.1.0" +dependencies = [ + "log", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config", + "nym-credential-storage", + "nym-credentials", + "nym-credentials-interface", + "nym-ecash-time", + "nym-validator-client", + "thiserror 2.0.17", + "time", + "tokio", +] + +[[package]] +name = "nym-credential-verification" +version = "0.1.0" +dependencies = [ + "async-trait", + "bs58", + "cosmwasm-std", + "cw-utils", + "dyn-clone", + "futures", + "nym-api-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-ecash-contract-common", + "nym-gateway-requests", + "nym-gateway-storage", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "si-scale", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-credentials" +version = "0.1.0" +dependencies = [ + "bincode", + "bls12_381", + "cosmrs", + "log", + "nym-api-requests", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", + "nym-http-api-client", + "nym-network-defaults", + "nym-serde-helpers", + "nym-validator-client", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "zeroize", +] + +[[package]] +name = "nym-credentials-interface" +version = "0.1.0" +dependencies = [ + "bls12_381", + "nym-compact-ecash", + "nym-ecash-time", + "nym-network-defaults", + "rand 0.8.5", + "serde", + "strum", + "strum_macros", + "thiserror 2.0.17", + "time", + "utoipa", +] + +[[package]] +name = "nym-crypto" +version = "0.4.0" +dependencies = [ + "aead", + "aes", + "aes-gcm-siv", + "base64 0.22.1", + "blake3", + "bs58", + "cipher", + "ctr", + "digest 0.10.7", + "ed25519-dalek", + "generic-array 0.14.9", + "hkdf", + "hmac", + "jwt-simple", + "nym-pemstore", + "nym-sphinx-types", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_bytes", + "sha2 0.10.9", + "subtle-encoding", + "thiserror 2.0.17", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-dkg" +version = "0.1.0" +dependencies = [ + "bitvec", + "bls12_381", + "bs58", + "criterion", + "ff", + "group", + "lazy_static", + "nym-contracts-common", + "nym-pemstore", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", + "serde_derive", + "sha2 0.10.9", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-ecash-contract-common" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "nym-multisig-contract-common", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-ecash-signer-check" +version = "0.1.0" +dependencies = [ + "futures", + "nym-ecash-signer-check-types", + "nym-http-api-client", + "nym-network-defaults", + "nym-validator-client", + "semver 1.0.27", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nym-ecash-signer-check-types" +version = "0.1.0" +dependencies = [ + "nym-coconut-dkg-common", + "nym-crypto", + "semver 1.0.27", + "serde", + "thiserror 2.0.17", + "time", + "tracing", + "url", + "utoipa", +] + +[[package]] +name = "nym-ecash-time" +version = "0.1.0" +dependencies = [ + "nym-compact-ecash", + "time", +] + +[[package]] +name = "nym-exit-policy" +version = "0.1.0" +dependencies = [ + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "tracing", + "utoipa", +] + +[[package]] +name = "nym-ffi-shared" +version = "0.2.1" +dependencies = [ + "anyhow", + "bs58", + "lazy_static", + "nym-bin-common", + "nym-crypto", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "tokio", + "uniffi", + "uniffi_build", +] + +[[package]] +name = "nym-gateway" +version = "1.1.36" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bip39", + "bs58", + "dashmap", + "defguard_wireguard_rs", + "fastrand 2.3.0", + "futures", + "ipnetwork", + "mock_instant", + "nym-api-requests", + "nym-authenticator-requests", + "nym-client-core", + "nym-credential-verification", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-gateway-requests", + "nym-gateway-stats-storage", + "nym-gateway-storage", + "nym-id", + "nym-ip-packet-router", + "nym-mixnet-client", + "nym-mixnode-common", + "nym-network-defaults", + "nym-network-requester", + "nym-node-metrics", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-types", + "nym-validator-client", + "nym-wireguard", + "nym-wireguard-private-metadata-server", + "nym-wireguard-types", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-gateway-client" +version = "0.1.0" +dependencies = [ + "futures", + "getrandom 0.2.16", + "gloo-utils 0.2.0", + "nym-bandwidth-controller", + "nym-credential-storage", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-gateway-requests", + "nym-http-api-client", + "nym-network-defaults", + "nym-pemstore", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "serde", + "si-scale", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tracing", + "tungstenite 0.20.1", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-gateway-directory" +version = "0.0.0" +dependencies = [ + "futures", + "itertools 0.14.0", + "nym-client-core", + "nym-common", + "nym-http-api-client", + "nym-offline-monitor", + "nym-sphinx", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "serde", + "strum", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nym-gateway-requests" +version = "0.1.0" +dependencies = [ + "anyhow", + "bs58", + "futures", + "generic-array 0.14.9", + "nym-compact-ecash", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-pemstore", + "nym-serde-helpers", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-test-utils", + "rand 0.8.5", + "serde", + "serde_json", + "strum", + "subtle 2.6.1", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "tungstenite 0.20.1", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-gateway-stats-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "nym-node-metrics", + "nym-sphinx", + "nym-statistics-common", + "sqlx", + "strum", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-gateway-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "defguard_wireguard_rs", + "dyn-clone", + "nym-credentials-interface", + "nym-gateway-requests", + "nym-sphinx", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-go-ffi" +version = "0.2.2" +dependencies = [ + "anyhow", + "lazy_static", + "nym-bin-common", + "nym-crypto", + "nym-ffi-shared", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "thiserror 2.0.17", + "tokio", + "uniffi", + "uniffi_build", +] + +[[package]] +name = "nym-group-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cw-controllers", + "cw4", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "nym-http-api-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "bincode", + "bytes", + "cfg-if", + "encoding_rs", + "hickory-resolver", + "http 1.3.1", + "inventory", + "itertools 0.14.0", + "mime", + "nym-bin-common", + "nym-http-api-client-macro", + "nym-http-api-common", + "nym-network-defaults", + "once_cell", + "reqwest 0.12.24", + "serde", + "serde_json", + "serde_plain", + "serde_yaml", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", + "wasmtimer", +] + +[[package]] +name = "nym-http-api-client-macro" +version = "0.1.0" +dependencies = [ + "nym-http-api-client", + "proc-macro-crate", + "proc-macro2", + "quote", + "reqwest 0.12.24", + "syn 2.0.106", + "uuid", +] + +[[package]] +name = "nym-http-api-common" +version = "0.1.0" +dependencies = [ + "axum", + "axum-client-ip", + "bincode", + "bytes", + "colored", + "futures", + "mime", + "serde", + "serde_json", + "serde_yaml", + "subtle 2.6.1", + "time", + "tower 0.5.2", + "tracing", + "utoipa", + "zeroize", +] + +[[package]] +name = "nym-id" +version = "0.1.0" +dependencies = [ + "nym-credential-storage", + "nym-credentials", + "thiserror 2.0.17", + "time", + "tracing", + "zeroize", +] + +[[package]] +name = "nym-id-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "bs58", + "clap", + "nym-bin-common", + "nym-credential-storage", + "nym-id", + "tokio", + "tracing", +] + +[[package]] +name = "nym-inclusion-probability" +version = "0.1.0" +dependencies = [ + "log", + "rand 0.8.5", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-ip-packet-client" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "futures", + "nym-gateway-directory", + "nym-ip-packet-requests", + "nym-sdk", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-ip-packet-requests" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "nym-bin-common", + "nym-crypto", + "nym-service-provider-requests-common", + "nym-sphinx", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "nym-ip-packet-router" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bs58", + "bytes", + "clap", + "etherparse", + "futures", + "log", + "nym-bin-common", + "nym-client-core", + "nym-config", + "nym-crypto", + "nym-exit-policy", + "nym-id", + "nym-ip-packet-requests", + "nym-network-defaults", + "nym-network-requester", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-service-providers-common", + "nym-sphinx", + "nym-task", + "nym-tun", + "nym-types", + "nym-wireguard", + "nym-wireguard-types", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tun", + "tokio-util", + "url", +] + +[[package]] +name = "nym-ledger" +version = "0.1.0" +dependencies = [ + "bip32", + "k256", + "ledger-transport", + "ledger-transport-hid", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-metrics" +version = "0.1.0" +dependencies = [ + "dashmap", + "lazy_static", + "prometheus", + "tracing", +] + +[[package]] +name = "nym-mixnet-client" +version = "0.1.0" +dependencies = [ + "dashmap", + "futures", + "nym-crypto", + "nym-noise", + "nym-sphinx", + "nym-task", + "rand 0.8.5", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-mixnet-contract-common" +version = "0.6.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-storage-plus", + "cw2", + "humantime-serde", + "nym-contracts-common", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "serde_repr", + "thiserror 2.0.17", + "time", + "ts-rs", + "utoipa", +] + +[[package]] +name = "nym-mixnode-common" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "humantime-serde", + "log", + "nym-crypto", + "nym-metrics", + "nym-network-defaults", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-types", + "nym-task", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "nym-multisig-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "cw3", + "cw4", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-network-defaults" +version = "0.1.0" +dependencies = [ + "cargo_metadata 0.19.2", + "dotenvy", + "log", + "regex", + "schemars 0.8.22", + "serde", + "url", + "utoipa", +] + +[[package]] +name = "nym-network-monitor" +version = "1.0.2" +dependencies = [ + "anyhow", + "axum", + "clap", + "dashmap", + "futures", + "log", + "nym-bin-common", + "nym-client-core", + "nym-crypto", + "nym-gateway-requests", + "nym-http-api-client", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-sdk", + "nym-sphinx", + "nym-topology", + "nym-types", + "nym-validator-client", + "petgraph", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.24", + "serde", + "serde_json", + "tokio", + "tokio-postgres", + "tokio-util", + "utoipa", + "utoipa-swagger-ui", +] + +[[package]] +name = "nym-network-requester" +version = "1.1.65" +dependencies = [ + "addr", + "anyhow", + "async-trait", + "bs58", + "clap", + "dirs", + "futures", + "humantime-serde", + "ipnetwork", + "log", + "nym-async-file-watcher", + "nym-bin-common", + "nym-client-core", + "nym-client-websocket-requests", + "nym-config", + "nym-credential-storage", + "nym-credentials", + "nym-crypto", + "nym-exit-policy", + "nym-id", + "nym-network-defaults", + "nym-ordered-buffer", + "nym-sdk", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", + "nym-sphinx", + "nym-task", + "nym-types", + "publicsuffix", + "rand 0.8.5", + "regex", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tungstenite", + "tokio-util", + "url", + "zeroize", +] + +[[package]] +name = "nym-node" +version = "1.19.0" +dependencies = [ + "anyhow", + "arc-swap", + "arrayref", + "async-trait", + "axum", + "bip39", + "blake2 0.8.1", + "bloomfilter", + "bs58", + "cargo_metadata 0.19.2", + "celes", + "cfg-if", + "chacha", + "clap", + "colored", + "console-subscriber", + "criterion", + "csv", + "cupid", + "futures", + "hkdf", + "human-repr", + "humantime-serde", + "indicatif", + "ipnetwork", + "lioness", + "nym-bin-common", + "nym-client-core-config-types", + "nym-config", + "nym-crypto", + "nym-gateway", + "nym-gateway-stats-storage", + "nym-http-api-client", + "nym-http-api-common", + "nym-ip-packet-router", + "nym-metrics", + "nym-mixnet-client", + "nym-network-requester", + "nym-node-metrics", + "nym-node-requests", + "nym-noise", + "nym-noise-keys", + "nym-nonexhaustive-delayqueue", + "nym-pemstore", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-types", + "nym-validator-client", + "nym-verloc", + "nym-wireguard", + "nym-wireguard-types", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "sha2 0.10.9", + "sysinfo", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "toml 0.8.23", + "tower-http 0.5.2", + "tracing", + "tracing-indicatif", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "zeroize", +] + +[[package]] +name = "nym-node-metrics" +version = "0.1.0" +dependencies = [ + "dashmap", + "futures", + "nym-metrics", + "nym-statistics-common", + "strum", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-node-requests" +version = "0.1.0" +dependencies = [ + "async-trait", + "celes", + "humantime", + "humantime-serde", + "nym-bin-common", + "nym-crypto", + "nym-exit-policy", + "nym-http-api-client", + "nym-noise-keys", + "nym-wireguard-types", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "serde", + "serde_json", + "strum", + "strum_macros", + "thiserror 2.0.17", + "time", + "tokio", + "utoipa", +] + +[[package]] +name = "nym-node-status-agent" +version = "1.0.7" +dependencies = [ + "anyhow", + "clap", + "futures", + "nym-bin-common", + "nym-crypto", + "nym-node-status-client", + "rand 0.8.5", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "nym-node-status-api" +version = "4.0.5" +dependencies = [ + "ammonia", + "anyhow", + "axum", + "axum-test", + "bip39", + "bs58", + "celes", + "clap", + "cosmwasm-std", + "futures-util", + "humantime", + "itertools 0.14.0", + "moka", + "nym-bin-common", + "nym-contracts-common", + "nym-credential-proxy-lib", + "nym-credentials", + "nym-crypto", + "nym-ecash-time", + "nym-http-api-client", + "nym-http-api-common", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-node-metrics", + "nym-node-requests", + "nym-node-status-client", + "nym-serde-helpers", + "nym-statistics-common", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "rand_chacha 0.3.1", + "regex", + "reqwest 0.12.24", + "semver 1.0.27", + "serde", + "serde_json", + "serde_json_path", + "sqlx", + "strum", + "strum_macros", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-log 0.2.0", + "tracing-subscriber", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", + "zeroize", +] + +[[package]] +name = "nym-node-status-client" +version = "0.2.0" +dependencies = [ + "anyhow", + "bincode", + "bs58", + "nym-credentials", + "nym-crypto", + "reqwest 0.12.24", + "serde", + "serde_json", + "time", + "tracing", +] + +[[package]] +name = "nym-node-tester-utils" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "nym-crypto", + "nym-sphinx", + "nym-sphinx-params", + "nym-task", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "wasm-utils", +] + +[[package]] +name = "nym-node-tester-wasm" +version = "1.3.0-rc.0" +dependencies = [ + "futures", + "js-sys", + "nym-node-tester-utils", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "tokio", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-client-core", + "wasm-utils", + "wasmtimer", +] + +[[package]] +name = "nym-noise" +version = "0.1.0" +dependencies = [ + "anyhow", + "arc-swap", + "bytes", + "futures", + "nym-crypto", + "nym-noise-keys", + "nym-test-utils", + "pin-project", + "rand_chacha 0.3.1", + "sha2 0.10.9", + "snow", + "strum", + "strum_macros", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-noise-keys" +version = "0.1.0" +dependencies = [ + "nym-crypto", + "schemars 0.8.22", + "serde", + "utoipa", +] + +[[package]] +name = "nym-nonexhaustive-delayqueue" +version = "0.1.0" +dependencies = [ + "tokio", + "tokio-stream", + "tokio-util", + "wasmtimer", +] + +[[package]] +name = "nym-nr-query" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "log", + "nym-bin-common", + "nym-network-defaults", + "nym-sdk", + "nym-service-providers-common", + "nym-socks5-requests", + "serde", + "tokio", +] + +[[package]] +name = "nym-offline-monitor" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "async-trait", + "debounced", + "dispatch2", + "futures", + "nym-apple-network", + "nym-common", + "nym-routing", + "nym-windows", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-ordered-buffer" +version = "0.1.0" +dependencies = [ + "log", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-outfox" +version = "0.1.0" +dependencies = [ + "blake3", + "chacha20", + "chacha20poly1305", + "criterion", + "fastrand 2.3.0", + "getrandom 0.2.16", + "log", + "rand 0.8.5", + "rayon", + "sphinx-packet", + "thiserror 2.0.17", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-pemstore" +version = "0.3.0" +dependencies = [ + "pem", + "tracing", + "zeroize", +] + +[[package]] +name = "nym-performance-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "nym-contracts-common", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-pool-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", + "time", +] + +[[package]] +name = "nym-registration-client" +version = "0.1.0" +dependencies = [ + "nym-authenticator-client", + "nym-bandwidth-controller", + "nym-credential-storage", + "nym-credentials-interface", + "nym-ip-packet-client", + "nym-registration-common", + "nym-sdk", + "nym-validator-client", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-registration-common" +version = "0.1.0" +dependencies = [ + "nym-authenticator-requests", + "nym-crypto", + "nym-ip-packet-requests", + "nym-sphinx", + "tokio-util", +] + +[[package]] +name = "nym-routing" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "bitflags 2.9.4", + "futures", + "ipnetwork", + "libc", + "netlink-packet-core 0.7.0", + "netlink-packet-route 0.24.0", + "netlink-sys", + "nix 0.30.1", + "nym-common", + "nym-windows", + "rtnetlink", + "system-configuration 0.6.1", + "thiserror 2.0.17", + "tokio", + "tracing", + "widestring", + "windows 0.59.0", +] + +[[package]] +name = "nym-sdk" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bip39", + "bytecodec", + "bytes", + "clap", + "dashmap", + "dirs", + "dotenvy", + "futures", + "hex", + "http 1.3.1", + "httpcodec", + "log", + "nym-bandwidth-controller", + "nym-bin-common", + "nym-client-core", + "nym-credential-storage", + "nym-credential-utils", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-gateway-directory", + "nym-gateway-requests", + "nym-http-api-client", + "nym-ip-packet-requests", + "nym-network-defaults", + "nym-ordered-buffer", + "nym-service-providers-common", + "nym-socks5-client-core", + "nym-socks5-requests", + "nym-sphinx", + "nym-sphinx-addressing", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client", + "parking_lot", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "toml 0.8.23", + "tracing", + "tracing-subscriber", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-serde-helpers" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bs58", + "hex", + "serde", + "time", +] + +[[package]] +name = "nym-service-provider-requests-common" +version = "0.1.0" +dependencies = [ + "bincode", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-service-providers-common" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "log", + "nym-bin-common", + "nym-sdk", + "nym-socks5-requests", + "nym-sphinx-anonymous-replies", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", +] + +[[package]] +name = "nym-signers-monitor" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "humantime", + "itertools 0.14.0", + "nym-bin-common", + "nym-ecash-signer-check", + "nym-network-defaults", + "nym-task", + "nym-validator-client", + "time", + "tokio", + "tracing", + "url", + "zulip-client", +] + +[[package]] +name = "nym-socks5-client" +version = "1.1.64" +dependencies = [ + "bs58", + "clap", + "log", + "nym-bin-common", + "nym-client-core", + "nym-config", + "nym-credential-storage", + "nym-credentials", + "nym-crypto", + "nym-gateway-requests", + "nym-id", + "nym-network-defaults", + "nym-ordered-buffer", + "nym-pemstore", + "nym-socks5-client-core", + "nym-sphinx", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", + "time", + "tokio", + "url", + "zeroize", +] + +[[package]] +name = "nym-socks5-client-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "dirs", + "futures", + "log", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config", + "nym-contracts-common", + "nym-credential-storage", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", + "nym-sphinx", + "nym-task", + "nym-validator-client", + "pin-project", + "rand 0.8.5", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "tap", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "nym-socks5-proxy-helpers" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "log", + "nym-ordered-buffer", + "nym-socks5-requests", + "nym-task", + "tokio", + "tokio-test", + "tokio-util", +] + +[[package]] +name = "nym-socks5-requests" +version = "0.1.0" +dependencies = [ + "bincode", + "log", + "nym-exit-policy", + "nym-service-providers-common", + "nym-sphinx-addressing", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx" +version = "0.1.0" +dependencies = [ + "bincode", + "log", + "nym-crypto", + "nym-metrics", + "nym-mixnet-contract-common", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-anonymous-replies", + "nym-sphinx-chunking", + "nym-sphinx-cover", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "serde", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-sphinx-acknowledgements" +version = "0.1.0" +dependencies = [ + "generic-array 0.14.9", + "nym-crypto", + "nym-pemstore", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-topology", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-sphinx-addressing" +version = "0.1.0" +dependencies = [ + "bincode", + "nym-crypto", + "nym-sphinx-types", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-anonymous-replies" +version = "0.1.0" +dependencies = [ + "bs58", + "nym-crypto", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "thiserror 2.0.17", + "tracing", + "wasm-bindgen", +] + +[[package]] +name = "nym-sphinx-chunking" +version = "0.1.0" +dependencies = [ + "dashmap", + "log", + "nym-crypto", + "nym-metrics", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-types", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "utoipa", +] + +[[package]] +name = "nym-sphinx-cover" +version = "0.1.0" +dependencies = [ + "nym-crypto", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-chunking", + "nym-sphinx-forwarding", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types", + "nym-topology", + "rand 0.8.5", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-forwarding" +version = "0.1.0" +dependencies = [ + "nym-sphinx-addressing", + "nym-sphinx-anonymous-replies", + "nym-sphinx-params", + "nym-sphinx-types", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-framing" +version = "0.1.0" +dependencies = [ + "bytes", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-params", + "nym-sphinx-types", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-sphinx-params" +version = "0.1.0" +dependencies = [ + "nym-crypto", + "nym-sphinx-types", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-routing" +version = "0.1.0" +dependencies = [ + "nym-sphinx-addressing", + "nym-sphinx-types", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-types" +version = "0.2.0" +dependencies = [ + "nym-outfox", + "sphinx-packet", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-statistics-api" +version = "0.2.1" +dependencies = [ + "anyhow", + "axum", + "axum-client-ip", + "axum-extra", + "celes", + "clap", + "nym-bin-common", + "nym-http-api-client", + "nym-http-api-common", + "nym-statistics-common", + "nym-task", + "nym-validator-client", + "serde", + "serde_json", + "sqlx", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nym-statistics-common" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "nym-credentials-interface", + "nym-crypto", + "nym-metrics", + "nym-sphinx", + "nym-task", + "serde", + "serde_json", + "sha2 0.10.9", + "si-scale", + "strum", + "strum_macros", + "sysinfo", + "thiserror 2.0.17", + "time", + "tokio", + "utoipa", + "wasmtimer", +] + +[[package]] +name = "nym-store-cipher" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "argon2", + "generic-array 0.14.9", + "getrandom 0.2.16", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-task" +version = "0.1.0" +dependencies = [ + "anyhow", + "cfg-if", + "futures", + "log", + "nym-test-utils", + "serde", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasmtimer", +] + +[[package]] +name = "nym-test-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "futures", + "rand_chacha 0.3.1", + "tokio", +] + +[[package]] +name = "nym-ticketbooks-merkle" +version = "0.1.0" +dependencies = [ + "nym-credentials-interface", + "nym-serde-helpers", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rs_merkle", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "time", + "utoipa", +] + +[[package]] +name = "nym-topology" +version = "0.1.0" +dependencies = [ + "async-trait", + "nym-api-requests", + "nym-crypto", + "nym-mixnet-contract-common", + "nym-sphinx-addressing", + "nym-sphinx-types", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tracing", + "tsify", + "wasm-bindgen", + "wasm-utils", +] + +[[package]] +name = "nym-tun" +version = "0.1.0" +dependencies = [ + "etherparse", + "log", + "nym-wireguard-types", + "thiserror 2.0.17", + "tokio", + "tokio-tun", +] + +[[package]] +name = "nym-types" +version = "1.0.0" +dependencies = [ + "base64 0.22.1", + "cosmrs", + "cosmwasm-std", + "eyre", + "hmac", + "itertools 0.14.0", + "log", + "nym-config", + "nym-crypto", + "nym-mixnet-contract-common", + "nym-validator-client", + "nym-vesting-contract-common", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "strum", + "strum_macros", + "tempfile", + "thiserror 2.0.17", + "ts-rs", + "url", + "utoipa", + "x25519-dalek", +] + +[[package]] +name = "nym-upgrade-mode-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "jwt-simple", + "nym-crypto", + "nym-http-api-client", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tracing", +] + +[[package]] +name = "nym-validator-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bip32", + "bip39", + "colored", + "cosmrs", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "cw3", + "cw4", + "eyre", + "flate2", + "futures", + "itertools 0.14.0", + "nym-api-requests", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-ecash-contract-common", + "nym-group-contract-common", + "nym-http-api-client", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-network-defaults", + "nym-performance-contract-common", + "nym-serde-helpers", + "nym-vesting-contract-common", + "prost", + "reqwest 0.12.24", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "ts-rs", + "url", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-validator-rewarder" +version = "0.3.0" +dependencies = [ + "anyhow", + "bip39", + "clap", + "cosmwasm-std", + "futures", + "humantime", + "humantime-serde", + "nym-bin-common", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", + "nym-http-api-client", + "nym-network-defaults", + "nym-pemstore", + "nym-serde-helpers", + "nym-task", + "nym-ticketbooks-merkle", + "nym-validator-client", + "nyxd-scraper", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "serde_with", + "sha2 0.10.9", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-verloc" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "humantime", + "nym-api-requests", + "nym-crypto", + "nym-http-api-client", + "nym-task", + "nym-validator-client", + "rand 0.8.5", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-vesting-contract-common" +version = "0.7.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "nym-contracts-common", + "nym-mixnet-contract-common", + "serde", + "thiserror 2.0.17", + "ts-rs", +] + +[[package]] +name = "nym-vpn-api-lib-wasm" +version = "0.1.0" +dependencies = [ + "bs58", + "getrandom 0.2.16", + "js-sys", + "nym-bin-common", + "nym-compact-ecash", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_json", + "thiserror 2.0.17", + "time", + "tsify", + "wasm-bindgen", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "nym-wallet-types" +version = "1.0.0" +dependencies = [ + "cosmrs", + "cosmwasm-std", + "hex-literal", + "nym-config", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-types", + "nym-validator-client", + "nym-vesting-contract-common", + "serde", + "serde_json", + "strum", + "strum_macros", + "ts-rs", +] + +[[package]] +name = "nym-windows" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "bitflags 2.9.4", + "futures", + "thiserror 2.0.17", + "tokio", + "tracing", + "windows 0.59.0", +] + +[[package]] +name = "nym-wireguard" +version = "0.1.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bincode", + "chrono", + "dashmap", + "defguard_wireguard_rs", + "dyn-clone", + "futures", + "ip_network", + "log", + "nym-authenticator-requests", + "nym-credential-verification", + "nym-credentials-interface", + "nym-crypto", + "nym-gateway-requests", + "nym-gateway-storage", + "nym-network-defaults", + "nym-node-metrics", + "nym-task", + "nym-wireguard-types", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tracing", + "x25519-dalek", +] + +[[package]] +name = "nym-wireguard-private-metadata-client" +version = "1.0.0" +dependencies = [ + "async-trait", + "nym-http-api-client", + "nym-wireguard-private-metadata-shared", + "tracing", +] + +[[package]] +name = "nym-wireguard-private-metadata-server" +version = "1.0.0" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "futures", + "nym-credential-verification", + "nym-credentials-interface", + "nym-http-api-common", + "nym-wireguard", + "nym-wireguard-private-metadata-shared", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "utoipa", + "utoipa-swagger-ui", +] + +[[package]] +name = "nym-wireguard-private-metadata-shared" +version = "1.0.0" +dependencies = [ + "axum", + "bincode", + "nym-credentials-interface", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", + "utoipa", +] + +[[package]] +name = "nym-wireguard-private-metadata-tests" +version = "1.0.0" +dependencies = [ + "async-trait", + "axum", + "nym-credential-verification", + "nym-credentials-interface", + "nym-http-api-client", + "nym-http-api-common", + "nym-wireguard", + "nym-wireguard-private-metadata-client", + "nym-wireguard-private-metadata-server", + "nym-wireguard-private-metadata-shared", + "tokio", + "tower-http 0.5.2", + "utoipa", +] + +[[package]] +name = "nym-wireguard-types" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "log", + "nym-config", + "nym-crypto", + "nym-network-defaults", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "x25519-dalek", +] + +[[package]] +name = "nymvisor" +version = "0.1.29" +dependencies = [ + "anyhow", + "bytes", + "clap", + "dotenvy", + "flate2", + "futures", + "hex", + "humantime", + "humantime-serde", + "nix 0.27.1", + "nym-async-file-watcher", + "nym-bin-common", + "nym-config", + "nym-task", + "reqwest 0.12.24", + "serde", + "serde_json", + "sha2 0.10.9", + "tar", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nyx-chain-watcher" +version = "0.1.14" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "chrono", + "clap", + "nym-bin-common", + "nym-config", + "nym-network-defaults", + "nym-task", + "nym-validator-client", + "nyxd-scraper", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nyxd-scraper" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "const_format", + "cosmrs", + "eyre", + "futures", + "humantime", + "serde", + "sha2 0.10.9", + "sqlx", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.9.4", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.9.4", + "block2", + "libc", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "libc", + "objc2-core-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "critical-section", + "portable-atomic", +] + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[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.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.110" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-http" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" +dependencies = [ + "async-trait", + "bytes", + "http 0.2.12", + "isahc", + "opentelemetry_api", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "http 0.2.12", + "isahc", + "once_cell", + "opentelemetry", + "opentelemetry-http", + "opentelemetry-semantic-conventions", + "thiserror 1.0.69", + "thrift", + "tokio", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "once_cell", + "pin-project-lite", + "thiserror 1.0.69", + "urlencoding", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand 0.8.5", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "peg" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477" +dependencies = [ + "peg-macros", + "peg-runtime", +] + +[[package]] +name = "peg-macros" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71" +dependencies = [ + "peg-runtime", + "proc-macro2", + "quote", +] + +[[package]] +name = "peg-runtime" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca" + +[[package]] +name = "pem" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +dependencies = [ + "base64 0.13.1", + "once_cell", + "regex", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pest" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pest_meta" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" +dependencies = [ + "pest", + "sha2 0.10.9", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.11.4", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "plotters" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" + +[[package]] +name = "plotters-svg" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[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 0.3.1", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes", + "fallible-iterator", + "hmac", + "md-5", + "memchr", + "rand 0.9.2", + "sha2 0.10.9", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" +dependencies = [ + "bytes", + "fallible-iterator", + "postgres-protocol", +] + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc_pidinfo" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" +dependencies = [ + "libc", +] + +[[package]] +name = "prometheus" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror 2.0.17", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "prost-types" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" +dependencies = [ + "once_cell", + "protobuf-support", + "thiserror 1.0.69", +] + +[[package]] +name = "protobuf-support" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" +dependencies = [ + "thiserror 1.0.69", +] + +[[package]] +name = "psl" +version = "2.1.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c569a9577fe28cc82ac9969ec31778511f1912b3468fe236c24393bebf8a571" +dependencies = [ + "psl-types", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.32", + "socket2 0.6.1", + "thiserror 2.0.17", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash", + "rustls 0.23.32", + "rustls-pki-types", + "slab", + "thiserror 2.0.17", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.6.1", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +dependencies = [ + "async-compression", + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-rustls 0.27.7", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.32", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "tower 0.5.2", + "tower-http 0.6.6", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots 1.0.3", +] + +[[package]] +name = "reserve-port" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" +dependencies = [ + "thiserror 2.0.17", +] + +[[package]] +name = "resolv-conf" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle 2.6.1", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rs_merkle" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" +dependencies = [ + "sha2 0.10.9", +] + +[[package]] +name = "rsa" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "sha2 0.10.9", + "signature", + "spki", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rtnetlink" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe0a03f6b9b483c67d4b328fc5d66c8db0b6aa274e0fa2def71b5e442a69acf" +dependencies = [ + "futures", + "log", + "netlink-packet-core 0.7.0", + "netlink-packet-route 0.24.0", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix 0.29.0", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "rust-embed" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.106", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" +dependencies = [ + "sha2 0.10.9", + "walkdir", +] + +[[package]] +name = "rust-multipart-rfc7578_2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" +dependencies = [ + "bytes", + "futures-core", + "futures-util", + "http 0.2.12", + "mime", + "mime_guess", + "rand 0.8.5", + "thiserror 1.0.69", +] + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.103.7", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals 0.29.1", + "syn 2.0.106", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sealed" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.9", + "pkcs8", + "serdect 0.2.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" +dependencies = [ + "cc", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.9.4", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_derive_internals" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_json_path" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b992cea3194eea663ba99a042d61cea4bd1872da37021af56f6a37e0359b9d33" +dependencies = [ + "inventory", + "nom", + "regex", + "serde", + "serde_json", + "serde_json_path_core", + "serde_json_path_macros", + "thiserror 2.0.17", +] + +[[package]] +name = "serde_json_path_core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde67d8dfe7d4967b5a95e247d4148368ddd1e753e500adb34b3ffe40c6bc1bc" +dependencies = [ + "inventory", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "serde_json_path_macros" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "517acfa7f77ddaf5c43d5f119c44a683774e130b4247b7d3210f8924506cfac8" +dependencies = [ + "inventory", + "serde_json_path_core", + "serde_json_path_macros_internal", +] + +[[package]] +name = "serde_json_path_macros_internal" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[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", +] + +[[package]] +name = "serde_plain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.11.4", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.11.4", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "serdect" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "si-scale" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio 0.8.11", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2 0.10.6", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "rustc_version 0.4.1", + "sha2 0.10.9", + "subtle 2.6.1", +] + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "sphinx-packet" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" +dependencies = [ + "aes", + "arrayref", + "blake2 0.8.1", + "bs58", + "byteorder", + "chacha", + "ctr", + "curve25519-dalek", + "digest 0.10.7", + "hkdf", + "hmac", + "lioness", + "rand 0.8.5", + "rand_distr", + "sha2 0.10.9", + "subtle 2.6.1", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlx" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +dependencies = [ + "base64 0.22.1", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.4.1", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.15.5", + "hashlink", + "indexmap 2.11.4", + "log", + "memchr", + "once_cell", + "percent-encoding", + "rustls 0.23.32", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.106", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.106", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.9.4", + "byteorder", + "bytes", + "chrono", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array 0.14.9", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.17", + "time", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-pool-guard" +version = "0.1.0" +dependencies = [ + "proc_pidinfo", + "sqlx", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", + "windows 0.61.3", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.9.4", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.17", + "time", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "thiserror 2.0.17", + "time", + "tracing", + "url", +] + +[[package]] +name = "ssl-inject" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "hex", + "tokio", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "subtle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "superboring" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "515cce34a781d7250b8a65706e0f2a5b99236ea605cb235d4baed6685820478f" +dependencies = [ + "getrandom 0.2.16", + "hmac-sha256", + "hmac-sha512", + "rand 0.8.5", + "rsa", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "sysinfo" +version = "0.37.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "objc2-io-kit", + "windows 0.61.3", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.4", + "core-foundation", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand 2.3.0", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendermint" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" +dependencies = [ + "bytes", + "digest 0.10.7", + "ed25519", + "ed25519-consensus", + "flex-error", + "futures", + "k256", + "num-traits", + "once_cell", + "prost", + "ripemd", + "serde", + "serde_bytes", + "serde_json", + "serde_repr", + "sha2 0.10.9", + "signature", + "subtle 2.6.1", + "subtle-encoding", + "tendermint-proto", + "time", + "zeroize", +] + +[[package]] +name = "tendermint-config" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" +dependencies = [ + "flex-error", + "serde", + "serde_json", + "tendermint", + "toml 0.8.23", + "url", +] + +[[package]] +name = "tendermint-proto" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" +dependencies = [ + "bytes", + "flex-error", + "prost", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "tendermint-rpc" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" +dependencies = [ + "async-trait", + "async-tungstenite", + "bytes", + "flex-error", + "futures", + "getrandom 0.2.16", + "peg", + "pin-project", + "rand 0.8.5", + "reqwest 0.11.27", + "semver 1.0.27", + "serde", + "serde_bytes", + "serde_json", + "subtle 2.6.1", + "subtle-encoding", + "tendermint", + "tendermint-config", + "tendermint-proto", + "thiserror 1.0.69", + "time", + "tokio", + "tracing", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "test-with" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f370b9efbfbbc5f057cbce9888373eaeb146a3095bb8cc869b199c94d15559" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "regex", + "syn 2.0.106", +] + +[[package]] +name = "testnet-manager" +version = "0.1.0" +dependencies = [ + "anyhow", + "bip39", + "bs58", + "clap", + "console", + "cw-utils", + "dkg-bypass-contract", + "humantime", + "indicatif", + "nym-bin-common", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", + "nym-contracts-common", + "nym-crypto", + "nym-ecash-contract-common", + "nym-group-contract-common", + "nym-http-api-client", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-pemstore", + "nym-performance-contract-common", + "nym-validator-client", + "nym-vesting-contract-common", + "rand 0.8.5", + "serde", + "serde_json", + "sqlx", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "toml 0.8.23", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "textwrap" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" +dependencies = [ + "smawk", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "js-sys", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio 1.0.4", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.1", + "tokio-macros", + "tracing", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf 0.13.1", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "rand 0.9.2", + "socket2 0.6.1", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls 0.23.32", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-tun" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5381752d5832fc811f89d54fc334951aa435022f494190ba7151661f206df" +dependencies = [ + "libc", + "nix 0.29.0", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", + "webpki-roots 0.25.4", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "futures-util", + "pin-project-lite", + "slab", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap 2.11.4", + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.11.4", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.22.1", + "bytes", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "socket2 0.5.10", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "async-compression", + "bitflags 2.9.4", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.4", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "iri-string", + "pin-project-lite", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-indicatif" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d4e11e0e27acef25a47f27e9435355fecdc488867fa2bc90e75b0700d2823d" +dependencies = [ + "indicatif", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "matchers", + "nu-ansi-term 0.50.3", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote", + "syn 2.0.106", +] + +[[package]] +name = "tracing-tree" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" +dependencies = [ + "nu-ansi-term 0.46.0", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "trackable" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" +dependencies = [ + "trackable 1.3.0", + "trackable_derive", +] + +[[package]] +name = "trackable" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" +dependencies = [ + "trackable_derive", +] + +[[package]] +name = "trackable_derive" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "ts-rs" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" +dependencies = [ + "lazy_static", + "thiserror 2.0.17", + "ts-rs-macros", +] + +[[package]] +name = "ts-rs-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "nym-api-requests", + "nym-mixnet-contract-common", + "nym-types", + "nym-validator-client", + "nym-vesting-contract-common", + "nym-wallet-types", + "ts-rs", + "walkdir", +] + +[[package]] +name = "ts-rs-macros" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "termcolor", +] + +[[package]] +name = "tsify" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" +dependencies = [ + "gloo-utils 0.1.7", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_json", + "tsify-macros", + "wasm-bindgen", +] + +[[package]] +name = "tsify-macros" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals 0.28.0", + "syn 2.0.106", +] + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.21.12", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", + "webpki-roots 0.24.0", +] + +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.3.1", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.22.4", + "rustls-pki-types", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "uniffi" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6d968cb62160c11f2573e6be724ef8b1b18a277aededd17033f8a912d73e2b4" +dependencies = [ + "anyhow", + "camino", + "cargo_metadata 0.19.2", + "clap", + "uniffi_bindgen", + "uniffi_build", + "uniffi_core", + "uniffi_macros", + "uniffi_pipeline", +] + +[[package]] +name = "uniffi_bindgen" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b39ef1acbe1467d5d210f274fae344cb6f8766339330cb4c9688752899bf6b" +dependencies = [ + "anyhow", + "askama", + "camino", + "cargo_metadata 0.19.2", + "fs-err", + "glob", + "goblin", + "heck 0.5.0", + "indexmap 2.11.4", + "once_cell", + "serde", + "tempfile", + "textwrap", + "toml 0.5.11", + "uniffi_internal_macros", + "uniffi_meta", + "uniffi_pipeline", + "uniffi_udl", +] + +[[package]] +name = "uniffi_build" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6683e6b665423cddeacd89a3f97312cf400b2fb245a26f197adaf65c45d505b2" +dependencies = [ + "anyhow", + "camino", + "uniffi_bindgen", +] + +[[package]] +name = "uniffi_core" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d990b553d6b9a7ee9c3ae71134674739913d52350b56152b0e613595bb5a6f" +dependencies = [ + "anyhow", + "bytes", + "once_cell", + "static_assertions", +] + +[[package]] +name = "uniffi_internal_macros" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f4f224becf14885c10e6e400b95cc4d1985738140cb194ccc2044563f8a56b" +dependencies = [ + "anyhow", + "indexmap 2.11.4", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "uniffi_macros" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b481d385af334871d70904e6a5f129be7cd38c18fcf8dd8fd1f646b426a56d58" +dependencies = [ + "camino", + "fs-err", + "once_cell", + "proc-macro2", + "quote", + "serde", + "syn 2.0.106", + "toml 0.5.11", + "uniffi_meta", +] + +[[package]] +name = "uniffi_meta" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f817868a3b171bb7bf259e882138d104deafde65684689b4694c846d322491" +dependencies = [ + "anyhow", + "siphasher 0.3.11", + "uniffi_internal_macros", + "uniffi_pipeline", +] + +[[package]] +name = "uniffi_pipeline" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b147e133ad7824e32426b90bc41fda584363563f2ba747f590eca1fd6fd14e6" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.11.4", + "tempfile", + "uniffi_internal_macros", +] + +[[package]] +name = "uniffi_udl" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caed654fb73da5abbc7a7e9c741532284532ba4762d6fe5071372df22a41730a" +dependencies = [ + "anyhow", + "textwrap", + "uniffi_meta", + "weedle2", +] + +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "utoipa" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" +dependencies = [ + "indexmap 2.11.4", + "serde", + "serde_json", + "utoipa-gen", +] + +[[package]] +name = "utoipa-gen" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.106", + "uuid", +] + +[[package]] +name = "utoipa-swagger-ui" +version = "8.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" +dependencies = [ + "axum", + "base64 0.22.1", + "mime_guess", + "regex", + "rust-embed", + "serde", + "serde_json", + "url", + "utoipa", + "zip", +] + +[[package]] +name = "utoipauto" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cba36db2c397c614110554a60fbb4bb97d5f8c6823775c766e6f455e37377047" +dependencies = [ + "utoipauto-macro", +] + +[[package]] +name = "utoipauto-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "utoipauto-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "utoipauto-core", +] + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "getrandom 0.3.4", + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "validator-status-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "comfy-table", + "nym-bin-common", + "nym-http-api-client", + "nym-network-defaults", + "nym-validator-client", + "serde", + "serde_json", + "strum", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +dependencies = [ + "anyhow", + "cargo_metadata 0.18.1", + "cfg-if", + "regex", + "rustc_version 0.4.1", + "rustversion", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vt100" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" +dependencies = [ + "itoa", + "log", + "unicode-width 0.1.14", + "vte", +] + +[[package]] +name = "vte" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" +dependencies = [ + "arrayvec", + "utf8parse", + "vte_generate_state_changes", +] + +[[package]] +name = "vte_generate_state_changes" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.106", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" +dependencies = [ + "js-sys", + "minicov", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "wasm-client-core" +version = "0.1.0" +dependencies = [ + "async-trait", + "console_error_panic_hook", + "js-sys", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config", + "nym-credential-storage", + "nym-crypto", + "nym-gateway-client", + "nym-http-api-client", + "nym-sphinx", + "nym-sphinx-acknowledgements", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "time", + "tsify", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-storage", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "wasm-storage" +version = "0.1.0" +dependencies = [ + "async-trait", + "getrandom 0.2.16", + "indexed_db_futures", + "js-sys", + "nym-store-cipher", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "wasm-bindgen", + "wasm-utils", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm-utils" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "futures", + "getrandom 0.2.16", + "gloo-net", + "gloo-utils 0.2.0", + "js-sys", + "tungstenite 0.20.1", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmtimer" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "slab", + "wasm-bindgen", +] + +[[package]] +name = "web-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" +dependencies = [ + "phf 0.11.3", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webpki-roots" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +dependencies = [ + "rustls-webpki 0.101.7", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.3", +] + +[[package]] +name = "webpki-roots" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "weedle2" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" +dependencies = [ + "nom", +] + +[[package]] +name = "whoami" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" +dependencies = [ + "libredox", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" +dependencies = [ + "windows-core 0.59.0", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[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", +] + +[[package]] +name = "windows-core" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" +dependencies = [ + "windows-implement 0.59.0", + "windows-interface", + "windows-result 0.3.4", + "windows-strings 0.3.1", + "windows-targets 0.53.5", +] + +[[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", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement 0.60.2", + "windows-interface", + "windows-link 0.2.1", + "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", +] + +[[package]] +name = "windows-implement" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[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-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", +] + +[[package]] +name = "windows-strings" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +dependencies = [ + "windows-link 0.1.3", +] + +[[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", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[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_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zip" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", + "flate2", + "indexmap 2.11.4", + "memchr", + "thiserror 2.0.17", + "zopfli", +] + +[[package]] +name = "zknym-lib" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bs58", + "getrandom 0.2.16", + "js-sys", + "nym-bin-common", + "nym-compact-ecash", + "nym-credentials", + "nym-crypto", + "nym-http-api-client", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "thiserror 2.0.17", + "tokio", + "tsify", + "uuid", + "wasm-bindgen", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "zopfli" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zulip-client" +version = "0.1.0" +dependencies = [ + "itertools 0.14.0", + "nym-bin-common", + "nym-http-api-client", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", + "zeroize", +] diff --git a/Cargo.toml b/Cargo.toml index 953b45df31a..af8e5a3b859 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -474,3 +474,11 @@ exit = "deny" panic = "deny" unimplemented = "deny" unreachable = "deny" + +[patch."https://github.com/nymtech/nym-vpn-client"] +nym-http-api-client = { path = "common/http-api-client" } +nym-contracts-common = { path = "common/cosmwasm-smart-contracts/contracts-common" } + +[patch."https://github.com/nymtech/nym"] +nym-http-api-client = { path = "common/http-api-client" } +nym-contracts-common = { path = "common/cosmwasm-smart-contracts/contracts-common" } diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 2f08c67ece6..6a875cb4236 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -11,13 +11,20 @@ license.workspace = true futures.workspace = true itertools.workspace = true nym-client-core = { path = "../common/client-core" } -nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 +nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 nym-http-api-client = { path = "../common/http-api-client" } -nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } -nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk -nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk +nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 +nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 +nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk +nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk nym-validator-client = { path = "../common/client-libs/validator-client" } -# nym-vpn-api-client = { path = "../nym-vpn-api-client" } TODO modify gateway-directory so it isn't reliant on this +nym-crypto = { path = "../common/crypto", features = [ + "rand", + "asymmetric", + "stream_cipher", + "aes", + "hashing", +] } # TODO probably dont need all these features, cut down rand.workspace = true serde.workspace = true strum.workspace = true diff --git a/nym-gateway-directory/src/entries/gateway.rs b/nym-gateway-directory/src/entries/gateway.rs index efa40996994..570ec7fc858 100644 --- a/nym-gateway-directory/src/entries/gateway.rs +++ b/nym-gateway-directory/src/entries/gateway.rs @@ -479,7 +479,7 @@ impl nym_client_core::init::helpers::ConnectableGateway for Gateway { self.node_id() } - fn identity(&self) -> nym_sdk::mixnet::NodeIdentity { + fn identity(&self) -> NodeIdentity { self.identity() } diff --git a/nym-gateway-directory/src/error.rs b/nym-gateway-directory/src/error.rs index 36003241865..a2b4cd9dc3e 100644 --- a/nym-gateway-directory/src/error.rs +++ b/nym-gateway-directory/src/error.rs @@ -6,13 +6,13 @@ pub enum Error { #[error("identity not formatted correctly: {identity}")] NodeIdentityFormattingError { identity: String, - source: nym_sdk::mixnet::ed25519::Ed25519RecoveryError, + source: nym_crypto::asymmetric::ed25519::Ed25519RecoveryError }, #[error("recipient is not formatted correctly: {address}")] RecipientFormattingError { address: String, - source: nym_sdk::mixnet::RecipientFormattingError, + source: nym_sphinx::addressing::clients::RecipientFormattingError, }, #[error(transparent)] diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index 7f9e16d2ca4..d466d596a35 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -6,7 +6,8 @@ use std::{ net::{IpAddr, SocketAddr}, }; -pub use nym_sdk::UserAgent; +// pub use ::UserAgent +use nym_http_api_client::UserAgent; use nym_validator_client::{NymApiClient, models::NymNodeDescription, nym_nodes::SkimmedNode}; use nym_vpn_api_client::types::{GatewayMinPerformance, Percent, ScoreThresholds}; use rand::{prelude::SliceRandom, thread_rng}; @@ -446,7 +447,7 @@ fn filter_on_mixnet_min_performance( #[cfg(test)] mod test { - use nym_sdk::UserAgent; + use nym_http_api_client::UserAgent; use super::*; diff --git a/nym-ip-packet-client/src/lib.rs b/nym-ip-packet-client/src/lib.rs deleted file mode 100644 index 8aa5ffdf427..00000000000 --- a/nym-ip-packet-client/src/lib.rs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2023-2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -mod connect; -mod error; -mod helpers; -mod listener; - -pub use connect::IprClientConnect; -pub use error::Error; -pub use listener::{IprListener, MixnetMessageOutcome}; - -// Re-export the currently used version -pub use nym_ip_packet_requests::v8 as current; diff --git a/nym-ip-packet-client/src/listener.rs b/nym-ip-packet-client/src/listener.rs deleted file mode 100644 index 4642f788af5..00000000000 --- a/nym-ip-packet-client/src/listener.rs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use bytes::Bytes; -use futures::StreamExt; -use nym_ip_packet_requests::{codec::MultiIpPacketCodec, v8::response::ControlResponse}; -pub use nym_sdk::mixnet::ReconstructedMessage; -use tokio_util::codec::FramedRead; -use tracing::{debug, error, info, warn}; - -use crate::{ - current::{ - request::{ControlRequest, IpPacketRequest, IpPacketRequestData}, - response::{InfoLevel, IpPacketResponse, IpPacketResponseData}, - }, - helpers::check_ipr_message_version, -}; - -pub enum MixnetMessageOutcome { - IpPackets(Vec), - MixnetSelfPing, - Disconnect, -} - -pub struct IprListener {} - -#[derive(Debug, thiserror::Error)] -pub enum IprListenerError { - #[error(transparent)] - IprClientError(#[from] crate::Error), -} - -impl IprListener { - pub fn new() -> Self { - Self {} - } - - fn is_mix_ping(&self, request: &IpPacketRequest) -> bool { - match request.data { - IpPacketRequestData::Control(ref control) => { - matches!(**control, ControlRequest::Ping(_)) - } - _ => { - debug!("Received unexpected request: {request:?}"); - false - } - } - } - - pub async fn handle_reconstructed_message( - &mut self, - message: ReconstructedMessage, - ) -> Result, IprListenerError> { - check_ipr_message_version(&message)?; - - match IpPacketResponse::from_reconstructed_message(&message) { - Ok(response) => { - match response.data { - IpPacketResponseData::Data(data_response) => { - // Un-bundle the mixnet message and send the individual IP packets - // to the tun device - let framed_reader = FramedRead::new( - data_response.ip_packet.as_ref(), - MultiIpPacketCodec::new(), - ); - let responses: Vec = framed_reader - .filter_map(|res| async { res.ok().map(|packet| packet.into_bytes()) }) - .collect() - .await; - return Ok(Some(MixnetMessageOutcome::IpPackets(responses))); - } - IpPacketResponseData::Control(control_response) => match *control_response { - ControlResponse::Connect(_) => { - info!("Received connect response when already connected - ignoring"); - } - ControlResponse::Disconnect(_) => { - info!("Received disconnect response"); - return Ok(Some(MixnetMessageOutcome::Disconnect)); - } - ControlResponse::UnrequestedDisconnect(_) => { - info!("Received unrequested disconnect response, ignoring for now"); - } - ControlResponse::Pong(_) => { - info!("Received pong response, ignoring for now"); - } - ControlResponse::Health(_) => { - info!("Received health response, ignoring for now"); - } - ControlResponse::Info(info) => { - let msg = - format!("Received info response from the mixnet: {}", info.reply); - match info.level { - InfoLevel::Info => info!("{msg}"), - InfoLevel::Warn => warn!("{msg}"), - InfoLevel::Error => error!("{msg}"), - } - } - }, - } - } - Err(err) => { - // The exception to when we are not expecting a response, is when we - // are sending a ping to ourselves. - if let Ok(request) = IpPacketRequest::from_reconstructed_message(&message) { - if self.is_mix_ping(&request) { - return Ok(Some(MixnetMessageOutcome::MixnetSelfPing)); - } - } else { - warn!("Failed to deserialize reconstructed message: {err}"); - } - } - } - Ok(None) - } -} - -impl Default for IprListener { - fn default() -> Self { - Self::new() - } -} diff --git a/nym-vpn-api-client/Cargo.toml b/nym-vpn-api-client/Cargo.toml deleted file mode 100644 index 56898e6e088..00000000000 --- a/nym-vpn-api-client/Cargo.toml +++ /dev/null @@ -1,40 +0,0 @@ -[package] -name = "nym-vpn-api-client" -version.workspace = true -authors.workspace = true -repository.workspace = true -homepage.workspace = true -documentation.workspace = true -edition.workspace = true -license.workspace = true - -[dependencies] -backon.workspace = true -base64-url.workspace = true -bip39 = { workspace = true, features = ["zeroize"] } -bs58.workspace = true -chrono = { workspace = true, features = ["serde"] } -itertools.workspace = true -nym-compact-ecash.workspace = true -nym-config.workspace = true -nym-contracts-common.workspace = true -nym-credential-proxy-requests.workspace = true -nym-crypto = { workspace = true, features = ["asymmetric", "stream_cipher"] } -nym-http-api-client.workspace = true -nym-validator-client.workspace = true -serde = { workspace = true, features = ["derive"] } -serde_json.workspace = true -sha2.workspace = true -strum.workspace = true -thiserror.workspace = true -time = { workspace = true, features = [ - "serde-human-readable", - "serde-well-known", -] } -tokio = { workspace = true, features = [] } -tracing.workspace = true -url.workspace = true - -[dev-dependencies] -tokio = { workspace = true, features = ["full"] } -bip39 = { workspace = true, features = ["zeroize"] } diff --git a/nym-vpn-api-client/src/bootstrap.rs b/nym-vpn-api-client/src/bootstrap.rs deleted file mode 100644 index 784ab38466b..00000000000 --- a/nym-vpn-api-client/src/bootstrap.rs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use nym_http_api_client::{ApiClient, NO_PARAMS}; - -use url::Url; - -use crate::{ - client::NYM_VPN_API_TIMEOUT, - error::{Result, VpnApiClientError}, - response::{NymWellknownDiscoveryItemResponse, RegisteredNetworksResponse}, - routes, -}; - -/// Bootstrapping Environments and Network Discovery -pub struct BootstrapVpnApiClient { - inner: nym_http_api_client::Client, -} - -impl BootstrapVpnApiClient { - /// Returns a VpnApiClient Based on locally set well known url and empty user agent. - /// - /// THIS SHOULD ONLY BE USED FOR BOOTSTRAPPING. - pub fn new(base_url: Url) -> Result { - nym_http_api_client::Client::builder(base_url) - .map(|builder| builder.with_timeout(NYM_VPN_API_TIMEOUT)) - .and_then(|builder| builder.build()) - .map(|c| Self { inner: c }) - .map_err(VpnApiClientError::CreateVpnApiClient) - } - - pub async fn get_wellknown_envs(&self) -> Result { - self.inner - .get_json( - &[ - routes::PUBLIC, - routes::V1, - routes::WELLKNOWN, - routes::ENVS_FILE, - ], - NO_PARAMS, - ) - .await - .map_err(VpnApiClientError::GetNetworkEnvs) - } - - pub async fn get_wellknown_discovery( - &self, - network_name: &str, - ) -> Result { - self.inner - .get_json( - &[ - routes::PUBLIC, - routes::V1, - routes::WELLKNOWN, - network_name, - routes::DISCOVERY_FILE, - ], - NO_PARAMS, - ) - .await - .map_err(VpnApiClientError::GetDiscoveryInfo) - } -} diff --git a/nym-vpn-api-client/src/client.rs b/nym-vpn-api-client/src/client.rs deleted file mode 100644 index bcebd7bfe10..00000000000 --- a/nym-vpn-api-client/src/client.rs +++ /dev/null @@ -1,1164 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::{fmt, net::SocketAddr, time::Duration}; - -use backon::Retryable; -use nym_credential_proxy_requests::api::v1::ticketbook::models::PartialVerificationKeysResponse; -use nym_http_api_client::{ApiClient, HttpClientError, NO_PARAMS, Params, PathSegments, UserAgent}; -use serde::{Deserialize, Serialize, de::DeserializeOwned}; -use time::OffsetDateTime; -use url::Url; - -use crate::{ - error::{Result, VpnApiClientError}, - request::{ - ApplyFreepassRequestBody, CreateAccountRequestBody, CreateSubscriptionKind, - CreateSubscriptionRequestBody, RegisterDeviceRequestBody, RequestZkNymRequestBody, - UpdateDeviceRequestBody, UpdateDeviceRequestStatus, - }, - response::{ - NymDirectoryGatewayCountriesResponse, NymDirectoryGatewaysResponse, NymVpnAccountResponse, - NymVpnAccountSummaryResponse, NymVpnDevice, NymVpnDevicesResponse, NymVpnHealthResponse, - NymVpnRegisterAccountResponse, NymVpnSubscription, NymVpnSubscriptionResponse, - NymVpnSubscriptionsResponse, NymVpnUsagesResponse, NymVpnZkNym, NymVpnZkNymPost, - NymVpnZkNymResponse, NymWellknownDiscoveryItem, StatusOk, - }, - routes, - types::{ - Device, DeviceStatus, GatewayMinPerformance, GatewayType, Platform, VpnApiAccount, - VpnApiTime, VpnApiTimeSynced, - }, -}; - -pub(crate) const DEVICE_AUTHORIZATION_HEADER: &str = "x-device-authorization"; - -// GET requests can unfortunately take a long time over the mixnet -pub(crate) const NYM_VPN_API_TIMEOUT: Duration = Duration::from_secs(60); - -#[derive(Clone, Debug)] -pub struct VpnApiClient { - inner: nym_http_api_client::Client, -} - -impl VpnApiClient { - pub fn new(base_url: Url, user_agent: UserAgent) -> Result { - Self::new_with_resolver_overrides(base_url, user_agent, None) - } - - pub fn new_with_resolver_overrides( - base_url: Url, - user_agent: UserAgent, - static_addresses: Option<&[SocketAddr]>, - ) -> Result { - nym_http_api_client::Client::builder(base_url.clone()) - .map(|builder| { - let mut builder = builder - .with_user_agent(user_agent) - .with_timeout(NYM_VPN_API_TIMEOUT); - - if let Some(domain) = base_url.domain() { - match static_addresses { - Some(static_addresses) if !static_addresses.is_empty() => { - tracing::info!( - "Enabling DNS resolver overrides: {:?}", static_addresses - ); - builder = builder.resolve_to_addrs(domain, static_addresses); - } - Some(_) => { - tracing::warn!( - "Not enabling DNS resolver overrides because static addresses are empty" - ); - } - None => { - tracing::info!( - "Not enabling DNS resolver overrides because static addresses are not set" - ); - } - } - } else { - tracing::info!( - "Not enabling DNS resolver overrides because domain is not present in base URL" - ); - } - - builder - }) - .and_then(|builder| builder.build()) - .map(|c| Self { inner: c }) - .map_err(VpnApiClientError::CreateVpnApiClient) - } - - pub fn swap_inner_client(&mut self, client: VpnApiClient) { - self.inner = client.inner; - } - - pub fn current_url(&self) -> &Url { - self.inner.current_url() - } - - pub async fn get_remote_time(&self) -> Result { - let time_before = OffsetDateTime::now_utc(); - let remote_timestamp = self.get_health().await?.timestamp_utc; - let time_after = OffsetDateTime::now_utc(); - - Ok(VpnApiTime::from_remote_timestamp( - time_before, - remote_timestamp, - time_after, - )) - } - - fn use_remote_time(remote_time: VpnApiTime) -> bool { - match remote_time.is_synced() { - VpnApiTimeSynced::AlmostSame => { - tracing::debug!("{remote_time}"); - false - } - VpnApiTimeSynced::AcceptableSynced => { - tracing::info!("{remote_time}"); - false - } - VpnApiTimeSynced::NotSynced => { - tracing::warn!( - "The time skew between the local and remote time is too large, we'll use remote instead for JWT ({remote_time})." - ); - true - } - } - } - - async fn sync_with_remote_time(&self) -> Result> { - let remote_time = self.get_remote_time().await?; - - if Self::use_remote_time(remote_time) { - Ok(Some(remote_time)) - } else { - Ok(None) - } - } - - async fn get_query( - &self, - path: PathSegments<'_>, - account: &VpnApiAccount, - device: Option<&Device>, - jwt: Option, - ) -> std::result::Result> - where - T: DeserializeOwned, - E: fmt::Display + DeserializeOwned, - { - let request = self - .inner - .create_get_request(path, NO_PARAMS) - .bearer_auth(account.jwt(jwt).to_string()); - - let request = match device { - Some(device) => request.header( - DEVICE_AUTHORIZATION_HEADER, - format!("Bearer {}", device.jwt(jwt)), - ), - None => request, - }; - let response = request.send().await?; - nym_http_api_client::parse_response(response, false).await - } - - async fn get_authorized( - &self, - path: PathSegments<'_>, - account: &VpnApiAccount, - device: Option<&Device>, - ) -> std::result::Result> - where - T: DeserializeOwned, - E: fmt::Display + DeserializeOwned, - { - match self.get_query::(path, account, device, None).await { - Ok(response) => Ok(response), - Err(err) => { - if let HttpClientError::EndpointFailure { status: _, error } = &err { - if jwt_error(&error.to_string()) { - tracing::warn!( - "Encountered possible JWT error: {error}. Retrying query with remote time" - ); - if let Ok(Some(jwt)) = - self.sync_with_remote_time().await.inspect_err(|err| { - tracing::error!( - "Failed to get remote time: {err}. Not retring anymore" - ) - }) - { - // retry with remote vpn api time, and return that only if it succeeds, - // otherwise return the initial error - let res = self.get_query(path, account, device, Some(jwt)).await; - if res.is_ok() { - return res; - } - } - } - } - Err(err) - } - } - } - - #[allow(unused)] - async fn get_authorized_debug( - &self, - path: PathSegments<'_>, - account: &VpnApiAccount, - device: Option<&Device>, - ) -> std::result::Result> - where - T: DeserializeOwned, - E: fmt::Display + DeserializeOwned, - { - let request = self - .inner - .create_get_request(path, NO_PARAMS) - .bearer_auth(account.jwt(None).to_string()); - - let request = match device { - Some(device) => request.header( - DEVICE_AUTHORIZATION_HEADER, - format!("Bearer {}", device.jwt(None)), - ), - None => request, - }; - - let response = request.send().await?; - let status = response.status(); - tracing::info!("Response status: {:#?}", status); - - // TODO: support this mode in the upstream crate - - if status.is_success() { - let response_text = response.text().await?; - tracing::info!("Response: {:#?}", response_text); - let response_json = serde_json::from_str(&response_text) - .map_err(|e| HttpClientError::GenericRequestFailure(e.to_string()))?; - Ok(response_json) - //} else if status == reqwest::StatusCode::NOT_FOUND { - // Err(HttpClientError::NotFound) - } else { - let Ok(response_text) = response.text().await else { - return Err(HttpClientError::RequestFailure { status }); - }; - - tracing::info!("Response: {:#?}", response_text); - - if let Ok(request_error) = serde_json::from_str(&response_text) { - Err(HttpClientError::EndpointFailure { - status, - error: request_error, - }) - } else { - Err(HttpClientError::GenericRequestFailure(response_text)) - } - } - } - - async fn get_json_with_retry( - &self, - path: PathSegments<'_>, - params: Params<'_, K, V>, - ) -> std::result::Result> - where - for<'a> T: Deserialize<'a>, - K: AsRef + Sync, - V: AsRef + Sync, - E: fmt::Display + fmt::Debug + DeserializeOwned, - { - let response = (|| async { self.inner.get_json(path, params).await }) - .retry(backon::ConstantBuilder::default()) - .notify(|err: &HttpClientError, dur: Duration| { - tracing::warn!("Failed to get JSON: {}", err); - tracing::warn!("retrying after {:?}", dur); - }) - .await?; - Ok(response) - } - - async fn post_json_with_retry( - &self, - path: PathSegments<'_>, - params: Params<'_, K, V>, - json_body: &B, - ) -> std::result::Result> - where - for<'a> T: Deserialize<'a>, - B: Serialize + ?Sized + Sync, - K: AsRef + Sync, - V: AsRef + Sync, - E: fmt::Display + fmt::Debug + DeserializeOwned, - { - let response = (|| async { self.inner.post_json(path, params, json_body).await }) - .retry(backon::ConstantBuilder::default()) - .notify(|err: &HttpClientError, dur: Duration| { - tracing::warn!("Failed to post JSON: {}", err); - tracing::warn!("retrying after {:?}", dur); - }) - .await?; - Ok(response) - } - - async fn post_query( - &self, - path: PathSegments<'_>, - json_body: &B, - account: &VpnApiAccount, - device: Option<&Device>, - jwt: Option, - ) -> std::result::Result> - where - T: DeserializeOwned, - B: Serialize, - E: fmt::Display + DeserializeOwned, - { - let request = self - .inner - .create_post_request(path, NO_PARAMS, json_body) - .bearer_auth(account.jwt(jwt).to_string()); - - let request = match device { - Some(device) => request.header( - DEVICE_AUTHORIZATION_HEADER, - format!("Bearer {}", device.jwt(jwt)), - ), - None => request, - }; - let response = request.send().await?; - nym_http_api_client::parse_response(response, false).await - } - - async fn post_authorized( - &self, - path: PathSegments<'_>, - json_body: &B, - account: &VpnApiAccount, - device: Option<&Device>, - ) -> std::result::Result> - where - T: DeserializeOwned, - B: Serialize, - E: fmt::Display + DeserializeOwned, - { - match self - .post_query::(path, json_body, account, device, None) - .await - { - Ok(response) => Ok(response), - Err(err) => { - if let HttpClientError::EndpointFailure { status: _, error } = &err { - if jwt_error(&error.to_string()) { - tracing::warn!( - "Encountered possible JWT error: {error}. Retrying query with remote time" - ); - if let Ok(Some(jwt)) = - self.sync_with_remote_time().await.inspect_err(|err| { - tracing::error!( - "Failed to get remote time: {err}. Not retring anymore" - ) - }) - { - // retry with remote vpn api time, and return that only if it succeeds, - // otherwise return the initial error - let res = self - .post_query(path, json_body, account, device, Some(jwt)) - .await; - if res.is_ok() { - return res; - } - } - } - } - Err(err) - } - } - } - - async fn delete_query( - &self, - path: PathSegments<'_>, - account: &VpnApiAccount, - device: Option<&Device>, - jwt: Option, - ) -> std::result::Result> - where - T: DeserializeOwned, - E: fmt::Display + DeserializeOwned, - { - let request = self - .inner - .create_delete_request(path, NO_PARAMS) - .bearer_auth(account.jwt(jwt).to_string()); - - let request = match device { - Some(device) => request.header( - DEVICE_AUTHORIZATION_HEADER, - format!("Bearer {}", device.jwt(jwt)), - ), - None => request, - }; - let response = request.send().await?; - nym_http_api_client::parse_response(response, false).await - } - - async fn delete_authorized( - &self, - path: PathSegments<'_>, - account: &VpnApiAccount, - device: Option<&Device>, - ) -> std::result::Result> - where - T: DeserializeOwned, - E: fmt::Display + DeserializeOwned, - { - match self.delete_query::(path, account, device, None).await { - Ok(response) => Ok(response), - Err(err) => { - if let HttpClientError::EndpointFailure { status: _, error } = &err { - if jwt_error(&error.to_string()) { - tracing::warn!( - "Encountered possible JWT error: {error}. Retrying query with remote time" - ); - if let Ok(Some(jwt)) = - self.sync_with_remote_time().await.inspect_err(|err| { - tracing::error!( - "Failed to get remote time: {err}. Not retring anymore" - ) - }) - { - // retry with remote vpn api time, and return that only if it succeeds, - // otherwise return the initial error - let res = self.delete_query(path, account, device, Some(jwt)).await; - if res.is_ok() { - return res; - } - } - } - } - Err(err) - } - } - } - - async fn patch_query( - &self, - path: PathSegments<'_>, - json_body: &B, - account: &VpnApiAccount, - device: Option<&Device>, - jwt: Option, - ) -> std::result::Result> - where - T: DeserializeOwned, - B: Serialize, - E: fmt::Display + DeserializeOwned, - { - let request = self - .inner - .create_patch_request(path, NO_PARAMS, json_body) - .bearer_auth(account.jwt(jwt).to_string()); - - let request = match device { - Some(device) => request.header( - DEVICE_AUTHORIZATION_HEADER, - format!("Bearer {}", device.jwt(jwt)), - ), - None => request, - }; - let response = request.send().await?; - nym_http_api_client::parse_response(response, false).await - } - - async fn patch_authorized( - &self, - path: PathSegments<'_>, - json_body: &B, - account: &VpnApiAccount, - device: Option<&Device>, - ) -> std::result::Result> - where - T: DeserializeOwned, - B: Serialize, - E: fmt::Display + DeserializeOwned, - { - match self - .patch_query::(path, json_body, account, device, None) - .await - { - Ok(response) => Ok(response), - Err(err) => { - if let HttpClientError::EndpointFailure { status: _, error } = &err { - if jwt_error(&error.to_string()) { - tracing::warn!( - "Encountered possible JWT error: {error}. Retrying query with remote time" - ); - if let Ok(Some(jwt)) = - self.sync_with_remote_time().await.inspect_err(|err| { - tracing::error!( - "Failed to get remote time: {err}. Not retring anymore" - ) - }) - { - // retry with remote vpn api time, and return that only if it succeeds, - // otherwise return the initial error - let res = self - .patch_query(path, json_body, account, device, Some(jwt)) - .await; - if res.is_ok() { - return res; - } - } - } - } - Err(err) - } - } - } - - // ACCOUNT - - pub async fn get_account(&self, account: &VpnApiAccount) -> Result { - self.get_authorized( - &[routes::PUBLIC, routes::V1, routes::ACCOUNT, account.id()], - account, - None, - ) - .await - .map_err(crate::error::VpnApiClientError::GetAccount) - } - - pub async fn post_account( - &self, - account: &VpnApiAccount, - platform: Platform, - ) -> Result { - let body = CreateAccountRequestBody { - account_addr: account.id().to_string(), - pub_key: account.pub_key().to_string(), - signature_base64: account.signature_base64().to_string(), - }; - - self.post_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - platform.api_path_component(), - ], - NO_PARAMS, - &body, - ) - .await - .map_err(crate::error::VpnApiClientError::PostAccount) - } - - pub async fn get_health(&self) -> Result { - self.get_json_with_retry(&[routes::PUBLIC, routes::V1, routes::HEALTH], NO_PARAMS) - .await - .map_err(crate::error::VpnApiClientError::GetHealth) - } - - pub async fn get_account_summary( - &self, - account: &VpnApiAccount, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::SUMMARY, - ], - account, - None, - ) - .await - .map_err(VpnApiClientError::GetAccountSummary) - } - - // DEVICES - - pub async fn get_devices(&self, account: &VpnApiAccount) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - ], - account, - None, - ) - .await - .map_err(VpnApiClientError::GetDevices) - } - - pub async fn register_device( - &self, - account: &VpnApiAccount, - device: &Device, - ) -> Result { - let body = RegisterDeviceRequestBody { - device_identity_key: device.identity_key().to_base58_string(), - signature: device.sign_identity_key().to_base64_string(), - }; - - self.post_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - ], - &body, - account, - Some(device), - ) - .await - .map_err(VpnApiClientError::RegisterDevice) - } - - pub async fn get_active_devices( - &self, - account: &VpnApiAccount, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - routes::ACTIVE, - ], - account, - None, - ) - .await - .map_err(VpnApiClientError::GetActiveDevices) - } - - pub async fn get_device_by_id( - &self, - account: &VpnApiAccount, - device: &Device, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - &device.identity_key().to_string(), - ], - account, - None, - ) - .await - .map_err(VpnApiClientError::GetDeviceById) - } - - pub async fn update_device( - &self, - account: &VpnApiAccount, - device: &Device, - status: DeviceStatus, - ) -> Result { - let body = UpdateDeviceRequestBody { - status: UpdateDeviceRequestStatus::from(status), - }; - - self.patch_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - &device.identity_key().to_string(), - ], - &body, - account, - Some(device), - ) - .await - .map_err(VpnApiClientError::UpdateDevice) - } - - // ZK-NYM - - pub async fn get_device_zk_nyms( - &self, - account: &VpnApiAccount, - device: &Device, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - &device.identity_key().to_string(), - routes::ZKNYM, - ], - account, - Some(device), - ) - .await - .map_err(VpnApiClientError::GetDeviceZkNyms) - } - - pub async fn request_zk_nym( - &self, - account: &VpnApiAccount, - device: &Device, - withdrawal_request: String, - ecash_pubkey: String, - expiration_date: String, - ticketbook_type: String, - ) -> Result { - tracing::debug!("Requesting zk-nym for type: {}", ticketbook_type); - let body = RequestZkNymRequestBody { - withdrawal_request, - ecash_pubkey, - expiration_date, - ticketbook_type, - }; - tracing::debug!("Request body: {:#?}", body); - - self.post_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - &device.identity_key().to_string(), - routes::ZKNYM, - ], - &body, - account, - Some(device), - ) - .await - .map_err(VpnApiClientError::RequestZkNym) - } - - pub async fn get_zk_nyms_available_for_download( - &self, - account: &VpnApiAccount, - device: &Device, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - &device.identity_key().to_string(), - routes::ZKNYM, - routes::AVAILABLE, - ], - account, - Some(device), - ) - .await - .map_err(VpnApiClientError::GetDeviceZkNyms) - } - - pub async fn get_zk_nym_by_id( - &self, - account: &VpnApiAccount, - device: &Device, - id: &str, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - &device.identity_key().to_string(), - routes::ZKNYM, - id, - ], - account, - Some(device), - ) - .await - .map_err(VpnApiClientError::GetZkNymById) - } - - pub async fn confirm_zk_nym_download_by_id( - &self, - account: &VpnApiAccount, - device: &Device, - id: &str, - ) -> Result { - self.delete_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::DEVICE, - &device.identity_key().to_string(), - routes::ZKNYM, - id, - ], - account, - Some(device), - ) - .await - .map_err(VpnApiClientError::ConfirmZkNymDownloadById) - } - - // FREEPASS - - pub async fn get_free_passes( - &self, - account: &VpnApiAccount, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::FREEPASS, - ], - account, - None, - ) - .await - .map_err(VpnApiClientError::GetFreePasses) - } - - pub async fn apply_freepass( - &self, - account: &VpnApiAccount, - code: String, - ) -> Result { - let body = ApplyFreepassRequestBody { code }; - - self.post_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::FREEPASS, - ], - &body, - account, - None, - ) - .await - .map_err(VpnApiClientError::ApplyFreepass) - } - - // SUBSCRIPTIONS - - pub async fn get_subscriptions( - &self, - account: &VpnApiAccount, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::SUBSCRIPTION, - ], - account, - None, - ) - .await - .map_err(VpnApiClientError::GetSubscriptions) - } - - pub async fn create_subscription(&self, account: &VpnApiAccount) -> Result { - let body = CreateSubscriptionRequestBody { - valid_from_utc: "todo".to_string(), - subscription_kind: CreateSubscriptionKind::OneMonth, - }; - - self.post_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::SUBSCRIPTION, - ], - &body, - account, - None, - ) - .await - .map_err(VpnApiClientError::CreateSubscription) - } - - pub async fn get_active_subscriptions( - &self, - account: &VpnApiAccount, - ) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::SUBSCRIPTION, - routes::ACTIVE, - ], - account, - None, - ) - .await - .map_err(VpnApiClientError::GetActiveSubscriptions) - } - - pub async fn get_usage(&self, account: &VpnApiAccount) -> Result { - self.get_authorized( - &[ - routes::PUBLIC, - routes::V1, - routes::ACCOUNT, - account.id(), - routes::USAGE, - ], - account, - None, - ) - .await - .map_err(VpnApiClientError::GetUsage) - } - - // GATEWAYS - - pub async fn get_gateways( - &self, - min_performance: Option, - ) -> Result { - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::GATEWAYS, - ], - &min_performance.unwrap_or_default().to_param(), - ) - .await - .map_err(VpnApiClientError::GetGateways) - } - - pub async fn get_gateways_by_type( - &self, - kind: GatewayType, - min_performance: Option, - ) -> Result { - match kind { - GatewayType::MixnetEntry => self.get_entry_gateways(min_performance).await, - GatewayType::MixnetExit => self.get_exit_gateways(min_performance).await, - GatewayType::Wg => self.get_vpn_gateways(min_performance).await, - } - } - - pub async fn get_gateway_countries_by_type( - &self, - kind: GatewayType, - min_performance: Option, - ) -> Result { - match kind { - GatewayType::MixnetEntry => self.get_entry_gateway_countries(min_performance).await, - GatewayType::MixnetExit => self.get_exit_gateway_countries(min_performance).await, - GatewayType::Wg => self.get_vpn_gateway_countries(min_performance).await, - } - } - - pub async fn get_vpn_gateways( - &self, - min_performance: Option, - ) -> Result { - let mut params = min_performance.unwrap_or_default().to_param(); - params.push((routes::SHOW_VPN_ONLY.to_string(), "true".to_string())); - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::GATEWAYS, - ], - ¶ms, - ) - .await - .map_err(VpnApiClientError::GetVpnGateways) - } - - pub async fn get_vpn_gateway_countries( - &self, - min_performance: Option, - ) -> Result { - let mut params = min_performance.unwrap_or_default().to_param(); - params.push((routes::SHOW_VPN_ONLY.to_string(), "true".to_string())); - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::GATEWAYS, - routes::COUNTRIES, - ], - ¶ms, - ) - .await - .map_err(VpnApiClientError::GetVpnGatewayCountries) - } - - pub async fn get_gateway_countries( - &self, - min_performance: Option, - ) -> Result { - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::GATEWAYS, - routes::COUNTRIES, - ], - &min_performance.unwrap_or_default().to_param(), - ) - .await - .map_err(VpnApiClientError::GetGatewayCountries) - } - - pub async fn get_entry_gateways( - &self, - min_performance: Option, - ) -> Result { - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::GATEWAYS, - routes::ENTRY, - ], - &min_performance.unwrap_or_default().to_param(), - ) - .await - .map_err(VpnApiClientError::GetEntryGateways) - } - - pub async fn get_entry_gateway_countries( - &self, - min_performance: Option, - ) -> Result { - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::GATEWAYS, - routes::ENTRY, - routes::COUNTRIES, - ], - &min_performance.unwrap_or_default().to_param(), - ) - .await - .map_err(VpnApiClientError::GetEntryGatewayCountries) - } - - pub async fn get_exit_gateways( - &self, - min_performance: Option, - ) -> Result { - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::GATEWAYS, - routes::EXIT, - ], - &min_performance.unwrap_or_default().to_param(), - ) - .await - .map_err(VpnApiClientError::GetExitGateways) - } - - pub async fn get_exit_gateway_countries( - &self, - min_performance: Option, - ) -> Result { - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::GATEWAYS, - routes::EXIT, - routes::COUNTRIES, - ], - &min_performance.unwrap_or_default().to_param(), - ) - .await - .map_err(VpnApiClientError::GetExitGatewayCountries) - } - - // DIRECTORY ZK-NYM - - pub async fn get_directory_zk_nyms_ticketbook_partial_verification_keys( - &self, - ) -> Result { - self.get_json_with_retry( - &[ - routes::PUBLIC, - routes::V1, - routes::DIRECTORY, - routes::ZK_NYMS, - routes::TICKETBOOK, - routes::PARTIAL_VERIFICATION_KEYS, - ], - NO_PARAMS, - ) - .await - .map_err(VpnApiClientError::GetDirectoryZkNymsTicketbookPartialVerificationKeys) - } - - pub async fn get_wellknown_current_env(&self) -> Result { - tracing::debug!("Fetching nym vpn network details"); - self.inner - .get_json( - &[ - routes::PUBLIC, - routes::V1, - routes::WELLKNOWN, - routes::CURRENT_ENV, - ], - NO_PARAMS, - ) - .await - .map_err(VpnApiClientError::GetVpnNetworkDetails) - } -} - -fn jwt_error(error: &str) -> bool { - error.to_lowercase().contains("jwt") -} diff --git a/nym-vpn-api-client/src/error.rs b/nym-vpn-api-client/src/error.rs deleted file mode 100644 index d37db5ab2ef..00000000000 --- a/nym-vpn-api-client/src/error.rs +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::error::Error; - -pub use nym_http_api_client::HttpClientError; - -use nym_contracts_common::ContractsCommonError; - -use crate::response::{ErrorMessage, NymErrorResponse, UnexpectedError}; - -#[derive(Debug, thiserror::Error)] -pub enum VpnApiClientError { - #[error("failed tp create vpn api client")] - CreateVpnApiClient(#[source] HttpClientError), - - #[error("failed to get account")] - GetAccount(#[source] HttpClientError), - - #[error("failed to get account summary")] - GetAccountSummary(#[source] HttpClientError), - - #[error("failed to get devices")] - GetDevices(#[source] HttpClientError), - - #[error("failed to register device")] - RegisterDevice(#[source] HttpClientError), - - #[error("failed to get active devices")] - GetActiveDevices(#[source] HttpClientError), - - #[error("failed to get device by id")] - GetDeviceById(#[source] HttpClientError), - - #[error("failed to get device zk-nym")] - GetDeviceZkNyms(#[source] HttpClientError), - - #[error("failed to update device")] - UpdateDevice(#[source] HttpClientError), - - #[error("failed to request zk-nym")] - RequestZkNym(#[source] HttpClientError), - - #[error("failed to get active zk-nym")] - GetActiveZkNym(#[source] HttpClientError), - - #[error("failed to get zk-nym by id")] - GetZkNymById(#[source] HttpClientError), - - #[error("failed to confirm zk-nym download")] - ConfirmZkNymDownloadById(#[source] HttpClientError), - - #[error("failed to get free passes")] - GetFreePasses(#[source] HttpClientError), - - #[error("failed to apply free pass")] - ApplyFreepass(#[source] HttpClientError), - - #[error("failed to get subscriptions")] - GetSubscriptions(#[source] HttpClientError), - - #[error("failed to create subscription")] - CreateSubscription(#[source] HttpClientError), - - #[error("failed to get active subscription")] - GetActiveSubscriptions(#[source] HttpClientError), - - #[error("failed to get gateways")] - GetGateways(#[source] HttpClientError), - - #[error("failed to get gateway countries")] - GetGatewayCountries(#[source] HttpClientError), - - #[error("failed to get entry gateways")] - GetEntryGateways(#[source] HttpClientError), - - #[error("failed to get entry gateway countries")] - GetEntryGatewayCountries(#[source] HttpClientError), - - #[error("failed to get exit gateways")] - GetExitGateways(#[source] HttpClientError), - - #[error("failed to get exit gateway countries")] - GetExitGatewayCountries(#[source] HttpClientError), - - #[error("failed to get vpn gateways")] - GetVpnGateways(#[source] HttpClientError), - - #[error("failed to get vpn gateway countries")] - GetVpnGatewayCountries(#[source] HttpClientError), - - #[error("invalud percent value")] - InvalidPercentValue(#[source] ContractsCommonError), - - #[error("failed to derive from path")] - CosmosDeriveFromPath( - #[source] nym_validator_client::signing::direct_wallet::DirectSecp256k1HdWalletError, - ), - - #[error("failed to get directory zk-nym ticketbook partial verification keys")] - GetDirectoryZkNymsTicketbookPartialVerificationKeys(#[source] HttpClientError), - - #[error("failed to get health")] - GetHealth(#[source] HttpClientError), - - #[error("failed to get usage")] - GetUsage(#[source] HttpClientError), - - #[error("failed to get registered network environments")] - GetNetworkEnvs(#[source] HttpClientError), - - #[error("failed to get discovery info")] - GetDiscoveryInfo(#[source] HttpClientError), - - #[error("failed to get vpn network Details")] - GetVpnNetworkDetails(#[source] HttpClientError), - - #[error("failed to post account")] - PostAccount(#[source] HttpClientError), - - #[error("create account")] - CreateAccount(#[source] crate::types::AccountError), -} - -pub type Result = std::result::Result; - -impl TryFrom for NymErrorResponse { - type Error = VpnApiClientError; - - fn try_from(response: VpnApiClientError) -> std::result::Result { - crate::response::extract_error_response(&response).ok_or(response) - } -} - -impl VpnApiClientError { - pub fn http_client_error(&self) -> Option<&HttpClientError> - where - T: std::fmt::Display + std::fmt::Debug + 'static, - { - self.source() - .and_then(|source| source.downcast_ref::>()) - } -} diff --git a/nym-vpn-api-client/src/jwt.rs b/nym-vpn-api-client/src/jwt.rs deleted file mode 100644 index 6e4d99eb158..00000000000 --- a/nym-vpn-api-client/src/jwt.rs +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::fmt; - -use nym_crypto::asymmetric::ed25519; -use nym_validator_client::{DirectSecp256k1HdWallet, signing::signer::OfflineSigner}; -use serde::{Deserialize, Serialize}; -use serde_json::json; -use sha2::{Digest, Sha256}; - -use crate::types::VpnApiTime; - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub(crate) struct JwtHeader { - /// Type that is always "jwt" - typ: String, - /// Either "ES256K" or "ECDSA" - /// - /// NOTE: These JWTs are not meant to be used outside NymVPN API, so the encoding of their signatures - /// serialisation formats do not follow any RFCs, because NymVPN software creates and consumes them - /// - /// Elliptic curve signatures using secp256k1 scheme, sadly not in the table of standard algorithms in - /// https://www.rfc-editor.org/rfc/rfc7518#section-3.1. This scheme is chosen to match the signatures used - /// in the Nyx chain based on the Cosmos SDK. - /// - alg: String, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub(crate) struct JwtPayload { - /// Issued at, as a Unix epoch, timezone is UTC - iat: u128, - /// The number of seconds the token is valid for, after the issued at UTC epoch - exp: u8, - /// The base58 public key of the account (for signature verification) - #[serde(skip_serializing_if = "Option::is_none")] - #[serde(default)] - pubkey: Option, - /// The subject is the Cosmos account id of the user, or the public key of the device - sub: String, -} - -#[allow(unused)] -#[derive(Debug, Clone)] -pub(crate) struct Jwt { - header: JwtHeader, - payload: JwtPayload, - signature: String, - jwt: String, -} - -impl Jwt { - pub fn new_secp256k1(wallet: &DirectSecp256k1HdWallet) -> Jwt { - let timestamp = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs() as u128; - tracing::debug!("timestamp: {}", timestamp); - Jwt::new_secp256k1_with_now(wallet, timestamp) - } - - pub fn new_secp256k1_synced(wallet: &DirectSecp256k1HdWallet, remote_time: VpnApiTime) -> Jwt { - Jwt::new_secp256k1_with_now(wallet, remote_time.estimate_remote_now_unix()) - } - - pub fn new_secp256k1_with_now(wallet: &DirectSecp256k1HdWallet, now: u128) -> Jwt { - let account = wallet.get_accounts().unwrap(); // TODO: result - let address = account[0].address(); - let public_key = account[0].public_key().to_bytes(); - - let header = JwtHeader { - typ: "JWT".to_string(), - alg: "ES256K".to_string(), - }; - let payload = JwtPayload { - iat: now, - exp: 30, - pubkey: Some(bs58::encode(&public_key).into_string()), - sub: address.to_string(), - }; - - let header_base64 = base64_url::encode(&json!(header.clone()).to_string()); - let payload_base64 = base64_url::encode(&json!(payload.clone()).to_string()); - let message = format!("{header_base64}.{payload_base64}").into_bytes(); - - let signature = wallet.sign_raw(address, message).unwrap(); // TODO: result - let signature_bytes = signature.to_bytes().to_vec(); - - let signature_base64 = base64_url::encode(&signature_bytes); - - let jwt = format!("{header_base64}.{payload_base64}.{signature_base64}"); - - Jwt { - header, - payload, - signature: signature_base64, - jwt, - } - } - - pub fn new_ecdsa(key_pair: &ed25519::KeyPair) -> Jwt { - let timestamp = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs() as u128; - Jwt::new_ecdsa_with_now(key_pair, timestamp) - } - - pub fn new_ecdsa_synced(key_pair: &ed25519::KeyPair, remote_time: VpnApiTime) -> Jwt { - Jwt::new_ecdsa_with_now(key_pair, remote_time.estimate_remote_now_unix()) - } - - pub fn new_ecdsa_with_now(key_pair: &ed25519::KeyPair, now: u128) -> Jwt { - let header = JwtHeader { - typ: "JWT".to_string(), - alg: "ECDSA".to_string(), - }; - let payload = JwtPayload { - iat: now, - exp: 30, - pubkey: None, - sub: key_pair.public_key().to_base58_string(), - }; - - let header_base64 = base64_url::encode(&json!(header.clone()).to_string()); - let payload_base64 = base64_url::encode(&json!(payload.clone()).to_string()); - let message = format!("{header_base64}.{payload_base64}").into_bytes(); - let to_sign = Sha256::digest(&message); - - let signature = key_pair.private_key().sign(to_sign); - let signature_bytes = signature.to_bytes(); - - let signature_base64 = base64_url::encode(&signature_bytes); - - let jwt = format!("{header_base64}.{payload_base64}.{signature_base64}"); - - Jwt { - header, - payload, - signature: signature_base64, - jwt, - } - } -} - -impl fmt::Display for Jwt { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.jwt) - } -} - -#[cfg(test)] -mod tests { - use nym_crypto::asymmetric::ed25519; - use nym_validator_client::DirectSecp256k1HdWallet; - - use super::*; - - fn get_secp256k1_keypair() -> DirectSecp256k1HdWallet { - let mnemonic = "kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece"; - let mnemonic = bip39::Mnemonic::parse(mnemonic).unwrap(); - DirectSecp256k1HdWallet::from_mnemonic("n", mnemonic) - } - - #[test] - fn secp256k1_jwt_matches_javascript() { - let now = 1722535718u128; - let jwt_expected_from_js_snapshot = "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjMwLCJpYXQiOjE3MjI1MzU3MTgsInB1YmtleSI6IndneFpTM25CbWJBd2Nud0FpTnlDTjE5dWNTZHo5cVdkUXlidDJyYWtQVUhyIiwic3ViIjoibjE4Y2phemx4dTd0ODZzODV3YWwzbTdobms4ZXE3cGNmYWtoZHE1MyJ9.qxwY96D-vzMxHWZ840_l6YVDeuZeEkYqz2FaPS8ROztEqipXWCYUi8M1YTH1ZUuNyjgDAMS3NAM3hYvY09ODWQ"; - let jwt_expected_from_js_snapshot_components: Vec<&str> = - jwt_expected_from_js_snapshot.split('.').collect(); - - let wallet = get_secp256k1_keypair(); - let jwt = Jwt::new_secp256k1_with_now(&wallet, now); - - let jwt_str = jwt.to_string(); - let jwt_components: Vec<&str> = jwt_str.split('.').collect(); - - if jwt_str != jwt_expected_from_js_snapshot { - println!("== secp256k1 / ED256K1 =="); - println!( - "jwt_expected_from_js_snapshot = {}", - jwt_expected_from_js_snapshot - ); - println!("jwt_str = {}", jwt_str); - } - - assert_eq!( - jwt_expected_from_js_snapshot_components[0], - jwt_components[0] - ); // header - assert_eq!( - jwt_expected_from_js_snapshot_components[1], - jwt_components[1] - ); // payload - assert_eq!( - jwt_expected_from_js_snapshot_components[2], - jwt_components[2] - ); // signature - - assert_eq!(jwt_expected_from_js_snapshot, jwt_str); // whole JWT strings - } - - fn get_ed25519_keypair() -> ed25519::KeyPair { - // let mnemonic = "kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece"; - let private_key_base58 = "9JqXnPvTrWkq1Yq66d8GbXrcz5eryAhPZvZ46cEsBPUY"; - let public_key_base58 = "4SPdxfBYsuARBw6REQQa5vFiKcvmYiet9sSWqb751i3Z"; - - let private_key = bs58::decode(private_key_base58).into_vec().unwrap(); - let public_key = bs58::decode(public_key_base58).into_vec().unwrap(); - - ed25519::KeyPair::from_bytes(&private_key, &public_key).unwrap() - } - - #[test] - fn ed25519_ecdsa_jwt_matches_javascript() { - let now = 1722535718u128; - let jwt_expected_from_js_snapshot = "eyJhbGciOiJFQ0RTQSIsInR5cCI6IkpXVCJ9.eyJleHAiOjMwLCJpYXQiOjE3MjI1MzU3MTgsInN1YiI6IjRTUGR4ZkJZc3VBUkJ3NlJFUVFhNXZGaUtjdm1ZaWV0OXNTV3FiNzUxaTNaIn0.wSd8y1QdqOVYLf2uTMlnymmiIPQwpxXWd2QvPZ-XqV8O1PNiurQO5JPU65SnaOfggJVA5pnAgZLbj9ciOJKIDg"; - let jwt_expected_from_js_snapshot_components: Vec<&str> = - jwt_expected_from_js_snapshot.split('.').collect(); - - let key_pair = get_ed25519_keypair(); - - let jwt = Jwt::new_ecdsa_with_now(&key_pair, now); - - let jwt_str = jwt.to_string(); - let jwt_components: Vec<&str> = jwt_str.split('.').collect(); - - if jwt_str != jwt_expected_from_js_snapshot { - println!("== ed25519 / ECDSA =="); - println!( - "jwt_expected_from_js_snapshot = {}", - jwt_expected_from_js_snapshot - ); - println!("jwt_str = {}", jwt_str); - } - - assert_eq!( - jwt_expected_from_js_snapshot_components[0], - jwt_components[0] - ); // header - assert_eq!( - jwt_expected_from_js_snapshot_components[1], - jwt_components[1] - ); // payload - assert_eq!( - jwt_expected_from_js_snapshot_components[2], - jwt_components[2] - ); // signature - - assert_eq!(jwt_expected_from_js_snapshot, jwt_str); // whole JWT strings - } -} diff --git a/nym-vpn-api-client/src/lib.rs b/nym-vpn-api-client/src/lib.rs deleted file mode 100644 index ec95365cae4..00000000000 --- a/nym-vpn-api-client/src/lib.rs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -pub mod response; -pub mod types; - -pub(crate) mod jwt; - -mod bootstrap; -mod client; -mod error; -mod network_compatibility; -mod request; -mod routes; - -pub use bootstrap::BootstrapVpnApiClient; -pub use client::VpnApiClient; -pub use error::{HttpClientError, VpnApiClientError}; -pub use network_compatibility::NetworkCompatibility; diff --git a/nym-vpn-api-client/src/network_compatibility.rs b/nym-vpn-api-client/src/network_compatibility.rs deleted file mode 100644 index ff49a50af5d..00000000000 --- a/nym-vpn-api-client/src/network_compatibility.rs +++ /dev/null @@ -1,35 +0,0 @@ -use serde::{Deserialize, Serialize}; -use std::fmt; - -use crate::response::NetworkCompatibilityResponse; - -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] -pub struct NetworkCompatibility { - pub core: String, - pub ios: String, - pub macos: String, - pub tauri: String, - pub android: String, -} - -impl fmt::Display for NetworkCompatibility { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "core: {}, ios: {}, macos: {}, tauri: {}, android: {}", - self.core, self.ios, self.macos, self.tauri, self.android - ) - } -} - -impl From for NetworkCompatibility { - fn from(response: NetworkCompatibilityResponse) -> Self { - NetworkCompatibility { - core: response.core, - ios: response.ios, - macos: response.macos, - tauri: response.tauri, - android: response.android, - } - } -} diff --git a/nym-vpn-api-client/src/request.rs b/nym-vpn-api-client/src/request.rs deleted file mode 100644 index 564809bf252..00000000000 --- a/nym-vpn-api-client/src/request.rs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize)] -pub struct CreateAccountRequestBody { - pub account_addr: String, - pub pub_key: String, - pub signature_base64: String, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RegisterDeviceRequestBody { - pub device_identity_key: String, - pub signature: String, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RequestZkNymRequestBody { - pub withdrawal_request: String, - pub ecash_pubkey: String, - pub expiration_date: String, - pub ticketbook_type: String, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct ApplyFreepassRequestBody { - pub code: String, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct CreateSubscriptionInvoicesRequestBody { - pub subscription: String, - pub date: String, - pub status: CreateSubscriptionInvoicesStatus, - pub invoice_no: String, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub enum CreateSubscriptionInvoicesStatus { - Unpaid, - Paid, - Cancelled, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct CreateSubscriptionRequestBody { - pub valid_from_utc: String, - pub subscription_kind: CreateSubscriptionKind, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub enum CreateSubscriptionKind { - OneMonth, - OneYear, - TwoYears, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RequestRefundRequestBody { - subscription_invoice: String, - status: RequestRefundRequestStatus, - user_reason: RequestRefundRequestUserReason, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub enum RequestRefundRequestStatus { - Pending, - Complete, - Rejected, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub enum RequestRefundRequestUserReason { - SubscriptionInError, - PoorPerformance, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct UpdateDeviceRequestBody { - pub status: UpdateDeviceRequestStatus, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub enum UpdateDeviceRequestStatus { - Active, - Inactive, - DeleteMe, -} diff --git a/nym-vpn-api-client/src/response.rs b/nym-vpn-api-client/src/response.rs deleted file mode 100644 index 36b712be283..00000000000 --- a/nym-vpn-api-client/src/response.rs +++ /dev/null @@ -1,658 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::{collections::HashSet, fmt, net::IpAddr}; - -use itertools::Itertools; -use nym_contracts_common::Percent; -use nym_credential_proxy_requests::api::v1::ticketbook::models::TicketbookWalletSharesResponse; -use serde::{Deserialize, Serialize}; -use time::OffsetDateTime; - -use crate::network_compatibility::NetworkCompatibility; - -const MAX_PROBE_RESULT_AGE_MINUTES: i64 = 60; - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -pub struct NymVpnRegisterAccountResponse { - pub created_on_utc: String, - pub last_updated_utc: String, - pub account_addr: String, - pub status: NymVpnRegisterAccountStatusResponse, - pub account_token: String, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub enum NymVpnRegisterAccountStatusResponse { - Active, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -pub struct NymVpnAccountResponse { - pub created_on_utc: String, - pub last_updated_utc: String, - pub account_addr: String, - pub status: NymVpnAccountStatusResponse, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub enum NymVpnAccountStatusResponse { - Active, - Inactive, - DeleteMe, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnAccountSummaryResponse { - pub account: NymVpnAccountResponse, - pub subscription: NymVpnAccountSummarySubscription, - pub devices: NymVpnAccountSummaryDevices, - pub fair_usage: NymVpnAccountSummaryFairUsage, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnAccountSummarySubscription { - pub is_active: bool, - pub active: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnAccountSummaryDevices { - pub active: u64, - pub max: u64, - pub remaining: u64, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] -#[allow(non_snake_case)] -// These fields have the substring 'GB' in them, meaning we can't use `rename_all = "camelCase"` -// like for the other structs -pub struct NymVpnAccountSummaryFairUsage { - pub usedGB: u64, - pub limitGB: u64, - pub resetsOnUtc: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnHealthResponse { - pub status: String, - #[serde(with = "time::serde::rfc3339")] - pub timestamp_utc: OffsetDateTime, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -pub struct NymVpnDevice { - pub created_on_utc: String, - pub last_updated_utc: String, - pub device_identity_key: String, - pub status: NymVpnDeviceStatus, -} - -#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub enum NymVpnDeviceStatus { - Active, - Inactive, - DeleteMe, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnDevicesResponse { - pub total_items: u64, - pub page: u64, - pub page_size: u64, - pub items: Vec, -} - -impl fmt::Display for NymVpnDevicesResponse { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "{}", - self.items - .iter() - .format_with(", ", |item, f| f(&format_args!("{item:?}"))) - ) - } -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnRefundsResponse { - pub total_items: u64, - pub page: u64, - pub page_size: u64, - pub items: Vec, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -pub struct NymVpnRefund { - pub created_on_utc: String, - pub last_updated_utc: String, - pub subscription_invoice: String, - pub status: NymVpnRefundStatus, - pub user_reason: NymVpnRefundUserReason, - pub data: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub enum NymVpnRefundStatus { - Pending, - Complete, - Rejected, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub enum NymVpnRefundUserReason { - SubscriptionInError, - PoorPerformance, - Other, -} - -// Legacy type, because the blinded_shares response for the POST seems to be different than the GET -// Remove once it's not needed anymore -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct NymVpnZkNymPost { - pub created_on_utc: String, - pub last_updated_utc: String, - pub id: String, - pub ticketbook_type: String, - pub valid_until_utc: String, - pub valid_from_utc: String, - pub issued_bandwidth_in_gb: f64, - pub blinded_shares: Option>>, - pub status: NymVpnZkNymStatus, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct NymVpnZkNym { - pub created_on_utc: String, - pub last_updated_utc: String, - pub id: String, - pub ticketbook_type: String, - pub valid_until_utc: String, - pub valid_from_utc: String, - pub issued_bandwidth_in_gb: f64, - pub blinded_shares: Option, - pub status: NymVpnZkNymStatus, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, strum::Display)] -#[serde(rename_all = "snake_case")] -pub enum NymVpnZkNymStatus { - Pending, - Active, - Revoking, - Revoked, - Error, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnZkNymResponse { - pub total_items: u64, - pub page: u64, - pub page_size: u64, - pub items: Vec, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -pub struct NymVpnSubscription { - pub created_on_utc: String, - pub last_updated_utc: String, - pub id: String, - pub valid_until_utc: String, - pub valid_from_utc: String, - pub status: NymVpnSubscriptionStatus, - pub kind: NymVpnSubscriptionKind, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub enum NymVpnSubscriptionStatus { - Pending, - Complete, - Active, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub enum NymVpnSubscriptionKind { - OneMonth, - OneYear, - TwoYears, - Freepass, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnSubscriptionResponse { - pub is_subscription_active: bool, - pub subscription: Option, - pub remaining_allowance_in_gb: f64, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnSubscriptionsResponse { - pub total_items: u64, - pub page: u64, - pub page_size: u64, - pub items: Vec, -} - -#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] -#[serde(rename_all = "camelCase")] -pub struct NymVpnUsagesResponse { - pub total_items: u64, - pub page: u64, - pub page_size: u64, - pub items: Vec, -} - -#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] -pub struct NymVpnUsage { - pub created_on_utc: String, - pub last_updated_utc: String, - pub id: String, - pub subscription_id: String, - pub valid_until_utc: String, - pub valid_from_utc: String, - pub bandwidth_allowance_gb: f64, - pub bandwidth_used_gb: f64, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct NymDirectoryGatewaysResponse(Vec); - -impl NymDirectoryGatewaysResponse { - pub fn into_inner(self) -> Vec { - self.0 - } -} - -impl IntoIterator for NymDirectoryGatewaysResponse { - type Item = NymDirectoryGateway; - type IntoIter = std::vec::IntoIter; - - fn into_iter(self) -> Self::IntoIter { - self.0.into_iter() - } -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct NymDirectoryGateway { - pub identity_key: String, - pub name: String, - pub ip_packet_router: Option, - pub authenticator: Option, - pub location: Location, - pub last_probe: Option, - pub ip_addresses: Vec, - pub mix_port: u16, - pub role: Role, - pub entry: EntryInformation, - // The performance data here originates from the nym-api, and is effectively mixnet performance - // at the time of writing this - pub performance: Percent, - pub build_information: Option, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct EntryInformation { - pub hostname: Option, - pub ws_port: u16, - pub wss_port: Option, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct UxScore { - pub max_score: u8, - pub current_score: u8, - pub color: String, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct IpPacketRouter { - pub address: String, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct Authenticator { - pub address: String, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub enum Role { - // a properly active mixnode - Mixnode { - layer: u8, - }, - - #[serde(alias = "entry", alias = "gateway")] - EntryGateway, - - #[serde(alias = "exit")] - ExitGateway, - - // equivalent of node that's in rewarded set but not in the inactive set - Standby, - - Inactive, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct BuildInformation { - pub build_version: String, - pub commit_branch: String, - pub commit_sha: String, -} - -impl NymDirectoryGateway { - pub fn is_fully_operational_entry(&self) -> bool { - self.last_probe - .as_ref() - .map(|probe| probe.is_fully_operational_entry()) - .unwrap_or(false) - } - - pub fn is_fully_operational_exit(&self) -> bool { - self.last_probe - .as_ref() - .map(|probe| probe.is_fully_operational_exit()) - .unwrap_or(false) - } -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct Location { - pub two_letter_iso_country_code: String, - pub latitude: f64, - pub longitude: f64, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Probe { - pub last_updated_utc: String, - pub outcome: ProbeOutcome, -} - -impl Probe { - pub fn is_fully_operational_entry(&self) -> bool { - if !is_recently_updated(&self.last_updated_utc) { - return false; - } - self.outcome.is_fully_operational_entry() - } - - pub fn is_fully_operational_exit(&self) -> bool { - if !is_recently_updated(&self.last_updated_utc) { - return false; - } - self.outcome.is_fully_operational_exit() - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ProbeOutcome { - pub as_entry: Entry, - pub as_exit: Option, - pub wg: Option, -} - -impl ProbeOutcome { - pub fn is_fully_operational_entry(&self) -> bool { - self.as_entry.can_connect && self.as_entry.can_route - } - - pub fn is_fully_operational_exit(&self) -> bool { - self.as_entry.can_connect - && self.as_entry.can_route - && self.as_exit.as_ref().is_some_and(|exit| { - exit.can_connect - && exit.can_route_ip_v4 - && exit.can_route_ip_external_v4 - && exit.can_route_ip_v6 - && exit.can_route_ip_external_v6 - }) - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Entry { - pub can_connect: bool, - pub can_route: bool, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Exit { - pub can_connect: bool, - pub can_route_ip_v4: bool, - pub can_route_ip_external_v4: bool, - pub can_route_ip_v6: bool, - pub can_route_ip_external_v6: bool, -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -#[serde(rename = "wg")] -pub struct WgProbeResults { - pub can_register: bool, - pub can_handshake: bool, - pub can_resolve_dns: bool, - pub ping_hosts_performance: f32, - pub ping_ips_performance: f32, -} - -fn is_recently_updated(last_updated_utc: &str) -> bool { - if let Ok(last_updated) = last_updated_utc.parse::>() { - let now = chrono::Utc::now(); - let duration = now - last_updated; - duration.num_minutes() < MAX_PROBE_RESULT_AGE_MINUTES - } else { - false - } -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct NymDirectoryGatewayCountriesResponse(Vec); - -impl NymDirectoryGatewayCountriesResponse { - pub fn into_inner(self) -> Vec { - self.0 - } -} - -impl IntoIterator for NymDirectoryGatewayCountriesResponse { - type Item = NymDirectoryCountry; - type IntoIter = std::vec::IntoIter; - - fn into_iter(self) -> Self::IntoIter { - self.0.into_iter() - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct NymDirectoryCountry(String); - -impl NymDirectoryCountry { - pub fn iso_code(&self) -> &str { - &self.0 - } - - pub fn into_string(self) -> String { - self.0 - } -} - -impl From for NymDirectoryCountry { - fn from(s: String) -> Self { - Self(s) - } -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct NymErrorResponse { - pub message: String, - pub message_id: Option, - pub code_reference_id: Option, - pub status: String, -} - -impl fmt::Display for NymErrorResponse { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let fields = [ - Some(format!("message: {}", self.message)), - self.message_id - .as_deref() - .map(|x| format!("message_id: {x}")), - self.code_reference_id - .as_deref() - .map(|x| format!("code_reference_id: {x}")), - Some(format!("status: {}", self.status)), - ] - .iter() - .filter_map(|x| x.clone()) - .collect::>(); - write!(f, "{}", fields.join(", ")) - } -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct ErrorMessage { - message: String, -} - -impl fmt::Display for ErrorMessage { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.message) - } -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct UnexpectedError { - pub message: String, -} - -impl fmt::Display for UnexpectedError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.message) - } -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct StatusOk { - status: String, -} - -impl fmt::Display for StatusOk { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.status) - } -} - -pub fn extract_error_response(err: &E) -> Option -where - E: std::error::Error + 'static, -{ - let mut source = err.source(); - while let Some(err) = source { - if let Some(status) = err - .downcast_ref::>() - .and_then(extract_error_response_inner::) - { - return Some(status); - } - source = err.source(); - } - None -} - -fn extract_error_response_inner(err: &nym_http_api_client::HttpClientError) -> Option -where - E: Clone + std::fmt::Display, -{ - match err { - nym_http_api_client::HttpClientError::EndpointFailure { error, .. } => Some(error.clone()), - _ => None, - } -} - -// The response type we fetch from the discovery endpoint -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub struct NymWellknownDiscoveryItemResponse { - pub network_name: String, - pub nym_api_url: String, - pub nym_vpn_api_url: String, - pub account_management: Option, - pub feature_flags: Option, - pub system_messages: Option>, - pub system_configuration: Option, - pub network_compatibility: Option, -} - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] -pub struct AccountManagementResponse { - pub url: String, - pub paths: AccountManagementPathsResponse, -} - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] -pub struct AccountManagementPathsResponse { - pub sign_up: String, - pub sign_in: String, - pub account: String, -} - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct SystemMessageResponse { - pub name: String, - pub display_from: String, - pub display_until: String, - pub message: String, - pub properties: serde_json::Value, -} - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] -pub struct SystemConfigurationResponse { - pub mix_thresholds: ScoreThresholdsResponse, - pub wg_thresholds: ScoreThresholdsResponse, - pub statistics_recipient: Option, - pub min_supported_app_versions: Option, -} - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] -pub struct NetworkCompatibilityResponse { - pub core: String, - pub macos: String, - pub ios: String, - pub tauri: String, - pub android: String, -} - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)] -pub struct ScoreThresholdsResponse { - pub high: u8, - pub medium: u8, - pub low: u8, -} - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub struct NymWellknownDiscoveryItem { - pub network_name: String, - pub nym_api_url: String, - pub nym_vpn_api_url: String, -} - -pub type RegisteredNetworksResponse = HashSet; diff --git a/nym-vpn-api-client/src/routes.rs b/nym-vpn-api-client/src/routes.rs deleted file mode 100644 index 9e5bcc91e89..00000000000 --- a/nym-vpn-api-client/src/routes.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -pub(crate) const PUBLIC: &str = "public"; -pub(crate) const V1: &str = "v1"; -pub(crate) const ACCOUNT: &str = "account"; -pub(crate) const APPLE: &str = "apple"; -pub(crate) const HEALTH: &str = "health"; -pub(crate) const SUMMARY: &str = "summary"; -pub(crate) const DEVICE: &str = "device"; -pub(crate) const ACTIVE: &str = "active"; -pub(crate) const ZKNYM: &str = "zknym"; -pub(crate) const AVAILABLE: &str = "available"; -pub(crate) const FREEPASS: &str = "freepass"; -pub(crate) const SUBSCRIPTION: &str = "subscription"; -pub(crate) const USAGE: &str = "usage"; -pub(crate) const DIRECTORY: &str = "directory"; -pub(crate) const GATEWAYS: &str = "gateways"; -pub(crate) const COUNTRIES: &str = "countries"; -pub(crate) const ENTRY: &str = "entry"; -pub(crate) const EXIT: &str = "exit"; -pub(crate) const ZK_NYMS: &str = "zk-nyms"; -pub(crate) const TICKETBOOK: &str = "ticketbook"; -pub(crate) const PARTIAL_VERIFICATION_KEYS: &str = "partial-verification-keys"; - -pub(crate) const SHOW_VPN_ONLY: &str = "show_vpn_only"; -pub(crate) const VPN_MIN_PERFORMANCE: &str = "vpn_min_performance"; -pub(crate) const MIXNET_MIN_PERFORMANCE: &str = "mixnet_min_performance"; - -pub(crate) const WELLKNOWN: &str = ".wellknown"; -pub(crate) const ENVS_FILE: &str = "envs.json"; -pub(crate) const DISCOVERY_FILE: &str = "discovery.json"; -pub(crate) const CURRENT_ENV: &str = "current-env.json"; diff --git a/nym-vpn-api-client/src/types/account.rs b/nym-vpn-api-client/src/types/account.rs deleted file mode 100644 index 6a698e65f5a..00000000000 --- a/nym-vpn-api-client/src/types/account.rs +++ /dev/null @@ -1,248 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::fmt; - -use nym_compact_ecash::scheme::keygen::KeyPairUser; -use nym_validator_client::{ - DirectSecp256k1HdWallet, nyxd::bip32::DerivationPath, signing::signer::OfflineSigner as _, -}; -use time::{Duration, OffsetDateTime}; - -use crate::{VpnApiClientError, error::Result, jwt::Jwt}; - -const MAX_ACCEPTABLE_SKEW_SECONDS: i64 = 60; -const SKEW_SECONDS_CONSIDERED_SAME: i64 = 2; - -#[derive(thiserror::Error, Debug)] -pub enum Error { - #[error("wallet error")] - Wallet(#[from] nym_validator_client::signing::direct_wallet::DirectSecp256k1HdWalletError), - - #[error("no accounts in wallet")] - NoAccounts, -} - -#[derive(Clone, Debug)] -pub struct VpnApiAccount { - wallet: DirectSecp256k1HdWallet, - id: String, - pub_key: String, - signature_base64: String, -} - -impl VpnApiAccount { - fn derive_from_wallet(wallet: DirectSecp256k1HdWallet) -> std::result::Result { - let accounts = wallet.get_accounts()?; - let address = accounts.first().ok_or(Error::NoAccounts)?.address(); - let id = address.to_string(); - let pub_key = bs58::encode( - accounts - .first() - .ok_or(Error::NoAccounts)? - .public_key() - .to_bytes(), - ) - .into_string(); - - let message = id.clone().into_bytes(); - let signature = wallet.sign_raw(address, message)?; - let signature_bytes = signature.to_bytes().to_vec(); - let signature_base64 = base64_url::encode(&signature_bytes); - - Ok(Self { - wallet, - id, - pub_key, - signature_base64, - }) - } - - pub fn random() -> Result<(Self, bip39::Mnemonic)> { - let mnemonic = bip39::Mnemonic::generate(24).unwrap(); - let wallet = DirectSecp256k1HdWallet::from_mnemonic("n", mnemonic.clone()); - let account = Self::derive_from_wallet(wallet).map_err(VpnApiClientError::CreateAccount)?; - Ok((account, mnemonic)) - } - - pub fn id(&self) -> &str { - &self.id - } - - pub fn pub_key(&self) -> &str { - &self.pub_key - } - - pub fn signature_base64(&self) -> &str { - &self.signature_base64 - } - - pub(crate) fn jwt(&self, remote_time: Option) -> Jwt { - match remote_time { - Some(remote_time) => Jwt::new_secp256k1_synced(&self.wallet, remote_time), - None => Jwt::new_secp256k1(&self.wallet), - } - } - - pub fn create_ecash_keypair(&self) -> Result { - let hd_path = cosmos_derivation_path(); - let extended_private_key = self - .wallet - .derive_extended_private_key(&hd_path) - .map_err(VpnApiClientError::CosmosDeriveFromPath)?; - Ok(KeyPairUser::new_seeded( - extended_private_key.private_key().to_bytes(), - )) - } - - pub fn get_mnemonic(&self) -> String { - self.wallet.mnemonic() - } -} - -impl TryFrom for VpnApiAccount { - type Error = VpnApiClientError; - - fn try_from(mnemonic: bip39::Mnemonic) -> std::result::Result { - let wallet = DirectSecp256k1HdWallet::from_mnemonic("n", mnemonic.clone()); - Self::derive_from_wallet(wallet).map_err(VpnApiClientError::CreateAccount) - } -} - -fn cosmos_derivation_path() -> DerivationPath { - nym_config::defaults::COSMOS_DERIVATION_PATH - .parse() - .unwrap() -} - -#[derive(Clone, Copy, Debug)] -pub struct VpnApiTime { - // The local time on the client. - pub local_time: OffsetDateTime, - - // The estimated time on the remote server. Based on RTT, it's not guaranteed to be accurate. - pub estimated_remote_time: OffsetDateTime, -} - -impl VpnApiTime { - pub fn from_estimated_remote_time( - local_time: OffsetDateTime, - estimated_remote_time: OffsetDateTime, - ) -> Self { - Self { - local_time, - estimated_remote_time, - } - } - - pub fn from_remote_timestamp( - local_time_before_request: OffsetDateTime, - remote_timestamp: OffsetDateTime, - local_time_after_request: OffsetDateTime, - ) -> Self { - let rtt = local_time_after_request - local_time_before_request; - let estimated_remote_time = remote_timestamp + (rtt / 2); - Self { - local_time: local_time_after_request, - estimated_remote_time, - } - } - - // Local time minus remote time. Meaning if the value is positive, the local time is ahead - // of the remote time. - pub fn local_time_ahead_skew(&self) -> Duration { - self.local_time - self.estimated_remote_time - } - - pub fn is_almost_same(&self) -> bool { - self.local_time_ahead_skew().abs().whole_seconds() < SKEW_SECONDS_CONSIDERED_SAME - } - - pub fn is_acceptable_synced(&self) -> bool { - self.local_time_ahead_skew().abs().whole_seconds() < MAX_ACCEPTABLE_SKEW_SECONDS - } - - pub fn is_synced(&self) -> VpnApiTimeSynced { - if self.is_almost_same() { - VpnApiTimeSynced::AlmostSame - } else if self.is_acceptable_synced() { - VpnApiTimeSynced::AcceptableSynced - } else { - VpnApiTimeSynced::NotSynced - } - } - - pub fn estimate_remote_now(&self) -> OffsetDateTime { - tracing::debug!( - "Estimating remote now using (local time ahead) skew: {}", - self.local_time_ahead_skew() - ); - let local_time_now = OffsetDateTime::now_utc(); - local_time_now - self.local_time_ahead_skew() - } - - pub fn estimate_remote_now_unix(&self) -> u128 { - self.estimate_remote_now().unix_timestamp() as u128 - } -} - -impl fmt::Display for VpnApiTime { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!( - f, - "Local time: {}, Remote time: {}, Skew: {}", - self.local_time, - self.estimated_remote_time, - self.local_time_ahead_skew(), - ) - } -} - -#[derive(Clone, Copy, Debug, PartialEq, Eq)] -pub enum VpnApiTimeSynced { - AlmostSame, - AcceptableSynced, - NotSynced, -} - -impl VpnApiTimeSynced { - pub fn is_synced(&self) -> bool { - matches!( - self, - VpnApiTimeSynced::AlmostSame | VpnApiTimeSynced::AcceptableSynced - ) - } - - pub fn is_not_synced(&self) -> bool { - !self.is_synced() - } -} - -#[cfg(test)] -mod tests { - use crate::types::test_fixtures::{TEST_DEFAULT_MNEMONIC, TEST_DEFAULT_MNEMONIC_ID}; - - use super::*; - - #[test] - fn create_account_from_mnemonic() { - let account = - VpnApiAccount::try_from(bip39::Mnemonic::parse(TEST_DEFAULT_MNEMONIC).unwrap()) - .unwrap(); - assert_eq!(account.id(), TEST_DEFAULT_MNEMONIC_ID); - } - - #[test] - fn create_random_account() { - let (_, mnemonic) = VpnApiAccount::random().unwrap(); - assert_eq!(mnemonic.word_count(), 24); - } - - #[test] - fn derive_wallets() { - for word_count in [12, 24] { - let wallet = DirectSecp256k1HdWallet::generate("n", word_count).unwrap(); - VpnApiAccount::derive_from_wallet(wallet).unwrap(); - } - } -} diff --git a/nym-vpn-api-client/src/types/device.rs b/nym-vpn-api-client/src/types/device.rs deleted file mode 100644 index 9c2178853d1..00000000000 --- a/nym-vpn-api-client/src/types/device.rs +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::{fmt, sync::Arc}; - -use nym_crypto::asymmetric::ed25519; -use sha2::Digest as _; - -use crate::{jwt::Jwt, request::UpdateDeviceRequestStatus}; - -use super::VpnApiTime; - -#[derive(Clone)] -pub struct Device { - keypair: Arc, -} - -impl Device { - pub fn identity_key(&self) -> &ed25519::PublicKey { - self.keypair.public_key() - } - - pub(crate) fn jwt(&self, remote_time: Option) -> Jwt { - match remote_time { - Some(remote_time) => Jwt::new_ecdsa_synced(&self.keypair, remote_time), - None => Jwt::new_ecdsa(&self.keypair), - } - } - - pub fn sign>(&self, message: M) -> DeviceSignature { - let digest = { - let mut hasher = sha2::Sha256::new(); - hasher.update(message); - hasher.finalize() - }; - - DeviceSignature(self.keypair.private_key().sign(digest)) - } - - pub fn sign_identity_key(&self) -> DeviceSignature { - self.sign(self.identity_key().to_base58_string()) - } -} - -impl fmt::Display for Device { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "Device {{ {} }}", self.identity_key().to_base58_string()) - } -} - -impl fmt::Debug for Device { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!( - f, - "Device {{ identity_key: {} }}", - self.identity_key().to_base58_string() - ) - } -} - -impl From> for Device { - fn from(keypair: Arc) -> Self { - Self { keypair } - } -} - -impl From for Device { - fn from(keypair: ed25519::KeyPair) -> Self { - Self { - keypair: Arc::new(keypair), - } - } -} - -// In tests we create from a mnemonic, in production these are always created directly from -// the keypair -#[cfg(test)] -impl From for Device { - fn from(mnemonic: bip39::Mnemonic) -> Self { - let (entropy, _) = mnemonic.to_entropy_array(); - // Entropy is statically >= 32 bytes, so we can safely extract the first 32 - // bytes - let seed = &entropy[0..32]; - - let signing_key = ed25519::PrivateKey::from_bytes(seed).unwrap(); - let verifying_key = signing_key.public_key(); - - let privkey = signing_key.to_bytes().to_vec(); - let pubkey = verifying_key.to_bytes().to_vec(); - - let keypair = ed25519::KeyPair::from_bytes(&privkey, &pubkey).unwrap(); - - Self { - keypair: Arc::new(keypair), - } - } -} - -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum DeviceStatus { - Active, - Inactive, - DeleteMe, -} - -impl From for UpdateDeviceRequestStatus { - fn from(status: DeviceStatus) -> Self { - match status { - DeviceStatus::Active => UpdateDeviceRequestStatus::Active, - DeviceStatus::Inactive => UpdateDeviceRequestStatus::Inactive, - DeviceStatus::DeleteMe => UpdateDeviceRequestStatus::DeleteMe, - } - } -} - -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct DeviceSignature(ed25519::Signature); - -impl DeviceSignature { - pub fn to_bytes(&self) -> [u8; 64] { - self.0.to_bytes() - } - - pub fn to_base64_url_string(&self) -> String { - base64_url::encode(&self.to_bytes()) - } - - pub fn to_base64_string(&self) -> String { - base64_url::unescape(&self.to_base64_url_string()).to_string() - } -} - -#[cfg(test)] -mod tests { - use crate::types::test_fixtures::{ - TEST_DEFAULT_DEVICE_IDENTITY_KEY, TEST_DEFAULT_DEVICE_MNEMONIC, - }; - - use super::*; - - fn ed25519_keypair_fixture() -> ed25519::KeyPair { - // The mnemonic used to generate the keypair - let _mnemonic = "kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece"; - - // The corresponding keypair generated from the mnemonic - let private_key_base58 = "9JqXnPvTrWkq1Yq66d8GbXrcz5eryAhPZvZ46cEsBPUY"; - let public_key_base58 = "4SPdxfBYsuARBw6REQQa5vFiKcvmYiet9sSWqb751i3Z"; - - let private_key = bs58::decode(private_key_base58).into_vec().unwrap(); - let public_key = bs58::decode(public_key_base58).into_vec().unwrap(); - - ed25519::KeyPair::from_bytes(&private_key, &public_key).unwrap() - } - - #[test] - fn verify_ed25519_keypair_fixture() { - let device = Device::from( - bip39::Mnemonic::parse("kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece").unwrap() - ); - let expected_keypair = ed25519_keypair_fixture(); - assert_eq!( - device.keypair.private_key().to_base58_string(), - expected_keypair.private_key().to_base58_string() - ); - assert_eq!( - device.keypair.public_key().to_base58_string(), - expected_keypair.public_key().to_base58_string() - ); - } - - #[test] - fn create_device_from_mnemonic_1() { - let device = Device::from(bip39::Mnemonic::parse(TEST_DEFAULT_DEVICE_MNEMONIC).unwrap()); - assert_eq!( - device.identity_key().to_base58_string(), - TEST_DEFAULT_DEVICE_IDENTITY_KEY - ); - } - - #[test] - fn create_device_from_mnemonic_2() { - let device = Device::from( - bip39::Mnemonic::parse("kiwi ketchup mix canvas curve ribbon congress method feel frozen act annual aunt comfort side joy mesh palace tennis cannon orange name tortoise piece").unwrap() - ); - assert_eq!( - device.identity_key().to_base58_string(), - "4SPdxfBYsuARBw6REQQa5vFiKcvmYiet9sSWqb751i3Z", - ); - assert_eq!( - device.keypair.private_key().to_base58_string(), - "9JqXnPvTrWkq1Yq66d8GbXrcz5eryAhPZvZ46cEsBPUY", - ); - } - - #[test] - fn create_device_from_keypair() { - let device = Device::from(ed25519_keypair_fixture()); - assert_eq!( - device.keypair.public_key().to_base58_string(), - "4SPdxfBYsuARBw6REQQa5vFiKcvmYiet9sSWqb751i3Z", - ); - assert_eq!( - device.keypair.private_key().to_base58_string(), - "9JqXnPvTrWkq1Yq66d8GbXrcz5eryAhPZvZ46cEsBPUY", - ); - } - - #[test] - fn sign_identity_key() { - let device = Device::from(bip39::Mnemonic::parse(TEST_DEFAULT_DEVICE_MNEMONIC).unwrap()); - assert_eq!( - device.identity_key().to_base58_string(), - TEST_DEFAULT_DEVICE_IDENTITY_KEY - ); - - let signature = device.sign_identity_key().to_base64_string(); - assert_eq!( - signature, - "W5Zv1QhG37Al0QQH/9tqOmv1MU9IjfWP1xDq116GGSu/1Z6cnAW0sOyfrIiqdEleUKJB9wC/HjcsifaogymWAw==" - ); - } -} diff --git a/nym-vpn-api-client/src/types/gateway.rs b/nym-vpn-api-client/src/types/gateway.rs deleted file mode 100644 index b480c865655..00000000000 --- a/nym-vpn-api-client/src/types/gateway.rs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -pub use nym_contracts_common::Percent; - -use crate::VpnApiClientError; - -#[derive(Clone, Copy, Default, Debug)] -pub struct GatewayMinPerformance { - pub mixnet_min_performance: Option, - pub vpn_min_performance: Option, -} - -impl GatewayMinPerformance { - pub fn from_percentage_values( - mixnet_min_performance: Option, - vpn_min_performance: Option, - ) -> Result { - let mixnet_min_performance = mixnet_min_performance - .map(Percent::from_percentage_value) - .transpose() - .map_err(VpnApiClientError::InvalidPercentValue)?; - let vpn_min_performance = vpn_min_performance - .map(Percent::from_percentage_value) - .transpose() - .map_err(VpnApiClientError::InvalidPercentValue)?; - Ok(Self { - mixnet_min_performance, - vpn_min_performance, - }) - } - - pub(crate) fn to_param(self) -> Vec<(String, String)> { - let mut params = vec![]; - if let Some(threshold) = self.mixnet_min_performance { - params.push(( - crate::routes::MIXNET_MIN_PERFORMANCE.to_string(), - threshold.to_string(), - )); - }; - if let Some(threshold) = self.vpn_min_performance { - params.push(( - crate::routes::VPN_MIN_PERFORMANCE.to_string(), - threshold.to_string(), - )); - }; - params - } -} - -#[derive(Clone, Debug)] -pub enum GatewayType { - MixnetEntry, - MixnetExit, - Wg, -} - -#[derive(Clone, Copy, Debug)] -pub struct ScoreThresholds { - pub high: u8, - pub medium: u8, - pub low: u8, -} diff --git a/nym-vpn-api-client/src/types/mod.rs b/nym-vpn-api-client/src/types/mod.rs deleted file mode 100644 index 6aecd37fd23..00000000000 --- a/nym-vpn-api-client/src/types/mod.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -mod account; -mod device; -mod gateway; -mod platform; - -#[cfg(test)] -mod test_fixtures; - -pub use account::{Error as AccountError, VpnApiAccount, VpnApiTime, VpnApiTimeSynced}; -pub use device::{Device, DeviceStatus}; -pub use gateway::{GatewayMinPerformance, GatewayType, ScoreThresholds}; -pub use platform::Platform; - -pub use nym_contracts_common::{NaiveFloat, Percent}; diff --git a/nym-vpn-api-client/src/types/platform.rs b/nym-vpn-api-client/src/types/platform.rs deleted file mode 100644 index ae15908c2ee..00000000000 --- a/nym-vpn-api-client/src/types/platform.rs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2025 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -#[derive(Clone, Copy, Debug)] -pub enum Platform { - Apple, - Unspecified, -} -impl Platform { - pub fn api_path_component(&self) -> &'static str { - match self { - Platform::Apple => crate::routes::APPLE, - Platform::Unspecified => "", - } - } -} diff --git a/nym-vpn-api-client/src/types/test_fixtures.rs b/nym-vpn-api-client/src/types/test_fixtures.rs deleted file mode 100644 index c5267e972fe..00000000000 --- a/nym-vpn-api-client/src/types/test_fixtures.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -// The default acccount mnemonic, the same as in the js integration tests -pub(super) const TEST_DEFAULT_MNEMONIC: &str = "range mystery picture decline olympic acoustic lesson quick rebuild panda royal fold start leader egg hammer width olympic worry length crawl couch link mobile"; -pub(super) const TEST_DEFAULT_MNEMONIC_ID: &str = "n1sslaag27wfydyrvyua72hg5e0vteglxrs8nw3c"; - -// The default device mnemonic, the same as in the js integration tests -pub(super) const TEST_DEFAULT_DEVICE_MNEMONIC: &str = "pitch deputy proof fire movie put bread ribbon what chef zebra car vacuum gadget steak board state oyster layer glory barely thrive nice box"; -pub(super) const TEST_DEFAULT_DEVICE_IDENTITY_KEY: &str = - "FJDUECYAeosXhNGjxf8w5MJM7N2DfDwQznvWwTxJz6ft"; diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index 800644ea54d..6bd7ba4e5de 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -49,6 +49,7 @@ nym-bin-common = { path = "../../../common/bin-common", features = [ ] } nym-gateway-directory = { path = "../../../nym-gateway-directory" } +nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 bytecodec = { workspace = true } httpcodec = { workspace = true } diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs index f6e28d4f41b..88e9f83c9ce 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs @@ -14,16 +14,17 @@ use tokio_util::sync::CancellationToken; use tracing::{debug, error}; use crate::{ - current::{ + ip_packet_client::current::{ request::IpPacketRequest, response::{ ConnectResponse, ConnectResponseReply, ControlResponse, IpPacketResponse, IpPacketResponseData, }, }, - error::{Error, Result}, - helpers::check_ipr_message_version, + ip_packet_client::helpers::check_ipr_message_version, }; +use super::error::{Error, Result}; + pub type SharedMixnetClient = Arc>>; @@ -94,7 +95,7 @@ impl IprClientConnect { } async fn send_connect_request( - &self, + &mut self, ip_packet_router_address: IpPacketRouterAddress, ) -> Result { let (request, request_id) = IpPacketRequest::new_connect_request(None); diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/error.rs b/sdk/rust/nym-sdk/src/ip_packet_client/error.rs index 0979602dc24..f7522970bdc 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/error.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/error.rs @@ -1,12 +1,13 @@ // Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use crate::current::response::ConnectFailureReason; +use crate::ip_packet_client::current::response::ConnectFailureReason; #[derive(thiserror::Error, Debug)] pub enum Error { #[error("nym sdk")] - SdkError(#[source] Box), + // SdkError(#[source] Box), + SdkError(#[source] Box), #[error( "received response with version v{received}, the client is too new and can only understand v{expected}" diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs b/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs index 612657ce9de..8265a95345c 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs @@ -2,10 +2,9 @@ // SPDX-License-Identifier: GPL-3.0-only use std::cmp::Ordering; - pub use crate::mixnet::ReconstructedMessage; - -use crate::{current::VERSION as CURRENT_VERSION, error::Result, Error}; +use crate::ip_packet_client::current::VERSION as CURRENT_VERSION; +use super::error::{Error, Result}; pub(crate) fn check_ipr_message_version(message: &ReconstructedMessage) -> Result<()> { // Assuming it's a IPR message, it will have a version as its first byte diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs b/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs index 4642f788af5..d038710b040 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs @@ -4,16 +4,16 @@ use bytes::Bytes; use futures::StreamExt; use nym_ip_packet_requests::{codec::MultiIpPacketCodec, v8::response::ControlResponse}; -pub use nym_sdk::mixnet::ReconstructedMessage; +use nym_sphinx::receiver::ReconstructedMessage; use tokio_util::codec::FramedRead; use tracing::{debug, error, info, warn}; use crate::{ - current::{ + ip_packet_client::current::{ request::{ControlRequest, IpPacketRequest, IpPacketRequestData}, response::{InfoLevel, IpPacketResponse, IpPacketResponseData}, }, - helpers::check_ipr_message_version, + ip_packet_client::helpers::check_ipr_message_version, }; pub enum MixnetMessageOutcome { @@ -30,6 +30,19 @@ pub enum IprListenerError { IprClientError(#[from] crate::Error), } +impl From for IprListenerError { + fn from(err: super::error::Error) -> Self { + match err { + super::error::Error::SdkError(sdk_err) => { + IprListenerError::IprClientError(*sdk_err) + } + other => IprListenerError::IprClientError( + crate::Error::new_unsupported(format!("IP packet error: {}", other)) + ) + } + } +} + impl IprListener { pub fn new() -> Self { Self {} diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 2b0b122da50..cc63e3b10ad 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -1,17 +1,17 @@ use super::mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; use futures::StreamExt; -// use nym_gateway_directory::IpPacketRouterAddress; -// use nym_ip_packet_requests::{ -// codec::MultiIpPacketCodec, -// v8::{ -// request::{ControlRequest, IpPacketRequest, IpPacketRequestData}, -// response::{ -// ConnectResponse, ConnectResponseReply, ControlResponse, InfoLevel, IpPacketResponse, -// IpPacketResponseData, -// }, -// }, -// IpPair, -// }; +use nym_gateway_directory::IpPacketRouterAddress; +use nym_ip_packet_requests::{ + codec::MultiIpPacketCodec, + v8::{ + request::{ControlRequest, IpPacketRequest, IpPacketRequestData}, + response::{ + ConnectResponse, ConnectResponseReply, ControlResponse, InfoLevel, IpPacketResponse, + IpPacketResponseData, + }, + }, + IpPair, +}; use nym_sphinx::receiver::ReconstructedMessage; use std::io; use std::pin::Pin; From df1dc7c085338c7d03f3f06d3e149b714c4af540 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 9 Jul 2025 15:13:52 +0200 Subject: [PATCH 031/139] mod ip_packet_client --- sdk/rust/nym-sdk/src/ip_packet_client.rs | 4 ++-- sdk/rust/nym-sdk/src/ip_packet_client/error.rs | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sdk/rust/nym-sdk/src/ip_packet_client.rs b/sdk/rust/nym-sdk/src/ip_packet_client.rs index 8aa5ffdf427..c753206a03a 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client.rs @@ -3,8 +3,8 @@ mod connect; mod error; -mod helpers; -mod listener; +pub mod helpers; +pub mod listener; pub use connect::IprClientConnect; pub use error::Error; diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/error.rs b/sdk/rust/nym-sdk/src/ip_packet_client/error.rs index f7522970bdc..f929f2cd64c 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/error.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/error.rs @@ -49,5 +49,4 @@ pub enum Error { }, } -// Result type based on our error type pub type Result = std::result::Result; From 92220da678eac44fd3c5462a29a926bdc1e39fe6 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 9 Jul 2025 15:14:16 +0200 Subject: [PATCH 032/139] got ipr wrapper connected --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 2 +- .../src/stream_wrapper/connection-logics.md | 73 +++ .../stream_wrapper/mixnet_stream_wrapper.rs | 13 +- .../mixnet_stream_wrapper_ipr.rs | 421 +++++++++++++++++- 4 files changed, 489 insertions(+), 20 deletions(-) create mode 100644 sdk/rust/nym-sdk/src/stream_wrapper/connection-logics.md diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index c032cd6842d..cfdceab5bb5 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -4,4 +4,4 @@ mod mixnet_stream_wrapper; mod mixnet_stream_wrapper_ipr; pub use mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; -// pub use mixnet_stream_wrapper_ipr::{} TODO +pub use mixnet_stream_wrapper_ipr::{IpMixSocket, IpMixStream}; diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/connection-logics.md b/sdk/rust/nym-sdk/src/stream_wrapper/connection-logics.md new file mode 100644 index 00000000000..849b04d47dc --- /dev/null +++ b/sdk/rust/nym-sdk/src/stream_wrapper/connection-logics.md @@ -0,0 +1,73 @@ + +## MixStream +WRITING (App → Mixnet): +1. App calls stream.write(bytes) +2. AsyncWrite implementation: + - Deserializes bytes as InputMessage using InputMessageCodec + - Forwards InputMessage to MixnetClient +3. MixnetClient sends to mixnet + +READING (Mixnet → App): +1. MixnetClient receives ReconstructedMessage from Mixnet +2. Stream implementation buffers messages +3. AsyncRead implementation: + - Encodes ReconstructedMessage using ReconstructedMessageCodec + - Returns encoded bytes to app + +Flow: App bytes ↔ InputMessage/ReconstructedMessage ↔ Mixnet + +## IP Client +CONNECTING: +1. Create MixnetClient +2. Send IpPacketRequest::Connect wrapped in InputMessage +3. Use wait_for_messages() to get ReconstructedMessage from Mixnet +4. Parse as IpPacketResponse::Connect +5. Extract allocated IPs + +SENDING IP PACKETS: +1. App provides IP packet bytes +2. Wrap in IpPacketRequest::Data +3. Send as InputMessage through MixnetClient + +RECEIVING IP PACKETS: +1. IprListener processes ReconstructedMessages +2. Parse as IpPacketResponse +3. Extract IP packets from IpPacketResponse::Data using MultiIpPacketCodec +4. Return raw IP packet bytes to app + +Flow: IP packets → IpPacketRequest → InputMessage → Mixnet → IPR + IPR → Mixnet → IpPacketResponse → IP packets + +## IPRMixStream +SETUP: +1. Create MixStream to IPR address +2. Split into reader/writer +3. Background task owns reader, processes IpPacketResponse messages +4. Main struct owns writer for sending + +CONNECTING +1. Send IpPacketRequest::Connect wrapped in InputMessage +2. Use wait_for_messages() to get ReconstructedMessage from Mixnet +3. Parse as IpPacketResponse::Connect +4. Extract allocated IPs + +WRITING (TUN → IPR?): +1. TUN device calls stream.write(ip_packet_bytes) +2. AsyncWrite implementation: + - Wrap IP packet in IpPacketRequest::Data + - Serialize to bytes using to_bytes() + - Call writer.write_bytes() which: + - Wraps in InputMessage + - Sends through mixnet + +READING (IPR → TUN): +1. Background task continuously reads from MixStreamReader +2. Decodes bytes as ReconstructedMessage +3. Parses as IpPacketResponse +4. Extracts IP packets from Data responses +5. Adds to shared buffer +6. AsyncRead polls buffer and returns IP packets to TUN + +Flow: +Write: TUN IP packet → IpPacketRequest → serialize → MixStreamWriter → InputMessage → Mixnet → IPR +Read: IPR → Mixnet → MixStreamReader → ReconstructedMessage → IpPacketResponse → extract IP packets → buffer → TUN diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 715548cf8b2..2b2834b2d6c 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -27,14 +27,16 @@ use tracing::{debug, info, warn}; /// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). /// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances from a single MixSocket, all connected to different Recipients. pub struct MixSocket { - inner: MixnetClient, + pub inner: MixnetClient, } impl MixSocket { /// Create a new socket that is disconnected from the Mixnet - kick off the Mixnet client with config for builder. /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream instance. pub async fn new() -> Result { - todo!() + // TODO make this take an option, if Some create with builder pattern, if None make ephemeral like we already are. + let inner = MixnetClient::connect_new().await?; + Ok(MixSocket { inner }) } /// Connect to a specific peer (Nym Client) and return a Stream (cf TcpSocket::connect() / TcpStream::new()). @@ -61,7 +63,7 @@ impl MixSocket { } pub struct MixStream { - client: MixnetClient, + pub client: MixnetClient, peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. peer_surbs: Option, // ..since we might just be using SURBs instead } @@ -158,6 +160,11 @@ impl MixStream { Ok(()) } + /// Sidesteps the AsyncRead/codec in place of using the Mixnet Client's message-based functionality for getting messages: using to debug connection with the IPR Stream Wrapper. + pub async fn wait_for_messages(&mut self) -> Option> { + self.client.wait_for_messages().await + } + /// Disconnect client from the Mixnet - note that disconnected clients cannot currently be reconnected. pub async fn disconnect(self) { debug!("Disconnecting"); diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index cc63e3b10ad..6dfea874f62 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -1,22 +1,411 @@ -use super::mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; -use futures::StreamExt; -use nym_gateway_directory::IpPacketRouterAddress; +use crate::UserAgent; +use crate::{mixnet::Recipient, Error}; + +use super::mixnet_stream_wrapper::{MixSocket, MixStream}; + +use bytes::Bytes; +use bytes::BytesMut; +use nym_gateway_directory::{ + Config as GatewayConfig, GatewayClient, GatewayType, IpPacketRouterAddress, +}; use nym_ip_packet_requests::{ - codec::MultiIpPacketCodec, v8::{ - request::{ControlRequest, IpPacketRequest, IpPacketRequestData}, - response::{ - ConnectResponse, ConnectResponseReply, ControlResponse, InfoLevel, IpPacketResponse, - IpPacketResponseData, - }, + request::IpPacketRequest, + response::{ConnectResponseReply, ControlResponse, IpPacketResponse, IpPacketResponseData}, }, IpPair, }; -use nym_sphinx::receiver::ReconstructedMessage; -use std::io; -use std::pin::Pin; -use std::task::{Context, Poll}; +use nym_sphinx::receiver::ReconstructedMessageCodec; +use std::sync::Once; use std::time::Duration; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, ReadBuf}; -use tokio_util::codec::FramedRead; -use tracing::{debug, error, info, warn}; +use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt}; +use tokio_util::codec::{Decoder, FramedRead}; +use tracing::{debug, error, info}; + +use crate::ip_packet_client::{ + helpers::check_ipr_message_version, + listener::{IprListener, MixnetMessageOutcome}, +}; + +const IPR_CONNECT_TIMEOUT: Duration = Duration::from_secs(60); + +#[derive(Debug, Clone, PartialEq)] +enum ConnectionState { + Disconnected, + Connecting, + Connected, +} + +pub struct IpMixSocket { + inner: MixSocket, + gateway_client: GatewayClient, +} + +impl IpMixSocket { + pub async fn new() -> Result { + let inner = MixSocket::new().await?; + let gateway_client = Self::create_gateway_client()?; + Ok(Self { + inner, + gateway_client, + }) + } + + fn create_gateway_client() -> Result { + let user_agent = UserAgent { + application: "nym-ipr-streamer".to_string(), + version: "0.0.1".to_string(), + platform: "xxxxxxx".to_string(), + git_commit: "".to_string(), + }; + + let mainnet_network_defaults = crate::NymNetworkDetails::default(); + let api_url = mainnet_network_defaults + .endpoints + .first() + .unwrap() + .api_url() + .unwrap(); + + let nyxd_url = mainnet_network_defaults + .endpoints + .first() + .unwrap() + .nyxd_url(); + + let nym_vpn_api_url = mainnet_network_defaults.nym_vpn_api_url().unwrap(); + + let config = GatewayConfig { + nyxd_url, + api_url, + nym_vpn_api_url: Some(nym_vpn_api_url), + min_gateway_performance: None, + mix_score_thresholds: None, + wg_score_thresholds: None, + }; + + Ok(GatewayClient::new(config, user_agent).unwrap()) + } + + async fn get_best_ipr_address(&self) -> Result { + let exit_gateways = self + .gateway_client + .lookup_gateways(GatewayType::MixnetExit) + .await + .unwrap(); + + info!("Found {} Exit Gateways", exit_gateways.len()); + + let selected_gateway = exit_gateways + .into_iter() + .filter(|gw| gw.has_ipr_address()) + .max_by_key(|gw| { + gw.mixnet_performance + .map(|p| p.round_to_integer()) + .unwrap_or(0) + }) + .unwrap(); + + let ipr_address = selected_gateway.ipr_address.unwrap(); + + info!( + "Using IPR: {} (Gateway: {}, Performance: {:?})", + ipr_address, + selected_gateway.identity(), + selected_gateway.mixnet_performance + ); + + Ok(ipr_address) + } + + pub async fn connect(&self) -> Result { + let ipr_address = self.get_best_ipr_address().await?; + let stream = MixStream::new(None, Recipient::from(ipr_address.clone())).await; + Ok(IpMixStream::new(stream, ipr_address)) + } + + pub fn nym_address(&self) -> &Recipient { + self.inner.nym_address() + } +} + +pub struct IpMixStream { + stream: MixStream, + ipr_address: IpPacketRouterAddress, + listener: IprListener, + allocated_ips: Option, + connection_state: ConnectionState, +} + +impl IpMixStream { + fn new(stream: MixStream, ipr_address: IpPacketRouterAddress) -> Self { + Self { + stream, + ipr_address, + listener: IprListener::new(), + allocated_ips: None, + connection_state: ConnectionState::Disconnected, + } + } + + async fn send_ipr_request(&mut self, request: IpPacketRequest) -> Result<(), Error> { + let request_bytes = request.to_bytes()?; + self.stream.write_bytes(&request_bytes).await + } + + pub async fn connect_tunnel(&mut self) -> Result { + if self.connection_state != ConnectionState::Disconnected { + return Err(Error::new_unsupported( + "Already connected or connecting".to_string(), + )); + } + + self.connection_state = ConnectionState::Connecting; + info!("Connecting to IP packet router: {}", self.ipr_address); + + match self.connect_inner().await { + Ok(ip_pair) => { + self.allocated_ips = Some(ip_pair.clone()); + self.connection_state = ConnectionState::Connected; + info!( + "Connected to IPv4: {}, IPv6: {}", + ip_pair.ipv4, ip_pair.ipv6 + ); + Ok(ip_pair) + } + Err(e) => { + self.connection_state = ConnectionState::Disconnected; + error!("Failed to connect: {:?}", e); + Err(e) + } + } + } + + async fn connect_inner(&mut self) -> Result { + let (request, request_id) = IpPacketRequest::new_connect_request(None); + debug!("Sending connect request with ID: {}", request_id); + + self.send_ipr_request(request).await?; + self.listen_for_connect_response(request_id).await + } + + async fn listen_for_connect_response(&mut self, request_id: u64) -> Result { + let timeout = tokio::time::sleep(IPR_CONNECT_TIMEOUT); + tokio::pin!(timeout); + + let mut buffer = vec![0u8; 65536]; + + loop { + tokio::select! { + _ = &mut timeout => { + return Err(Error::new_unsupported("Timeout waiting for connect response".to_string())); + } + result = self.stream.read(&mut buffer) => { + match result { + Ok(0) => { + debug!("Stream closed"); + return Err(Error::new_unsupported("Stream closed".to_string())); + } + Ok(n) => { + debug!("Received {} bytes", n); + + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..n]); + + if let Ok(Some(reconstructed)) = codec.decode(&mut buf) { + if let Err(e) = check_ipr_message_version(&reconstructed) { + debug!("Version check failed: {}", e); + continue; + } + if let Ok(response) = IpPacketResponse::from_reconstructed_message(&reconstructed) { + if response.id() == Some(request_id) { + return self.handle_connect_response(response).await; + } + } + } + } + Err(e) => { + error!("Read error: {}", e); + return Err(Error::new_unsupported(format!("Read error: {}", e))); + } + } + } + } + } + } + + async fn handle_connect_response(&self, response: IpPacketResponse) -> Result { + let control_response = match response.data { + IpPacketResponseData::Control(control) => control, + _ => { + return Err(Error::new_unsupported( + "Expected control response".to_string(), + )) + } + }; + + match *control_response { + ControlResponse::Connect(connect_resp) => match connect_resp.reply { + ConnectResponseReply::Success(success) => Ok(success.ips), + ConnectResponseReply::Failure(reason) => Err(Error::new_unsupported(format!( + "Connect denied: {:?}", + reason + ))), + }, + _ => Err(Error::new_unsupported( + "Unexpected control response type".to_string(), + )), + } + } + + pub async fn send_ip_packet(&mut self, packet: &[u8]) -> Result<(), Error> { + if self.connection_state != ConnectionState::Connected { + return Err(Error::new_unsupported("Not connected".to_string())); + } + + let request = IpPacketRequest::new_data_request(packet.to_vec().into()); + self.send_ipr_request(request).await + } + + pub async fn process_incoming(&mut self) -> Result, Error> { + // TODO switch to framedreading? + let mut buffer = vec![0u8; 65536]; + + match tokio::time::timeout(Duration::from_secs(10), self.stream.read(&mut buffer)).await { + Ok(Ok(n)) if n > 0 => { + debug!("Read {} bytes", n); + + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..n]); + + if let Ok(Some(reconstructed)) = codec.decode(&mut buf) { + match self + .listener + .handle_reconstructed_message(reconstructed) + .await + { + Ok(Some(MixnetMessageOutcome::IpPackets(packets))) => { + debug!("Extracted {} IP packets", packets.len()); + Ok(packets) + } + Ok(Some(MixnetMessageOutcome::Disconnect)) => { + info!("Received disconnect"); + self.connection_state = ConnectionState::Disconnected; + self.allocated_ips = None; + Ok(Vec::new()) + } + Ok(Some(MixnetMessageOutcome::MixnetSelfPing)) => { + debug!("Received mixnet self ping"); + Ok(Vec::new()) + } + Ok(None) => Ok(Vec::new()), + Err(e) => { + debug!("Failed to handle message: {}", e); + Ok(Vec::new()) + } + } + } else { + Ok(Vec::new()) + } + } + _ => Ok(Vec::new()), + } + } + + pub fn allocated_ips(&self) -> Option<&IpPair> { + self.allocated_ips.as_ref() + } + + pub fn is_connected(&self) -> bool { + self.connection_state == ConnectionState::Connected + } +} + +impl AsyncRead for IpMixStream { + fn poll_read( + mut self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &mut tokio::io::ReadBuf<'_>, + ) -> std::task::Poll> { + std::pin::Pin::new(&mut self.stream).poll_read(cx, buf) + } +} + +impl AsyncWrite for IpMixStream { + fn poll_write( + mut self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &[u8], + ) -> std::task::Poll> { + std::pin::Pin::new(&mut self.stream).poll_write(cx, buf) + } + + fn poll_flush( + mut self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + std::pin::Pin::new(&mut self.stream).poll_flush(cx) + } + + fn poll_shutdown( + mut self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + std::pin::Pin::new(&mut self.stream).poll_shutdown(cx) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::net::{Ipv4Addr, Ipv6Addr}; + + static INIT: Once = Once::new(); + + fn init_logging() { + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); + } + + #[tokio::test] + async fn connect_to_ipr() -> Result<(), Box> { + init_logging(); + + let socket = IpMixSocket::new().await?; + + let mut stream = socket.connect().await?; + let ip_pair = stream.connect_tunnel().await?; + + let ipv4: Ipv4Addr = ip_pair.ipv4; + assert!(!ipv4.is_unspecified(), "IPv4 address should not be 0.0.0.0"); + + let ipv6: Ipv6Addr = ip_pair.ipv6; + assert!(!ipv6.is_unspecified(), "IPv6 address should not be ::"); + + assert!(stream.is_connected(), "Stream should be connected"); + assert!( + stream.allocated_ips().is_some(), + "Should have allocated IPs" + ); + + Ok(()) + } + + #[tokio::test] + async fn send_ping() -> Result<(), Box> { + // TODO pull in https://github.com/nymtech/nym-vpn-client/blob/develop/nym-vpn-core/crates/nym-connection-monitor/src/packet_helpers.rs#L7-L42 + // TODO pull in https://github.com/nymtech/nym-vpn-client/blob/develop/nym-vpn-core/crates/nym-gateway-probe/src/icmp.rs#L25 + init_logging(); + + let socket = IpMixSocket::new().await?; + + let mut stream = socket.connect().await?; + let ip_pair = stream.connect_tunnel().await?; + + // send ping + // + + Ok(()) + } +} From ffb777300711598d2bf5b097174de178b5ce66d0 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 14 Jul 2025 12:56:39 +0200 Subject: [PATCH 033/139] * pulled in helpers from various files * added readme to explain --- .../nym-sdk/src/ip_packet_client/README.md | 7 + .../nym-sdk/src/ip_packet_client/error.rs | 27 ++ .../nym-sdk/src/ip_packet_client/helpers.rs | 345 +++++++++++++++++- 3 files changed, 376 insertions(+), 3 deletions(-) create mode 100644 sdk/rust/nym-sdk/src/ip_packet_client/README.md diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/README.md b/sdk/rust/nym-sdk/src/ip_packet_client/README.md new file mode 100644 index 00000000000..06b57c3b6f6 --- /dev/null +++ b/sdk/rust/nym-sdk/src/ip_packet_client/README.md @@ -0,0 +1,7 @@ +# Modified `nym-ip-packet-client` +This set of code is made up of functions from several crates from the `nym-vpn-client` monorepo which had to be imported and modified to avoid a circular dependency on the `nym-sdk` package for use in the `mixnet_stream_wrapper_ipr` module, and is made up of: +- a modified version of (basically) the entire `nym-ip-packet-client` +- a set of IP Packet helper functions from the `nym-gateway-probe` +- a set of helpers & types from the `nym-connection-monitor` + +All of these can be found in [`nym-vpn-client/nym-vpn-core/crates/`](https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates). diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/error.rs b/sdk/rust/nym-sdk/src/ip_packet_client/error.rs index f929f2cd64c..a1fbcd2230a 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/error.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/error.rs @@ -47,6 +47,33 @@ pub enum Error { FailedToCreateConnectRequest { source: nym_ip_packet_requests::sign::SignatureError, }, + + /// Below error types are from the nym-connection-monitor crate + #[error( + "timeout waiting for mixnet self ping, the entry gateway is not routing our mixnet traffic" + )] + TimeoutWaitingForMixnetSelfPing, + + #[error("failed to serialize message")] + FailedToSerializeMessage { + #[from] + source: bincode::Error, + }, + + #[error("failed to create icmp echo request packet")] + IcmpEchoRequestPacketCreationFailure, + + #[error("failed to create icmp packet")] + IcmpPacketCreationFailure, + + #[error("failed to create ipv4 packet")] + Ipv4PacketCreationFailure, +} + +impl From for Error { + fn from(err: crate::error::Error) -> Self { + Error::SdkError(Box::new(err)) + } } pub type Result = std::result::Result; diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs b/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs index 8265a95345c..d6eebf9abf0 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/helpers.rs @@ -1,11 +1,33 @@ // Copyright 2023-2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use std::cmp::Ordering; -pub use crate::mixnet::ReconstructedMessage; -use crate::ip_packet_client::current::VERSION as CURRENT_VERSION; use super::error::{Error, Result}; +use crate::ip_packet_client::current::VERSION as CURRENT_VERSION; +pub use crate::mixnet::ReconstructedMessage; +use nym_config::defaults::mixnet_vpn::{NYM_TUN_DEVICE_ADDRESS_V4, NYM_TUN_DEVICE_ADDRESS_V6}; + +use crate::stream_wrapper::IpMixStream; +use nym_ip_packet_requests::{codec::MultiIpPacketCodec, IpPair}; + +use bytes::Bytes; +use pnet_packet::{ + icmp::{ + echo_reply::EchoReplyPacket, + echo_request::{EchoRequestPacket, MutableEchoRequestPacket}, + IcmpPacket, + }, + icmpv6, + ipv4::{Ipv4Packet, MutableIpv4Packet}, + ipv6::{Ipv6Packet, MutableIpv6Packet}, + Packet, +}; +use std::cmp::Ordering; +use std::net::{Ipv4Addr, Ipv6Addr}; + +/** + * This function is from the original nym-ip-packet-client crate. + */ pub(crate) fn check_ipr_message_version(message: &ReconstructedMessage) -> Result<()> { // Assuming it's a IPR message, it will have a version as its first byte if let Some(version) = message.message.first() { @@ -27,3 +49,320 @@ pub(crate) fn check_ipr_message_version(message: &ReconstructedMessage) -> Resul Err(Error::NoVersionInMessage) } } + +/** + * Functions below are from the nym-connection-monitor crate. + */ +pub fn create_icmpv4_echo_request( + sequence_number: u16, + identifier: u16, +) -> Result> { + let buffer = vec![0; 64]; + let mut icmp_echo_request = MutableEchoRequestPacket::owned(buffer) + .ok_or(Error::IcmpEchoRequestPacketCreationFailure)?; + + // Configure the ICMP echo request packet + icmp_echo_request.set_identifier(identifier); + icmp_echo_request.set_sequence_number(sequence_number); + icmp_echo_request.set_icmp_type(pnet_packet::icmp::IcmpTypes::EchoRequest); + icmp_echo_request.set_icmp_code(pnet_packet::icmp::IcmpCode::new(0)); + + // Calculate checksum once we've set all the fields + let icmp_packet = + IcmpPacket::new(icmp_echo_request.packet()).ok_or(Error::IcmpPacketCreationFailure)?; + let checksum = pnet_packet::icmp::checksum(&icmp_packet); + icmp_echo_request.set_checksum(checksum); + + Ok(icmp_echo_request.consume_to_immutable()) +} + +pub fn create_icmpv6_echo_request( + sequence_number: u16, + identifier: u16, + source: &Ipv6Addr, + destination: &Ipv6Addr, +) -> Result> { + let buffer = vec![0; 64]; + // let mut icmp_echo_request = MutableEchoRequestPacket::owned(buffer) + let mut icmp_echo_request = icmpv6::echo_request::MutableEchoRequestPacket::owned(buffer) + .ok_or(Error::IcmpEchoRequestPacketCreationFailure)?; + + // Configure the ICMP echo request packet + icmp_echo_request.set_identifier(identifier); + icmp_echo_request.set_sequence_number(sequence_number); + icmp_echo_request.set_icmpv6_type(pnet_packet::icmpv6::Icmpv6Types::EchoRequest); + icmp_echo_request.set_icmpv6_code(pnet_packet::icmpv6::Icmpv6Code::new(0)); + + // Calculate checksum once we've set all the fields + let icmp_packet = icmpv6::Icmpv6Packet::new(icmp_echo_request.packet()) + .ok_or(Error::IcmpPacketCreationFailure)?; + let checksum = pnet_packet::icmpv6::checksum(&icmp_packet, source, destination); + icmp_echo_request.set_checksum(checksum); + + Ok(icmp_echo_request.consume_to_immutable()) +} + +pub fn wrap_icmp_in_ipv4( + icmp_echo_request: EchoRequestPacket, + source: Ipv4Addr, + destination: Ipv4Addr, +) -> Result { + // 20 bytes for IPv4 header + ICMP payload + let total_length = 20 + icmp_echo_request.packet().len(); + // IPv4 header + ICMP payload + let ipv4_buffer = vec![0u8; 20 + icmp_echo_request.packet().len()]; + let mut ipv4_packet = + MutableIpv4Packet::owned(ipv4_buffer).ok_or(Error::Ipv4PacketCreationFailure)?; + + ipv4_packet.set_version(4); + ipv4_packet.set_header_length(5); + ipv4_packet.set_total_length(total_length as u16); + ipv4_packet.set_ttl(64); + ipv4_packet.set_next_level_protocol(pnet_packet::ip::IpNextHeaderProtocols::Icmp); + ipv4_packet.set_source(source); + ipv4_packet.set_destination(destination); + ipv4_packet.set_flags(pnet_packet::ipv4::Ipv4Flags::DontFragment); + ipv4_packet.set_checksum(0); + ipv4_packet.set_payload(icmp_echo_request.packet()); + + let ipv4_checksum = compute_ipv4_checksum(&ipv4_packet.to_immutable()); + ipv4_packet.set_checksum(ipv4_checksum); + + Ok(ipv4_packet.consume_to_immutable()) +} + +pub fn wrap_icmp_in_ipv6( + icmp_echo_request: icmpv6::echo_request::EchoRequestPacket, + source: Ipv6Addr, + destination: Ipv6Addr, +) -> Result { + let ipv6_buffer = vec![0u8; 40 + icmp_echo_request.packet().len()]; + let mut ipv6_packet = + MutableIpv6Packet::owned(ipv6_buffer).ok_or(Error::Ipv4PacketCreationFailure)?; + + ipv6_packet.set_version(6); + ipv6_packet.set_payload_length(icmp_echo_request.packet().len() as u16); + ipv6_packet.set_next_header(pnet_packet::ip::IpNextHeaderProtocols::Icmpv6); + ipv6_packet.set_hop_limit(64); + ipv6_packet.set_source(source); + ipv6_packet.set_destination(destination); + ipv6_packet.set_payload(icmp_echo_request.packet()); + + Ok(ipv6_packet.consume_to_immutable()) +} + +// Compute IPv4 checksum: sum all 16-bit words, add carry, take one's complement +pub(crate) fn compute_ipv4_checksum(header: &Ipv4Packet) -> u16 { + // Header length in 16-bit words + let len = header.get_header_length() as usize * 2; + let mut sum = 0u32; + + for i in 0..len { + let word = ((header.packet()[2 * i] as u32) << 8) | header.packet()[2 * i + 1] as u32; + sum += word; + } + + // Add the carry + while (sum >> 16) > 0 { + sum = (sum & 0xFFFF) + (sum >> 16); + } + + // One's complement + !sum as u16 +} + +pub(crate) fn is_icmp_echo_reply(packet: &Bytes) -> Option<(u16, Ipv4Addr, Ipv4Addr)> { + if let Some(ipv4_packet) = Ipv4Packet::new(packet) { + if let Some(icmp_packet) = IcmpPacket::new(ipv4_packet.payload()) { + if let Some(echo_reply) = EchoReplyPacket::new(icmp_packet.packet()) { + return Some(( + echo_reply.get_identifier(), + ipv4_packet.get_source(), + ipv4_packet.get_destination(), + )); + } + } + } + None +} + +pub(crate) fn is_icmp_v6_echo_reply(packet: &Bytes) -> Option<(u16, Ipv6Addr, Ipv6Addr)> { + if let Some(ipv6_packet) = Ipv6Packet::new(packet) { + if let Some(icmp_packet) = IcmpPacket::new(ipv6_packet.payload()) { + if let Some(echo_reply) = + pnet_packet::icmpv6::echo_reply::EchoReplyPacket::new(icmp_packet.packet()) + { + return Some(( + echo_reply.get_identifier(), + ipv6_packet.get_source(), + ipv6_packet.get_destination(), + )); + } + } + } + None +} + +/** + * Types and functions below are from the nym-connection-monitor crate. + * The `send_ping_v4` + `_v6` functions have been modified to work with the IPMixStream wrapper instead of relying on a shared MixnetClient. + */ +#[derive(Debug)] +pub enum ConnectionStatusEvent { + MixnetSelfPing, + Icmpv4IprTunDevicePingReply, + Icmpv6IprTunDevicePingReply, + Icmpv4IprExternalPingReply, + Icmpv6IprExternalPingReply, +} + +#[derive(Debug, Clone, Default)] +pub struct IpPingReplies { + pub ipr_tun_ip_v4: bool, + pub ipr_tun_ip_v6: bool, + pub external_ip_v4: bool, + pub external_ip_v6: bool, +} + +impl IpPingReplies { + pub fn new() -> Self { + Self::default() + } + + pub fn register_event(&mut self, event: &ConnectionStatusEvent) { + match event { + ConnectionStatusEvent::MixnetSelfPing => {} + ConnectionStatusEvent::Icmpv4IprTunDevicePingReply => self.ipr_tun_ip_v4 = true, + ConnectionStatusEvent::Icmpv6IprTunDevicePingReply => self.ipr_tun_ip_v6 = true, + ConnectionStatusEvent::Icmpv4IprExternalPingReply => self.external_ip_v4 = true, + ConnectionStatusEvent::Icmpv6IprExternalPingReply => self.external_ip_v6 = true, + } + } +} + +pub enum IcmpBeaconReply { + TunDeviceReply, + ExternalPingReply(Ipv4Addr), +} + +pub enum Icmpv6BeaconReply { + TunDeviceReply, + ExternalPingReply(Ipv6Addr), +} + +pub fn icmp_identifier() -> u16 { + 8475 +} + +// The only real change here is that we don't have to use the wrap() function to turn the incoming data in an InputMessage as this is done by the stream abstraction's write_bytes() via `send_ip_packet()`. +pub async fn send_ping_v4( + stream: &mut IpMixStream, + our_ips: &IpPair, + sequence_number: u16, + identifier: u16, + destination: Ipv4Addr, +) -> Result<()> { + let icmp_echo_request = create_icmpv4_echo_request(sequence_number, identifier)?; + let ipv4_packet = wrap_icmp_in_ipv4(icmp_echo_request, our_ips.ipv4, destination)?; + + let bundled_packet = + MultiIpPacketCodec::bundle_one_packet(ipv4_packet.packet().to_vec().into()); + + stream.send_ip_packet(&bundled_packet).await?; + Ok(()) +} + +// One difference to note here is that since the IPR address is part of the stream (stored on connection) we don't have to pass it manually as in the original version of this code. The other diff is the same as the v4 function above re: not having to wrap the incoming in an InputMessage manually. +pub async fn send_ping_v6( + stream: &mut IpMixStream, + our_ips: &IpPair, + sequence_number: u16, + destination: Ipv6Addr, +) -> Result<()> { + let icmp_identifier = icmp_identifier(); + let icmp_echo_request = create_icmpv6_echo_request( + sequence_number, + icmp_identifier, + &our_ips.ipv6, + &destination, + )?; + let ipv6_packet = wrap_icmp_in_ipv6(icmp_echo_request, our_ips.ipv6, destination)?; + + // Wrap the IPv6 packet in a MultiIpPacket + let bundled_packet = + MultiIpPacketCodec::bundle_one_packet(ipv6_packet.packet().to_vec().into()); + + stream.send_ip_packet(&bundled_packet).await?; + + Ok(()) +} + +pub fn check_for_icmp_beacon_reply( + packet: &Bytes, + icmp_beacon_identifier: u16, + our_ips: IpPair, +) -> Option { + match is_icmp_beacon_reply(packet, icmp_beacon_identifier, our_ips.ipv4) { + Some(IcmpBeaconReply::TunDeviceReply) => { + tracing::debug!("Received ping response from ipr tun device"); + return Some(ConnectionStatusEvent::Icmpv4IprTunDevicePingReply); + } + Some(IcmpBeaconReply::ExternalPingReply(_source)) => { + tracing::debug!("Received ping response from an external ip through the ipr"); + return Some(ConnectionStatusEvent::Icmpv4IprExternalPingReply); + } + None => {} + } + + match is_icmp_v6_beacon_reply(packet, icmp_beacon_identifier, our_ips.ipv6) { + Some(Icmpv6BeaconReply::TunDeviceReply) => { + tracing::debug!("Received ping v6 response from ipr tun device"); + return Some(ConnectionStatusEvent::Icmpv6IprTunDevicePingReply); + } + Some(Icmpv6BeaconReply::ExternalPingReply(_source)) => { + tracing::debug!("Received ping v6 response from an external ip through the ipr"); + return Some(ConnectionStatusEvent::Icmpv6IprExternalPingReply); + } + None => {} + } + + None +} + +pub fn is_icmp_beacon_reply( + packet: &Bytes, + identifier: u16, + destination: Ipv4Addr, +) -> Option { + if let Some((reply_identifier, reply_source, reply_destination)) = is_icmp_echo_reply(packet) { + if reply_identifier == identifier && reply_destination == destination { + if reply_source == NYM_TUN_DEVICE_ADDRESS_V4 { + return Some(IcmpBeaconReply::TunDeviceReply); + } else { + // For external replies, we check if the source is NOT the TUN device + // and NOT our own IP (since external hosts reply from their own IPs) + return Some(IcmpBeaconReply::ExternalPingReply(reply_source)); + } + } + } + None +} + +pub fn is_icmp_v6_beacon_reply( + packet: &Bytes, + identifier: u16, + destination: Ipv6Addr, +) -> Option { + if let Some((reply_identifier, reply_source, reply_destination)) = is_icmp_v6_echo_reply(packet) + { + if reply_identifier == identifier && reply_destination == destination { + if reply_source == NYM_TUN_DEVICE_ADDRESS_V6 { + return Some(Icmpv6BeaconReply::TunDeviceReply); + } else { + // For external replies, check if source is NOT the TUN device + return Some(Icmpv6BeaconReply::ExternalPingReply(reply_source)); + } + } + } + None +} From 508427821eccf9e06e2bb7711e2026a1be2a4a06 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 14 Jul 2025 12:57:40 +0200 Subject: [PATCH 034/139] pull in + mod nym-gateway --- nym-gateway-directory/Cargo.toml | 4 ++-- nym-gateway-directory/src/gateway_client.rs | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 6a875cb4236..fb4ccf68c1b 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -15,8 +15,8 @@ nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38a nym-http-api-client = { path = "../common/http-api-client" } nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 -nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk -nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk +nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo +nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo nym-validator-client = { path = "../common/client-libs/validator-client" } nym-crypto = { path = "../common/crypto", features = [ "rand", diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index d466d596a35..d06bca4ffb3 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -6,21 +6,20 @@ use std::{ net::{IpAddr, SocketAddr}, }; -// pub use ::UserAgent use nym_http_api_client::UserAgent; -use nym_validator_client::{NymApiClient, models::NymNodeDescription, nym_nodes::SkimmedNode}; +use nym_validator_client::{models::NymNodeDescription, nym_nodes::SkimmedNode, NymApiClient}; use nym_vpn_api_client::types::{GatewayMinPerformance, Percent, ScoreThresholds}; use rand::{prelude::SliceRandom, thread_rng}; use tracing::{debug, error, warn}; use url::Url; use crate::{ - Error, NymNode, entries::{ country::Country, gateway::{Gateway, GatewayList, GatewayType, NymNodeList}, }, error::Result, + Error, NymNode, }; #[derive(Clone, Debug)] From 95fc07fe38029f473047a42b424825dd3eec9767 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 14 Jul 2025 13:02:45 +0200 Subject: [PATCH 035/139] * got ipr pings working with stream_wrapper_ipr * updated stream_wrapper with debug methods --- Cargo.lock | 139 ++++++++++++++++ Cargo.toml | 1 + sdk/rust/nym-sdk/Cargo.toml | 12 +- sdk/rust/nym-sdk/src/lib.rs | 3 +- .../stream_wrapper/mixnet_stream_wrapper.rs | 23 +-- .../mixnet_stream_wrapper_ipr.rs | 153 +++++++++++++++--- 6 files changed, 287 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5f6458ad4aa..0240e029890 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -124,9 +124,15 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "ammonia" +<<<<<<< HEAD version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" +======= +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b346764dd0814805de8abf899fe03065bcee69bb1a4771c785817e39f3978f" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "cssparser", "html5ever", @@ -1178,9 +1184,15 @@ dependencies = [ [[package]] name = "clap" +<<<<<<< HEAD version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +======= +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "clap_builder", "clap_derive", @@ -1188,9 +1200,15 @@ dependencies = [ [[package]] name = "clap_builder" +<<<<<<< HEAD version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +======= +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "anstream", "anstyle", @@ -1200,9 +1218,15 @@ dependencies = [ [[package]] name = "clap_complete" +<<<<<<< HEAD version = "4.5.59" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" +======= +version = "4.5.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5abde44486daf70c5be8b8f8f1b66c49f86236edf6fa2abadb4d961c4c6229a" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "clap", ] @@ -1219,9 +1243,15 @@ dependencies = [ [[package]] name = "clap_derive" +<<<<<<< HEAD version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +======= +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "heck 0.5.0", "proc-macro2", @@ -3244,8 +3274,13 @@ dependencies = [ "once_cell", "rand 0.9.2", "ring", +<<<<<<< HEAD "rustls 0.23.32", "thiserror 2.0.17", +======= + "rustls 0.23.29", + "thiserror 2.0.12", +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) "tinyvec", "tokio", "tokio-rustls 0.26.4", @@ -3269,7 +3304,11 @@ dependencies = [ "parking_lot", "rand 0.9.2", "resolv-conf", +<<<<<<< HEAD "rustls 0.23.32", +======= + "rustls 0.23.29", +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) "smallvec", "thiserror 2.0.17", "tokio", @@ -3528,7 +3567,11 @@ dependencies = [ "http 1.3.1", "hyper 1.7.0", "hyper-util", +<<<<<<< HEAD "rustls 0.23.32", +======= + "rustls 0.23.29", +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) "rustls-pki-types", "tokio", "tokio-rustls 0.26.4", @@ -3551,9 +3594,15 @@ dependencies = [ [[package]] name = "hyper-util" +<<<<<<< HEAD version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +======= +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "base64 0.22.1", "bytes", @@ -4710,6 +4759,12 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + [[package]] name = "nom" version = "7.1.3" @@ -6881,6 +6936,7 @@ dependencies = [ "nym-bandwidth-controller", "nym-bin-common", "nym-client-core", + "nym-config 0.1.0", "nym-credential-storage", "nym-credential-utils", "nym-credentials", @@ -6902,6 +6958,7 @@ dependencies = [ "nym-topology", "nym-validator-client", "parking_lot", + "pnet_packet", "rand 0.8.5", "reqwest 0.12.24", "serde", @@ -8383,6 +8440,48 @@ dependencies = [ "plotters-backend", ] +[[package]] +name = "pnet_base" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" +dependencies = [ + "no-std-net", +] + +[[package]] +name = "pnet_macros" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.104", +] + +[[package]] +name = "pnet_macros_support" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" +dependencies = [ + "pnet_base", +] + +[[package]] +name = "pnet_packet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" +dependencies = [ + "glob", + "pnet_base", + "pnet_macros", + "pnet_macros_support", +] + [[package]] name = "polling" version = "2.8.0" @@ -8633,9 +8732,15 @@ dependencies = [ [[package]] name = "psl" +<<<<<<< HEAD version = "2.1.150" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c569a9577fe28cc82ac9969ec31778511f1912b3468fe236c24393bebf8a571" +======= +version = "2.1.124" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "281f96193296bf4916d7a112df4cc578aaf7a4d71f1570667779bb07364ed837" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "psl-types", ] @@ -8674,9 +8779,15 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", +<<<<<<< HEAD "rustls 0.23.32", "socket2 0.6.1", "thiserror 2.0.17", +======= + "rustls 0.23.29", + "socket2", + "thiserror 2.0.12", +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) "tokio", "tracing", "web-time", @@ -8694,7 +8805,11 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash", +<<<<<<< HEAD "rustls 0.23.32", +======= + "rustls 0.23.29", +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) "rustls-pki-types", "slab", "thiserror 2.0.17", @@ -8959,7 +9074,11 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", +<<<<<<< HEAD "rustls 0.23.32", +======= + "rustls 0.23.29", +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) "rustls-pki-types", "serde", "serde_json", @@ -9212,15 +9331,25 @@ dependencies = [ [[package]] name = "rustls" +<<<<<<< HEAD version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +======= +version = "0.23.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "log", "once_cell", "ring", "rustls-pki-types", +<<<<<<< HEAD "rustls-webpki 0.103.7", +======= + "rustls-webpki 0.103.4", +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) "subtle 2.6.1", "zeroize", ] @@ -9301,9 +9430,15 @@ dependencies = [ [[package]] name = "rustls-webpki" +<<<<<<< HEAD version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +======= +version = "0.103.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) dependencies = [ "ring", "rustls-pki-types", @@ -10914,7 +11049,11 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ +<<<<<<< HEAD "rustls 0.23.32", +======= + "rustls 0.23.29", +>>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) "tokio", ] diff --git a/Cargo.toml b/Cargo.toml index af8e5a3b859..046ce857a1e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -305,6 +305,7 @@ pem = "0.8" petgraph = "0.6.5" pin-project = "1.1" pnet_packet = "0.35.0" +pin-project-lite = "0.2.16" publicsuffix = "2.3.0" proc_pidinfo = "0.1.3" quote = "1" diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index 6bd7ba4e5de..ed0a1380c67 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -16,9 +16,9 @@ path = "src/tcp_proxy/bin/proxy_client.rs" [dependencies] nym-client-core = { path = "../../../common/client-core", features = [ - "fs-credentials-storage", - "fs-surb-storage", - "fs-gateways-storage", + "fs-credentials-storage", + "fs-surb-storage", + "fs-gateways-storage", ] } async-trait = { workspace = true } bip39 = { workspace = true } @@ -37,7 +37,7 @@ nym-task = { path = "../../../common/task" } nym-topology = { path = "../../../common/topology" } nym-socks5-client-core = { path = "../../../common/socks5-client-core" } nym-validator-client = { path = "../../../common/client-libs/validator-client", features = [ - "http-client", + "http-client", ] } nym-http-api-client = { path = "../../../common/http-api-client" } nym-socks5-requests = { path = "../../../common/socks5/requests" } @@ -45,7 +45,7 @@ nym-ordered-buffer = { path = "../../../common/socks5/ordered-buffer" } nym-service-providers-common = { path = "../../../service-providers/common" } nym-sphinx-addressing = { path = "../../../common/nymsphinx/addressing" } nym-bin-common = { path = "../../../common/bin-common", features = [ - "basic_tracing", + "basic_tracing", ] } nym-gateway-directory = { path = "../../../nym-gateway-directory" } @@ -67,6 +67,8 @@ toml = { workspace = true } tempfile = { workspace = true } nym-ip-packet-requests = { path = "../../../common/ip-packet-requests" } +pnet_packet = { workspace = true } +nym-config = { path = "../../../common/config" } # tcpproxy dependencies clap = { workspace = true, features = ["derive"] } diff --git a/sdk/rust/nym-sdk/src/lib.rs b/sdk/rust/nym-sdk/src/lib.rs index 21468efed1a..96109488ae9 100644 --- a/sdk/rust/nym-sdk/src/lib.rs +++ b/sdk/rust/nym-sdk/src/lib.rs @@ -1,8 +1,9 @@ //! Rust SDK for the Nym platform //! //! The main component currently is [`mixnet`]. -//! [`tcp_proxy`] is probably a good place to start for anyone wanting to integrate with existing app code and read/write from a socket. //! [`client_pool`] is a configurable client pool. +//! +//! TODO OTHER MODULES mod error; diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 2b2834b2d6c..9c8c2df8e46 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -2,30 +2,20 @@ use crate::mixnet::InputMessage; use crate::mixnet::{MixnetClient, MixnetClientSender, Recipient}; use crate::Error; use bytes::BytesMut; -use futures::SinkExt; use nym_client_core::client::inbound_messages::InputMessageCodec; use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; -use nym_sphinx::receiver::{ReconstructedMessage, ReconstructedMessageCodec}; +use nym_sphinx::receiver::ReconstructedMessage; use std::io; use std::pin::Pin; -use std::sync::Arc; use std::task::{Context, Poll}; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, ReadBuf}; +use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt, ReadBuf}; use tokio::sync::oneshot; -use tokio_util::codec::{Decoder, Encoder}; -use tracing::field::debug; -use tracing::{debug, info, warn}; - -/** - * TODO - * - Convenience methods? Depends on what we want to put in here and what might be used / impl-ed in consuming libraries - * - https://github.com/nymtech/nym-vpn-client/tree/develop/nym-vpn-core/crates/nym-ip-packet-client/src - hook into IPR - * - builder pattern via MixSocket + tests - */ +use tokio_util::codec::Encoder; +use tracing::{debug, info}; /// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. /// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). -/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances from a single MixSocket, all connected to different Recipients. +/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances from a single MixSocket, all connected to different Recipients (aka a one-to-many setup with a single MixnetClient). pub struct MixSocket { pub inner: MixnetClient, } @@ -321,7 +311,10 @@ impl AsyncWrite for MixStreamWriter { #[cfg(test)] mod tests { use super::*; + use nym_sphinx::receiver::ReconstructedMessageCodec; use std::sync::Once; + use tokio::io::AsyncReadExt; + use tokio_util::codec::Decoder; // Quick test fn for easy testing of sending to self before writing Socket impl (see above todo) impl MixSocket { diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 6dfea874f62..90115d5161f 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -1,8 +1,10 @@ +use super::mixnet_stream_wrapper::{MixSocket, MixStream}; +use crate::ip_packet_client::{ + helpers::check_ipr_message_version, IprListener, MixnetMessageOutcome, +}; use crate::UserAgent; use crate::{mixnet::Recipient, Error}; -use super::mixnet_stream_wrapper::{MixSocket, MixStream}; - use bytes::Bytes; use bytes::BytesMut; use nym_gateway_directory::{ @@ -16,21 +18,16 @@ use nym_ip_packet_requests::{ IpPair, }; use nym_sphinx::receiver::ReconstructedMessageCodec; -use std::sync::Once; + use std::time::Duration; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt}; -use tokio_util::codec::{Decoder, FramedRead}; +use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite}; +use tokio_util::codec::{Decoder /*, FramedRead */}; // TODO will need FramedRead later when u switch from bytebuffers use tracing::{debug, error, info}; -use crate::ip_packet_client::{ - helpers::check_ipr_message_version, - listener::{IprListener, MixnetMessageOutcome}, -}; - const IPR_CONNECT_TIMEOUT: Duration = Duration::from_secs(60); #[derive(Debug, Clone, PartialEq)] -enum ConnectionState { +pub enum ConnectionState { Disconnected, Connecting, Connected, @@ -87,7 +84,7 @@ impl IpMixSocket { Ok(GatewayClient::new(config, user_agent).unwrap()) } - async fn get_best_ipr_address(&self) -> Result { + async fn get_ipr_addr(&self) -> Result { let exit_gateways = self .gateway_client .lookup_gateways(GatewayType::MixnetExit) @@ -119,7 +116,7 @@ impl IpMixSocket { } pub async fn connect(&self) -> Result { - let ipr_address = self.get_best_ipr_address().await?; + let ipr_address = self.get_ipr_addr().await?; let stream = MixStream::new(None, Recipient::from(ipr_address.clone())).await; Ok(IpMixStream::new(stream, ipr_address)) } @@ -267,8 +264,8 @@ impl IpMixStream { self.send_ipr_request(request).await } - pub async fn process_incoming(&mut self) -> Result, Error> { - // TODO switch to framedreading? + pub async fn handle_incoming(&mut self) -> Result, Error> { + // TODO switch to framed reading? let mut buffer = vec![0u8; 65536]; match tokio::time::timeout(Duration::from_secs(10), self.stream.read(&mut buffer)).await { @@ -285,7 +282,7 @@ impl IpMixStream { .await { Ok(Some(MixnetMessageOutcome::IpPackets(packets))) => { - debug!("Extracted {} IP packets", packets.len()); + info!("Extracted {} IP packets", packets.len()); Ok(packets) } Ok(Some(MixnetMessageOutcome::Disconnect)) => { @@ -319,6 +316,13 @@ impl IpMixStream { pub fn is_connected(&self) -> bool { self.connection_state == ConnectionState::Connected } + + /// Disconnect inner stream client from the Mixnet - note that disconnected clients cannot currently be reconnected. + pub async fn disconnect_stream(self) { + debug!("Disconnecting"); + self.stream.disconnect().await; + debug!("Disconnected"); + } } impl AsyncRead for IpMixStream { @@ -358,7 +362,12 @@ impl AsyncWrite for IpMixStream { #[cfg(test)] mod tests { use super::*; + use crate::ip_packet_client::helpers::{ + icmp_identifier, is_icmp_echo_reply, is_icmp_v6_echo_reply, send_ping_v4, send_ping_v6, + }; + // use nym_config::defaults::mixnet_vpn::{NYM_TUN_DEVICE_ADDRESS_V4, NYM_TUN_DEVICE_ADDRESS_V6}; // TODO should probably test these as well - reminder to sefl use std::net::{Ipv4Addr, Ipv6Addr}; + use std::sync::Once; static INIT: Once = Once::new(); @@ -370,7 +379,7 @@ mod tests { #[tokio::test] async fn connect_to_ipr() -> Result<(), Box> { - init_logging(); + // init_logging(); let socket = IpMixSocket::new().await?; @@ -389,23 +398,121 @@ mod tests { "Should have allocated IPs" ); + stream.disconnect_stream().await; + Ok(()) } #[tokio::test] - async fn send_ping() -> Result<(), Box> { - // TODO pull in https://github.com/nymtech/nym-vpn-client/blob/develop/nym-vpn-core/crates/nym-connection-monitor/src/packet_helpers.rs#L7-L42 - // TODO pull in https://github.com/nymtech/nym-vpn-client/blob/develop/nym-vpn-core/crates/nym-gateway-probe/src/icmp.rs#L25 + async fn dns_ping_checks() -> Result<(), Box> { init_logging(); let socket = IpMixSocket::new().await?; - let mut stream = socket.connect().await?; let ip_pair = stream.connect_tunnel().await?; - // send ping - // + info!( + "Connected with IPs - IPv4: {}, IPv6: {}", + ip_pair.ipv4, ip_pair.ipv6 + ); + + let external_v4_targets = vec![ + ("Google DNS", Ipv4Addr::new(8, 8, 8, 8)), + ("Cloudflare DNS", Ipv4Addr::new(1, 1, 1, 1)), + ("Quad9 DNS", Ipv4Addr::new(9, 9, 9, 9)), + ]; + + let external_v6_targets = vec![ + ("Google DNS", "2001:4860:4860::8888".parse::()?), + ( + "Cloudflare DNS", + "2606:4700:4700::1111".parse::()?, + ), + ("Quad9 DNS", "2620:fe::fe".parse::()?), + ]; + + let identifier = icmp_identifier(); + let mut successful_v4_pings = 0; + let mut total_v4_pings = 0; + let mut successful_v6_pings = 0; + let mut total_v6_pings = 0; + + for (name, target) in &external_v4_targets { + info!("Testing IPv4 connectivity to {} ({})", name, target); + + for seq in 0..3 { + send_ping_v4(&mut stream, &ip_pair, seq, identifier, *target).await?; + total_v4_pings += 1; + } + } + + for (name, target) in &external_v6_targets { + info!("Testing IPv6 connectivity to {} ({})", name, target); + + for seq in 0..3 { + send_ping_v6(&mut stream, &ip_pair, seq, *target).await?; + total_v6_pings += 1; + } + } + + let collect_timeout = tokio::time::sleep(Duration::from_secs(10)); + tokio::pin!(collect_timeout); + + loop { + tokio::select! { + _ = &mut collect_timeout => { + info!("Finished collecting replies"); + break; + } + result = stream.handle_incoming() => { + if let Ok(packets) = result { + for packet in packets { + if let Some((reply_id, source, dest)) = is_icmp_echo_reply(&packet) { + if reply_id == identifier && dest == ip_pair.ipv4 { + successful_v4_pings += 1; + debug!("IPv4 reply from {}", source); + } + } + + if let Some((reply_id, source, dest)) = is_icmp_v6_echo_reply(&packet) { + if reply_id == identifier && dest == ip_pair.ipv6 { + successful_v6_pings += 1; + debug!("IPv6 reply from {}", source); + } + } + } + } + } + } + } + + let v4_success_rate = (successful_v4_pings as f64 / total_v4_pings as f64) * 100.0; + let v6_success_rate = (successful_v6_pings as f64 / total_v6_pings as f64) * 100.0; + + info!( + "IPv4 external connectivity: {}/{} pings successful ({:.1}%)", + successful_v4_pings, total_v4_pings, v4_success_rate + ); + info!( + "IPv6 external connectivity: {}/{} pings successful ({:.1}%)", + successful_v6_pings, total_v6_pings, v6_success_rate + ); + + assert!(successful_v4_pings > 0, "No IPv4 pings successful"); + assert!( + v4_success_rate >= 75.0, + "IPv4 success rate < 75% (got {:.1}%)", + v4_success_rate + ); + + assert!(successful_v6_pings > 0, "No IPv6 pings successful"); + assert!( + v6_success_rate >= 75.0, + "IPv6 success rate < 75% (got {:.1}%)", + v6_success_rate + ); + stream.disconnect_stream().await; Ok(()) } } From 4dfd09f7deb1c7c612866a135455199a46dc352f Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 21 Jul 2025 12:49:59 +0200 Subject: [PATCH 036/139] comment out logging in test --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 90115d5161f..979aac479ec 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -1,3 +1,6 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + use super::mixnet_stream_wrapper::{MixSocket, MixStream}; use crate::ip_packet_client::{ helpers::check_ipr_message_version, IprListener, MixnetMessageOutcome, @@ -405,7 +408,7 @@ mod tests { #[tokio::test] async fn dns_ping_checks() -> Result<(), Box> { - init_logging(); + // init_logging(); let socket = IpMixSocket::new().await?; let mut stream = socket.connect().await?; From cfe4b7a3d6e142501c2dca95594432b7257eedfd Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 21 Jul 2025 12:50:45 +0200 Subject: [PATCH 037/139] commenting format change + comment out logging in test --- .../src/stream_wrapper/mixnet_stream_wrapper.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 9c8c2df8e46..5fafeb7193b 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -1,3 +1,6 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + use crate::mixnet::InputMessage; use crate::mixnet::{MixnetClient, MixnetClientSender, Recipient}; use crate::Error; @@ -14,8 +17,14 @@ use tokio_util::codec::Encoder; use tracing::{debug, info}; /// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. -/// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). -/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances from a single MixSocket, all connected to different Recipients (aka a one-to-many setup with a single MixnetClient). +/// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its +/// Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, +/// either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of +/// a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). +/// +/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP +/// is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances +/// from a single MixSocket, all connected to different Recipients (aka a one-to-many setup with a single MixnetClient). pub struct MixSocket { pub inner: MixnetClient, } @@ -304,8 +313,6 @@ impl AsyncWrite for MixStreamWriter { /** * Tests TODO: * STREAM + STREAMREADER + STREAMWRITER - * - make sure we can do TLS through this (aka get around the 'superinsecuredontuseinprod mode' flags) - * SOCKET * - general tests: create new + various into() fns */ #[cfg(test)] @@ -331,6 +338,7 @@ mod tests { nym_bin_common::logging::setup_tracing_logger(); }); } + #[tokio::test] async fn simple_surb_reply_stream() -> Result<(), Box> { // init_logging(); From 8c4b7bdb6aa1a7c61e39e2c2dabd65c46e17e1df Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 21 Jul 2025 18:10:35 +0200 Subject: [PATCH 038/139] commenting --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs | 2 +- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 5fafeb7193b..2820bd45972 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -68,7 +68,7 @@ pub struct MixStream { } impl MixStream { - /// Create a MixStream instance and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient). + /// Create a MixStream instance and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient) and connect it. // TODO in future take config from MixSocket if exists in Option<> param, else spin up ephemeral client. Just doing ephemeral for initial sketch. pub async fn new(socket: Option, peer: Recipient) -> Self { let client = match socket { diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 979aac479ec..ebb2b4408f2 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -36,6 +36,9 @@ pub enum ConnectionState { Connected, } +/// Sort of following the socket/stream split of the stream_wrapper abstraction, where connect() returns a stream client that is connected to the IPR of the socket. +/// TODO think on whether to bring this more in line with the stream_wrapper's mirroring of the TcpSocket's logic for spinning out multiple streaming clients communicating +/// with different remote hosts from the same MixSocket (using the same GWs and IPR), but perhaps using different IPRs. Not sure if that's useful for the moment. pub struct IpMixSocket { inner: MixSocket, gateway_client: GatewayClient, @@ -87,6 +90,7 @@ impl IpMixSocket { Ok(GatewayClient::new(config, user_agent).unwrap()) } + /// Grabs an IPR address for routing, at the moment this isn't configurable. async fn get_ipr_addr(&self) -> Result { let exit_gateways = self .gateway_client @@ -118,6 +122,8 @@ impl IpMixSocket { Ok(ipr_address) } + /// Creates a MixStream instance with the stored IPR address, allowing for read/write, use it to create a 'disconnected' IpMixStream instnace. + /// 'Connection' (aka the tunnel creation, which can then be used) is done afterwards via IpMixStream::connect_tunnel(). pub async fn connect(&self) -> Result { let ipr_address = self.get_ipr_addr().await?; let stream = MixStream::new(None, Recipient::from(ipr_address.clone())).await; From 799b8a54281a1e07486fb9fc7d689cb0a76ae137 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 21 Jul 2025 18:28:42 +0200 Subject: [PATCH 039/139] more comments --- .../stream_wrapper/mixnet_stream_wrapper.rs | 2 +- .../mixnet_stream_wrapper_ipr.rs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 2820bd45972..a1124f8854d 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -159,7 +159,7 @@ impl MixStream { Ok(()) } - /// Sidesteps the AsyncRead/codec in place of using the Mixnet Client's message-based functionality for getting messages: using to debug connection with the IPR Stream Wrapper. + /// Sidesteps the AsyncRead/codec in place of using the Mixnet Client's message-based functionality for getting messages: useful for debugging. pub async fn wait_for_messages(&mut self) -> Option> { self.client.wait_for_messages().await } diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index ebb2b4408f2..61cebd17b1c 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -332,6 +332,15 @@ impl IpMixStream { self.stream.disconnect().await; debug!("Disconnected"); } + + /// Split for concurrent read/write (like TcpStream::Split) into IpMixnetStreamReader and IpMixnetStreamWriter. + pub fn split(self) -> (IpMixStreamReader, IpMixStreamWriter) { + // debug!("Splitting IpMixStream"); + // let (sender, receiver) = self.stream.split(); + // debug!("Split IpMixStream into Reader and Writer"); + + todo!() + } } impl AsyncRead for IpMixStream { @@ -368,6 +377,16 @@ impl AsyncWrite for IpMixStream { } } +// TODO - have to double up some functions as with the stream_wrapper +pub struct IpMixStreamReader {} +impl IpMixStreamReader {} +pub struct IpMixStreamWriter {} +impl IpMixStream {} + +/** + * TODO: + * - test split r/w + */ #[cfg(test)] mod tests { use super::*; From 3989eacff961f032ee17ea5a9638a660c6b3fc08 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 22 Jul 2025 01:23:38 +0200 Subject: [PATCH 040/139] Remove unnecessary MixnetClient from IpSocket: streamlining --- .../mixnet_stream_wrapper_ipr.rs | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 61cebd17b1c..10e1a89d310 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -37,10 +37,11 @@ pub enum ConnectionState { } /// Sort of following the socket/stream split of the stream_wrapper abstraction, where connect() returns a stream client that is connected to the IPR of the socket. -/// TODO think on whether to bring this more in line with the stream_wrapper's mirroring of the TcpSocket's logic for spinning out multiple streaming clients communicating -/// with different remote hosts from the same MixSocket (using the same GWs and IPR), but perhaps using different IPRs. Not sure if that's useful for the moment. +/// +/// TODO change later: +/// IpMixSocket doesn't require a MixnetClient, it is more like a disconnected config that can in future probably just be folded into the IpMixStream's setup function; this is a bit of an in-process modification when working on smolMix. pub struct IpMixSocket { - inner: MixSocket, + // inner: MixSocket, gateway_client: GatewayClient, } @@ -49,7 +50,7 @@ impl IpMixSocket { let inner = MixSocket::new().await?; let gateway_client = Self::create_gateway_client()?; Ok(Self { - inner, + // inner, gateway_client, }) } @@ -129,10 +130,6 @@ impl IpMixSocket { let stream = MixStream::new(None, Recipient::from(ipr_address.clone())).await; Ok(IpMixStream::new(stream, ipr_address)) } - - pub fn nym_address(&self) -> &Recipient { - self.inner.nym_address() - } } pub struct IpMixStream { @@ -154,6 +151,10 @@ impl IpMixStream { } } + pub fn nym_address(&self) -> &Recipient { + self.stream.client.nym_address() + } + async fn send_ipr_request(&mut self, request: IpPacketRequest) -> Result<(), Error> { let request_bytes = request.to_bytes()?; self.stream.write_bytes(&request_bytes).await @@ -199,6 +200,7 @@ impl IpMixStream { let timeout = tokio::time::sleep(IPR_CONNECT_TIMEOUT); tokio::pin!(timeout); + // TODO framing let mut buffer = vec![0u8; 65536]; loop { @@ -274,7 +276,7 @@ impl IpMixStream { } pub async fn handle_incoming(&mut self) -> Result, Error> { - // TODO switch to framed reading? + // TODO framing let mut buffer = vec![0u8; 65536]; match tokio::time::timeout(Duration::from_secs(10), self.stream.read(&mut buffer)).await { @@ -433,7 +435,7 @@ mod tests { #[tokio::test] async fn dns_ping_checks() -> Result<(), Box> { - // init_logging(); + init_logging(); let socket = IpMixSocket::new().await?; let mut stream = socket.connect().await?; From 73537776c86c24c8f85eccec06289cb7bf677351 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 22 Jul 2025 13:20:32 +0200 Subject: [PATCH 041/139] removed IpMixSocket; was a bit unnecessary given connection logic --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 2 +- .../mixnet_stream_wrapper_ipr.rs | 169 ++++++++---------- 2 files changed, 72 insertions(+), 99 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index cfdceab5bb5..e85bd5508bd 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -4,4 +4,4 @@ mod mixnet_stream_wrapper; mod mixnet_stream_wrapper_ipr; pub use mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; -pub use mixnet_stream_wrapper_ipr::{IpMixSocket, IpMixStream}; +pub use mixnet_stream_wrapper_ipr::IpMixStream; diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 10e1a89d310..c64e41c509b 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -1,7 +1,7 @@ // Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use super::mixnet_stream_wrapper::{MixSocket, MixStream}; +use super::mixnet_stream_wrapper::MixStream; use crate::ip_packet_client::{ helpers::check_ipr_message_version, IprListener, MixnetMessageOutcome, }; @@ -36,102 +36,73 @@ pub enum ConnectionState { Connected, } -/// Sort of following the socket/stream split of the stream_wrapper abstraction, where connect() returns a stream client that is connected to the IPR of the socket. -/// -/// TODO change later: -/// IpMixSocket doesn't require a MixnetClient, it is more like a disconnected config that can in future probably just be folded into the IpMixStream's setup function; this is a bit of an in-process modification when working on smolMix. -pub struct IpMixSocket { - // inner: MixSocket, - gateway_client: GatewayClient, -} - -impl IpMixSocket { - pub async fn new() -> Result { - let inner = MixSocket::new().await?; - let gateway_client = Self::create_gateway_client()?; - Ok(Self { - // inner, - gateway_client, - }) - } - - fn create_gateway_client() -> Result { - let user_agent = UserAgent { - application: "nym-ipr-streamer".to_string(), - version: "0.0.1".to_string(), - platform: "xxxxxxx".to_string(), - git_commit: "".to_string(), - }; - - let mainnet_network_defaults = crate::NymNetworkDetails::default(); - let api_url = mainnet_network_defaults - .endpoints - .first() - .unwrap() - .api_url() - .unwrap(); - - let nyxd_url = mainnet_network_defaults - .endpoints - .first() - .unwrap() - .nyxd_url(); - - let nym_vpn_api_url = mainnet_network_defaults.nym_vpn_api_url().unwrap(); - - let config = GatewayConfig { - nyxd_url, - api_url, - nym_vpn_api_url: Some(nym_vpn_api_url), - min_gateway_performance: None, - mix_score_thresholds: None, - wg_score_thresholds: None, - }; - - Ok(GatewayClient::new(config, user_agent).unwrap()) - } - - /// Grabs an IPR address for routing, at the moment this isn't configurable. - async fn get_ipr_addr(&self) -> Result { - let exit_gateways = self - .gateway_client - .lookup_gateways(GatewayType::MixnetExit) - .await - .unwrap(); +fn create_gateway_client() -> Result { + let user_agent = UserAgent { + application: "nym-ipr-streamer".to_string(), + version: "0.0.1".to_string(), + platform: "rust".to_string(), + git_commit: "max/sdk-streamer".to_string(), + }; - info!("Found {} Exit Gateways", exit_gateways.len()); + let mainnet_network_defaults = crate::NymNetworkDetails::default(); + let api_url = mainnet_network_defaults + .endpoints + .first() + .unwrap() + .api_url() + .unwrap(); + + let nyxd_url = mainnet_network_defaults + .endpoints + .first() + .unwrap() + .nyxd_url(); + + let nym_vpn_api_url = mainnet_network_defaults.nym_vpn_api_url().unwrap(); + + let config = GatewayConfig { + nyxd_url, + api_url, + nym_vpn_api_url: Some(nym_vpn_api_url), + min_gateway_performance: None, + mix_score_thresholds: None, + wg_score_thresholds: None, + }; - let selected_gateway = exit_gateways - .into_iter() - .filter(|gw| gw.has_ipr_address()) - .max_by_key(|gw| { - gw.mixnet_performance - .map(|p| p.round_to_integer()) - .unwrap_or(0) - }) - .unwrap(); + Ok(GatewayClient::new(config, user_agent).unwrap()) +} - let ipr_address = selected_gateway.ipr_address.unwrap(); +async fn get_ipr_addr(client: GatewayClient) -> Result { + let exit_gateways = client + .lookup_gateways(GatewayType::MixnetExit) + .await + .unwrap(); + + info!("Found {} Exit Gateways", exit_gateways.len()); + + let selected_gateway = exit_gateways + .into_iter() + .filter(|gw| gw.has_ipr_address()) + .max_by_key(|gw| { + gw.mixnet_performance + .map(|p| p.round_to_integer()) + .unwrap_or(0) + }) + .unwrap(); - info!( - "Using IPR: {} (Gateway: {}, Performance: {:?})", - ipr_address, - selected_gateway.identity(), - selected_gateway.mixnet_performance - ); + let ipr_address = selected_gateway.ipr_address.unwrap(); - Ok(ipr_address) - } + info!( + "Using IPR: {} (Gateway: {}, Performance: {:?})", + ipr_address, + selected_gateway.identity(), + selected_gateway.mixnet_performance + ); - /// Creates a MixStream instance with the stored IPR address, allowing for read/write, use it to create a 'disconnected' IpMixStream instnace. - /// 'Connection' (aka the tunnel creation, which can then be used) is done afterwards via IpMixStream::connect_tunnel(). - pub async fn connect(&self) -> Result { - let ipr_address = self.get_ipr_addr().await?; - let stream = MixStream::new(None, Recipient::from(ipr_address.clone())).await; - Ok(IpMixStream::new(stream, ipr_address)) - } + Ok(ipr_address) } +/// Unlike the non-IPR MixStream, we do not start with a Socket and then 'connect' to a Stream; seemed too many layers of abstraction for little trade off. pub struct IpMixStream { stream: MixStream, ipr_address: IpPacketRouterAddress, @@ -141,14 +112,19 @@ pub struct IpMixStream { } impl IpMixStream { - fn new(stream: MixStream, ipr_address: IpPacketRouterAddress) -> Self { - Self { + // TODO be able to pass in DisconnectedMixnetClient to use as MixStream inner client. + pub async fn new() -> Result { + let gw_client = create_gateway_client()?; + let ipr_address = get_ipr_addr(gw_client).await?; + let stream = MixStream::new(None, Recipient::from(ipr_address)).await; + + Ok(Self { stream, ipr_address, listener: IprListener::new(), allocated_ips: None, connection_state: ConnectionState::Disconnected, - } + }) } pub fn nym_address(&self) -> &Recipient { @@ -409,11 +385,9 @@ mod tests { #[tokio::test] async fn connect_to_ipr() -> Result<(), Box> { - // init_logging(); - - let socket = IpMixSocket::new().await?; + init_logging(); - let mut stream = socket.connect().await?; + let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; let ipv4: Ipv4Addr = ip_pair.ipv4; @@ -437,8 +411,7 @@ mod tests { async fn dns_ping_checks() -> Result<(), Box> { init_logging(); - let socket = IpMixSocket::new().await?; - let mut stream = socket.connect().await?; + let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; info!( From 5311d2f39c43a3cc1b94ab5cb8a0a8b322edabe3 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 22 Jul 2025 17:54:21 +0200 Subject: [PATCH 042/139] err handling on surb send between split --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index a1124f8854d..8733817983d 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -14,7 +14,7 @@ use std::task::{Context, Poll}; use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt, ReadBuf}; use tokio::sync::oneshot; use tokio_util::codec::Encoder; -use tracing::{debug, info}; +use tracing::{debug, info, warn}; /// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. /// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its @@ -219,11 +219,14 @@ impl MixStreamReader { self.client.nym_address() } - /// Store SURBs in both own field + send to the other side of the split so they can be used for the connection. + /// Store SURBs in self + send to the other side of the split so they can be used for the connection. pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { self.peer_surbs = Some(surbs); if let Some(tx) = self.surb_tx.take() { - tx.send(surbs); // TODO err handling + match tx.send(surbs) { + Ok(()) => debug!("Sent SURBs to MixStreamWriter"), + Err(e) => warn!("Could not send SURBs to MixStreamWriter with err: {}", e), + } } } From 0c292d69ea7abf312365b9b6495eea7f194791a3 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 22 Jul 2025 17:56:00 +0200 Subject: [PATCH 043/139] split ipmixstream + tests --- .../mixnet_stream_wrapper_ipr.rs | 304 ++++++++++++++++-- 1 file changed, 285 insertions(+), 19 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index c64e41c509b..f80df1e3117 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -1,7 +1,7 @@ // Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use super::mixnet_stream_wrapper::MixStream; +use super::mixnet_stream_wrapper::{MixStream, MixStreamReader, MixStreamWriter}; use crate::ip_packet_client::{ helpers::check_ipr_message_version, IprListener, MixnetMessageOutcome, }; @@ -22,8 +22,12 @@ use nym_ip_packet_requests::{ }; use nym_sphinx::receiver::ReconstructedMessageCodec; +use std::io; +use std::pin::Pin; +use std::task::{Context, Poll}; use std::time::Duration; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite}; +use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, ReadBuf}; +use tokio::sync::oneshot; use tokio_util::codec::{Decoder /*, FramedRead */}; // TODO will need FramedRead later when u switch from bytebuffers use tracing::{debug, error, info}; @@ -313,11 +317,34 @@ impl IpMixStream { /// Split for concurrent read/write (like TcpStream::Split) into IpMixnetStreamReader and IpMixnetStreamWriter. pub fn split(self) -> (IpMixStreamReader, IpMixStreamWriter) { - // debug!("Splitting IpMixStream"); - // let (sender, receiver) = self.stream.split(); - // debug!("Split IpMixStream into Reader and Writer"); - - todo!() + debug!("Splitting IpMixStream"); + let local_addr = self.stream.client.nym_address().clone(); + let (stream_reader, stream_writer) = self.stream.split(); + debug!("Split IpMixStream into Reader and Writer"); + + let (state_tx, state_rx) = oneshot::channel(); + let (ips_tx, ips_rx) = oneshot::channel(); + + ( + IpMixStreamReader { + stream_reader, + // ipr_address: self.ipr_address, + listener: self.listener, + allocated_ips: self.allocated_ips.clone(), + connection_state: self.connection_state.clone(), + state_tx: Some(state_tx), + ips_tx: Some(ips_tx), + }, + IpMixStreamWriter { + stream_writer, + // ipr_address: self.ipr_address, + local_addr, + allocated_ips: self.allocated_ips, + connection_state: self.connection_state, + state_rx: Some(state_rx), + ips_rx: Some(ips_rx), + }, + ) } } @@ -355,23 +382,177 @@ impl AsyncWrite for IpMixStream { } } -// TODO - have to double up some functions as with the stream_wrapper -pub struct IpMixStreamReader {} -impl IpMixStreamReader {} -pub struct IpMixStreamWriter {} -impl IpMixStream {} +pub struct IpMixStreamReader { + stream_reader: MixStreamReader, + // ipr_address: IpPacketRouterAddress, + listener: IprListener, + allocated_ips: Option, + connection_state: ConnectionState, + state_tx: Option>, + ips_tx: Option>>, +} + +impl IpMixStreamReader { + pub fn nym_address(&self) -> &Recipient { + self.stream_reader.local_addr() + } + + pub async fn handle_incoming(&mut self) -> Result, Error> { + // TODO framing + let mut buffer = vec![0u8; 65536]; + + match tokio::time::timeout( + Duration::from_secs(10), + self.stream_reader.read(&mut buffer), + ) + .await + { + Ok(Ok(n)) if n > 0 => { + debug!("Read {} bytes", n); + + let mut codec = ReconstructedMessageCodec {}; + let mut buf = BytesMut::from(&buffer[..n]); + + if let Ok(Some(reconstructed)) = codec.decode(&mut buf) { + match self + .listener + .handle_reconstructed_message(reconstructed) + .await + { + Ok(Some(MixnetMessageOutcome::IpPackets(packets))) => { + info!("Extracted {} IP packets", packets.len()); + Ok(packets) + } + Ok(Some(MixnetMessageOutcome::Disconnect)) => { + info!("Received disconnect"); + self.connection_state = ConnectionState::Disconnected; + self.allocated_ips = None; + // Send state update to writer + if let Some(tx) = self.state_tx.take() { + let _ = tx.send(ConnectionState::Disconnected); + } + if let Some(tx) = self.ips_tx.take() { + let _ = tx.send(None); + } + Ok(Vec::new()) + } + Ok(Some(MixnetMessageOutcome::MixnetSelfPing)) => { + debug!("Received mixnet self ping"); + Ok(Vec::new()) + } + Ok(None) => Ok(Vec::new()), + Err(e) => { + debug!("Failed to handle message: {}", e); + Ok(Vec::new()) + } + } + } else { + Ok(Vec::new()) + } + } + _ => Ok(Vec::new()), + } + } + + pub fn allocated_ips(&self) -> Option<&IpPair> { + self.allocated_ips.as_ref() + } + + pub fn is_connected(&self) -> bool { + self.connection_state == ConnectionState::Connected + } +} + +impl AsyncRead for IpMixStreamReader { + fn poll_read( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut ReadBuf<'_>, + ) -> Poll> { + Pin::new(&mut self.stream_reader).poll_read(cx, buf) + } +} + +pub struct IpMixStreamWriter { + stream_writer: MixStreamWriter, + // ipr_address: IpPacketRouterAddress, + local_addr: Recipient, + allocated_ips: Option, + connection_state: ConnectionState, + state_rx: Option>, + ips_rx: Option>>, +} + +impl IpMixStreamWriter { + pub fn nym_address(&self) -> &Recipient { + &self.local_addr + } + + async fn send_ipr_request(&mut self, request: IpPacketRequest) -> Result<(), Error> { + let request_bytes = request.to_bytes()?; + self.stream_writer.write_bytes(&request_bytes).await + } + + pub async fn send_ip_packet(&mut self, packet: &[u8]) -> Result<(), Error> { + // Check for state updates from reader + if let Some(mut rx) = self.state_rx.take() { + if let Ok(new_state) = rx.try_recv() { + self.connection_state = new_state; + } else { + self.state_rx = Some(rx); + } + } + + if let Some(mut rx) = self.ips_rx.take() { + if let Ok(new_ips) = rx.try_recv() { + self.allocated_ips = new_ips; + } else { + self.ips_rx = Some(rx); + } + } + + if self.connection_state != ConnectionState::Connected { + return Err(Error::new_unsupported("Not connected".to_string())); + } + + let request = IpPacketRequest::new_data_request(packet.to_vec().into()); + self.send_ipr_request(request).await + } + + pub fn allocated_ips(&self) -> Option<&IpPair> { + self.allocated_ips.as_ref() + } + + pub fn is_connected(&self) -> bool { + self.connection_state == ConnectionState::Connected + } +} + +impl AsyncWrite for IpMixStreamWriter { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + Pin::new(&mut self.stream_writer).poll_write(cx, buf) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.stream_writer).poll_flush(cx) + } + + fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.stream_writer).poll_shutdown(cx) + } +} -/** - * TODO: - * - test split r/w - */ #[cfg(test)] mod tests { use super::*; use crate::ip_packet_client::helpers::{ icmp_identifier, is_icmp_echo_reply, is_icmp_v6_echo_reply, send_ping_v4, send_ping_v6, }; - // use nym_config::defaults::mixnet_vpn::{NYM_TUN_DEVICE_ADDRESS_V4, NYM_TUN_DEVICE_ADDRESS_V6}; // TODO should probably test these as well - reminder to sefl + // use nym_config::defaults::mixnet_vpn::{NYM_TUN_DEVICE_ADDRESS_V4, NYM_TUN_DEVICE_ADDRESS_V6}; // TODO should probably test these as well ? reminder to sefl use std::net::{Ipv4Addr, Ipv6Addr}; use std::sync::Once; @@ -385,7 +566,7 @@ mod tests { #[tokio::test] async fn connect_to_ipr() -> Result<(), Box> { - init_logging(); + // init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; @@ -409,7 +590,7 @@ mod tests { #[tokio::test] async fn dns_ping_checks() -> Result<(), Box> { - init_logging(); + // init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; @@ -518,4 +699,89 @@ mod tests { stream.disconnect_stream().await; Ok(()) } + + #[tokio::test] + async fn split_dns_ping_checks() -> Result<(), Box> { + // init_logging(); + + let mut stream = IpMixStream::new().await?; + let ip_pair = stream.connect_tunnel().await?; + + info!( + "Connected with IPs - IPv4: {}, IPv6: {}", + ip_pair.ipv4, ip_pair.ipv6 + ); + + let (mut reader, mut writer) = stream.split(); + + let external_v4_targets = vec![("Google DNS", Ipv4Addr::new(8, 8, 8, 8))]; + + let identifier = icmp_identifier(); + let mut successful_v4_pings = 0; + let mut total_v4_pings = 0; + + for (name, target) in &external_v4_targets { + info!("Testing IPv4 connectivity to {} ({})", name, target); + + for seq in 0..2 { + use crate::ip_packet_client::helpers::{ + create_icmpv4_echo_request, wrap_icmp_in_ipv4, + }; + use nym_ip_packet_requests::codec::MultiIpPacketCodec; + use pnet_packet::Packet; + + let icmp_echo_request = create_icmpv4_echo_request(seq, identifier)?; + let ipv4_packet = wrap_icmp_in_ipv4(icmp_echo_request, ip_pair.ipv4, *target)?; + let bundled_packet = + MultiIpPacketCodec::bundle_one_packet(ipv4_packet.packet().to_vec().into()); + + writer.send_ip_packet(&bundled_packet).await?; + total_v4_pings += 1; + } + } + + let collect_timeout = tokio::time::sleep(Duration::from_secs(10)); + tokio::pin!(collect_timeout); + + loop { + tokio::select! { + _ = &mut collect_timeout => { + info!("Finished collecting responses"); + break; + } + result = reader.handle_incoming() => { + if let Ok(packets) = result { + for packet in packets { + if let Some((reply_id, source, dest)) = is_icmp_echo_reply(&packet) { + if reply_id == identifier && dest == ip_pair.ipv4 { + successful_v4_pings += 1; + debug!("IPv4 reply from {}", source); + } + } + } + } + } + } + } + + let v4_success_rate = if total_v4_pings > 0 { + (successful_v4_pings as f64 / total_v4_pings as f64) * 100.0 + } else { + 0.0 + }; + + info!( + "Split test - IPv4 external connectivity: {}/{} pings successful ({:.1}%)", + successful_v4_pings, total_v4_pings, v4_success_rate + ); + + assert!(successful_v4_pings > 0, "No pings successful"); + assert!( + v4_success_rate >= 75.0, + "IPv4 success rate < 75% (got {:.1}%)", + v4_success_rate + ); + + Ok(()) + } } From 908a023df51fc37f7c70142ccb14e6f8c02d03e5 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 22 Jul 2025 17:59:43 +0200 Subject: [PATCH 044/139] export extra types from ipmixstream --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index e85bd5508bd..560e01a9963 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -4,4 +4,4 @@ mod mixnet_stream_wrapper; mod mixnet_stream_wrapper_ipr; pub use mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; -pub use mixnet_stream_wrapper_ipr::IpMixStream; +pub use mixnet_stream_wrapper_ipr::{IpMixStream, IpMixStreamReader, IpMixStreamWriter}; From 922b2cff250d01af5128bb47b7832d10da851deb Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 24 Jul 2025 14:12:03 +0200 Subject: [PATCH 045/139] commenting --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 3 +++ .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index 560e01a9963..c13ec4aa682 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -1,3 +1,6 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-2.0-only + //! TODO mod mixnet_stream_wrapper; diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 8733817983d..d5edb576f69 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -128,7 +128,7 @@ impl MixStream { /// Convenience method for just piping bytes into the Mixnet. pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { let input_message = if self.peer_surbs.is_some() { - info!("Writing reply with SURBs"); + info!("Writing {} bytes, sending with SURBs", data.len()); InputMessage::Reply { recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), data: (data.to_owned()), @@ -136,7 +136,7 @@ impl MixStream { max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here } } else { - info!("Writing outgoing reply using Nym address"); + info!("Writing {} bytes", data.len()); InputMessage::Anonymous { recipient: (self.peer.expect("No Peer set")), data: (data.to_owned()), @@ -149,10 +149,10 @@ impl MixStream { let mut codec = InputMessageCodec {}; let mut serialized_bytes = BytesMut::new(); codec.encode(input_message, &mut serialized_bytes)?; - info!("Serialized bytes: {:?}", serialized_bytes); + debug!("Serialized bytes: {:?}", serialized_bytes); self.write_all(&serialized_bytes).await?; - info!("Wrote serialized bytes"); + debug!("Wrote serialized bytes"); self.flush().await?; debug!("Flushed"); From 6572da88d817cc05fb2aba9c157f5f3aec80bd03 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 24 Jul 2025 14:44:09 +0200 Subject: [PATCH 046/139] smolmix device + example --- Cargo.lock | 97 ++++++++++++++++ Cargo.toml | 2 + smolmix/Cargo.toml | 32 +++++ smolmix/README.md | 13 +++ smolmix/examples/check.rs | 65 +++++++++++ smolmix/examples/download_file.rs | 186 ++++++++++++++++++++++++++++++ smolmix/src/bridge.rs | 120 +++++++++++++++++++ smolmix/src/device.rs | 175 ++++++++++++++++++++++++++++ smolmix/src/error.rs | 16 +++ smolmix/src/lib.rs | 70 +++++++++++ 10 files changed, 776 insertions(+) create mode 100644 smolmix/Cargo.toml create mode 100644 smolmix/README.md create mode 100644 smolmix/examples/check.rs create mode 100644 smolmix/examples/download_file.rs create mode 100644 smolmix/src/bridge.rs create mode 100644 smolmix/src/device.rs create mode 100644 smolmix/src/error.rs create mode 100644 smolmix/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 0240e029890..0dedf74f5e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2115,6 +2115,47 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "defmt" +version = "0.3.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" +dependencies = [ + "defmt 1.0.1", +] + +[[package]] +name = "defmt" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "548d977b6da32fa1d1fda2876453da1e7df63ad0304c8b3dae4dbe7b96f39b78" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d4fc12a85bcf441cfe44344c4b72d58493178ce635338a3f3b78943aceb258e" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.12", +] + [[package]] name = "delegate-display" version = "3.0.0" @@ -3133,6 +3174,15 @@ dependencies = [ "serde_json", ] +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -3217,6 +3267,16 @@ dependencies = [ "http 1.3.1", ] +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.4.1" @@ -4362,6 +4422,12 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "managed" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" + [[package]] name = "maplit" version = "1.0.2" @@ -10071,6 +10137,37 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" +[[package]] +name = "smolmix" +version = "0.1.0" +dependencies = [ + "bytes", + "dirs", + "nym-bin-common 0.6.0", + "nym-ip-packet-requests", + "nym-sdk", + "reqwest 0.12.22", + "smoltcp", + "thiserror 2.0.12", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "smoltcp" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "cfg-if", + "defmt 0.3.100", + "heapless", + "managed", +] + [[package]] name = "snafu" version = "0.7.5" diff --git a/Cargo.toml b/Cargo.toml index 046ce857a1e..91261675584 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,6 +145,8 @@ members = [ "sdk/ffi/go", "sdk/ffi/shared", "sdk/rust/nym-sdk", + "smolmix", + "service-providers/authenticator", "service-providers/common", "service-providers/ip-packet-router", "service-providers/network-requester", diff --git a/smolmix/Cargo.toml b/smolmix/Cargo.toml new file mode 100644 index 00000000000..a298991fbf1 --- /dev/null +++ b/smolmix/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "smolmix" +version = "0.1.0" +edition = "2021" + +[dependencies] +smoltcp = { version = "0.12", default-features = false, features = [ + "std", + "medium-ip", + "proto-ipv4", + "proto-ipv6", + "socket-tcp", + "socket-icmp", +] } +tokio = { workspace = true } +bytes = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } +nym-bin-common = { path = "../common/bin-common", features = ["basic_tracing"] } +nym-sdk = { path = "../sdk/rust/nym-sdk" } +nym-ip-packet-requests = { path = "../common/ip-packet-requests" } +thiserror.workspace = true +reqwest.workspace = true +dirs.workspace = true + +[[example]] +name = "check" +path = "examples/check.rs" + +[[example]] +name = "download" +path = "examples/download_file.rs" diff --git a/smolmix/README.md b/smolmix/README.md new file mode 100644 index 00000000000..efc0f61f864 --- /dev/null +++ b/smolmix/README.md @@ -0,0 +1,13 @@ +# smolmix poc + +At the moment this is very basic but it works with smol files (large ones end up borking at the moment). + +```sh +RUST_LOG=cargo run --example download +``` + +There is a quick check for httpbin's IPs via `nslookup` and connectivity **not** using the Mixnet: + +```sh +RUST_LOG=cargo run --example check +``` diff --git a/smolmix/examples/check.rs b/smolmix/examples/check.rs new file mode 100644 index 00000000000..2979709089b --- /dev/null +++ b/smolmix/examples/check.rs @@ -0,0 +1,65 @@ +use reqwest; +use std::{ + io::{Read, Write}, + net::TcpStream, + process::Command, +}; + +// These are just for checking: +// - Using the proper IP info in the other tests +// - That network connection is fine otherwise outside of the `NymIprDevice` +#[tokio::main] +async fn main() -> Result<(), Box> { + println!("Testing connectivity to httpbin.org...\n"); + + println!("DNS Resolution:"); + let output = Command::new("nslookup") + .arg("httpbin.org") + .output() + .expect("Failed to execute nslookup"); + println!("{}", String::from_utf8_lossy(&output.stdout)); + + println!("\nHTTP GET request:"); + match reqwest::get("http://httpbin.org/get").await { + Ok(response) => { + println!("Status: {}", response.status()); + println!("Headers: {:#?}", response.headers()); + let body = response.text().await?; + println!("Body:\n{}", body); + } + Err(e) => { + println!("Request failed: {}", e); + } + } + + println!("\nRaw TCP connection test:"); + + match TcpStream::connect("httpbin.org:80") { + Ok(mut stream) => { + println!("Connected to httpbin.org:80"); + + let request = b"GET /get HTTP/1.1\r\n\ + Host: httpbin.org\r\n\ + User-Agent: test/1.0\r\n\ + Accept: */*\r\n\ + Connection: close\r\n\ + \r\n"; + + stream.write_all(request)?; + println!("Sent request"); + + let mut response = Vec::new(); + stream.read_to_end(&mut response)?; + println!( + "Response ({} bytes):\n{}", + response.len(), + String::from_utf8_lossy(&response[..500.min(response.len())]) + ); + } + Err(e) => { + println!("Connection failed: {}", e); + } + } + + Ok(()) +} diff --git a/smolmix/examples/download_file.rs b/smolmix/examples/download_file.rs new file mode 100644 index 00000000000..e535c353970 --- /dev/null +++ b/smolmix/examples/download_file.rs @@ -0,0 +1,186 @@ +use nym_sdk::stream_wrapper::IpMixStream; +use smolmix::create_device; +use smoltcp::{ + iface::{Config, Interface, SocketSet}, + socket::tcp, + time::Instant, + wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, +}; +use std::{ + fs::{self, File}, + io::Write, + path::PathBuf, + time::Duration, +}; +use tracing::info; + +#[tokio::main] +async fn main() -> Result<(), Box> { + tracing_subscriber::fmt::init(); + + let download_dir = dirs::home_dir() + .unwrap_or_else(|| PathBuf::from(".")) + .join("Downloads") + .join("nym-test"); + + fs::create_dir_all(&download_dir)?; + let file_path = download_dir.join("1Mb.dat"); + info!("Will save to: {}", file_path.display()); + + info!("Connecting to Mixnet..."); + let ipr_stream = IpMixStream::new().await?; + let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; + + info!("Allocated IP: {}", allocated_ips.ipv4); + + // Bridge has to be run in its own task as per its docs + tokio::spawn(async move { + if let Err(e) = bridge.run().await { + eprintln!("Bridge error: {}", e); + } + }); + + // Create smoltcp interface using our allocated IP + let config = Config::new(HardwareAddress::Ip); + let mut iface = Interface::new(config, &mut device, Instant::now()); + + // Configure with our allocated IP TODO can probably smush this + fn above into one / somewhere else so doesn't have to be done manually + iface.update_ip_addrs(|ip_addrs| { + ip_addrs + .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) + .unwrap(); + }); + + // Add default route + iface + .routes_mut() + .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) + .unwrap(); + + let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 65536]); + let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); + let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); + + let mut sockets = SocketSet::new(vec![]); + let tcp_handle = sockets.add(tcp_socket); + + let target_ip = Ipv4Address::new(3, 213, 24, 5); // httpbin.org IP - if you're getting a mangled response run check.rs and make sure you're using the correct IP + let remote_path = "/bytes/10240"; // 10KB + let target_port = 80; + let expected_size = 10240; + + info!("Downloading {}:{}{}", target_ip, target_port, remote_path); + + let mut file = File::create(&file_path)?; + let mut connected = false; + let mut request_sent = false; + let mut total_bytes = 0; + let mut body_bytes = 0; + let mut headers_complete = false; + let mut header_buffer = Vec::new(); + let mut timestamp = Instant::from_millis(0); + let start = tokio::time::Instant::now(); + + while start.elapsed() < Duration::from_secs(300) { + iface.poll(timestamp, &mut device, &mut sockets); + + let socket = sockets.get_mut::(tcp_handle); + + if !connected && !socket.is_open() { + // iface is the hook into the NymIpDevice + socket.connect(iface.context(), (target_ip, target_port), 49152)?; + info!("Connecting..."); + connected = true; + } + + if socket.state() == tcp::State::Established && !request_sent { + let http_request = format!( + "GET {} HTTP/1.1\r\n\ + Host: httpbin.org\r\n\ + User-Agent: smolmix/0.1\r\n\ + Connection: close\r\n\ + \r\n", + remote_path + ); + + socket.send_slice(http_request.as_bytes())?; + info!("Request sent"); + request_sent = true; + } + + if socket.can_recv() { + socket.recv(|buffer| { + let len = buffer.len(); + total_bytes += len; + + if !headers_complete { + header_buffer.extend_from_slice(buffer); + + // Check for end of headers + if let Ok(headers_str) = std::str::from_utf8(&header_buffer) { + if let Some(header_end) = headers_str.find("\r\n\r\n") { + headers_complete = true; + + // Write body portion to file + let body_start = header_end + 4; + if body_start < header_buffer.len() { + let body_chunk = &header_buffer[body_start..]; + file.write_all(body_chunk).unwrap(); + body_bytes = body_chunk.len(); + info!("Headers complete, writing body to file"); + } + } + } + } else { + // Headers done, write body directly to file + file.write_all(buffer).unwrap(); + body_bytes += len; + } + + // Progress update + if body_bytes > 0 && body_bytes % 10240 < len { + let progress = (body_bytes as f64 / expected_size as f64) * 100.0; + let elapsed = start.elapsed().as_secs_f64(); + let throughput = (body_bytes as f64 / elapsed) / 1024.0; + + info!( + "Progress: {:.1}% ({} / {} bytes) - {:.1} KB/s", + progress, body_bytes, expected_size, throughput + ); + } + + (len, ()) + })?; + } + + // Check completion + if body_bytes >= expected_size || (socket.state() == tcp::State::Closed && body_bytes > 0) { + break; + } + + timestamp += smoltcp::time::Duration::from_millis(10); + tokio::time::sleep(Duration::from_millis(10)).await; + } + + // Ensure file is flushed + file.flush()?; + + // Final report + let elapsed = start.elapsed().as_secs_f64(); + let throughput = (body_bytes as f64 / elapsed) / 1024.0; + + info!("\nDownload Complete!"); + info!("Saved to: {}", file_path.display()); + info!("File size: {} bytes", body_bytes); + info!("Total time: {:.1} seconds", elapsed); + info!("Average speed: {:.1} KB/s", throughput); + + // Verify file + let metadata = fs::metadata(&file_path)?; + info!("File on disk: {} bytes", metadata.len()); + info!("Success: {}", metadata.len() as usize == expected_size); + + // TODO make a graceful shutdown fn for Device -> IprWrapper + + Ok(()) +} diff --git a/smolmix/src/bridge.rs b/smolmix/src/bridge.rs new file mode 100644 index 00000000000..6492be2261d --- /dev/null +++ b/smolmix/src/bridge.rs @@ -0,0 +1,120 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-2.0-only + +use crate::error::SmolmixError; +use nym_ip_packet_requests::codec::MultiIpPacketCodec; +use nym_sdk::stream_wrapper::IpMixStream; +use tokio::sync::mpsc; +use tracing::{debug, error, info, trace}; + +/// Asynchronous bridge between smoltcp device and Mixnet. +/// +/// This component runs in a separate task and handles all asynchronous +/// operations required for outbound communication. It receives packets +/// from the device via channels, bundles them according to IPR protocol +/// (MultiIpPacketCodec) and transmits them through the Mixnet. +/// +/// # Packet Processing Flow +/// +/// Outgoing packets: +/// - Receive from device via channel +/// - Bundle using MultiIpPacketCodec +/// - Send through mixnet via send_ip_packet() +/// +/// Incoming packets: +/// - Poll mixnet with handle_incoming() +/// - Forward to device via channel +/// - Device queues for smoltcp consumption +pub struct NymIprBridge { + /// Connected IPR stream for mixnet communication + stream: IpMixStream, + /// Channel for receiving outgoing packets from device + tx_receiver: mpsc::UnboundedReceiver>, + /// Channel for sending incoming packets to device + rx_sender: mpsc::UnboundedSender>, +} + +impl NymIprBridge { + pub fn new( + stream: IpMixStream, + tx_receiver: mpsc::UnboundedReceiver>, + rx_sender: mpsc::UnboundedSender>, + ) -> Self { + Self { + stream, + tx_receiver, + rx_sender, + } + } + + /// Runs the bridge event loop. + /// + /// This method should be spawned in a separate task. It continuously: + /// - Processes outgoing packets from the device + /// - Polls for incoming packets from the mixnet + /// - Maintains packet statistics + /// + /// The loop exits when channels are closed or an error occurs. + pub async fn run(mut self) -> Result<(), SmolmixError> { + info!("Starting Nym IPR bridge"); + let mut packets_sent = 0; + let mut packets_received = 0; + + loop { + tokio::select! { + // Outgoing packets from smoltcp layer above. + Some(packet) = self.tx_receiver.recv() => { + debug!("Bridge sending {} byte packet to mixnet", packet.len()); + + // Log packet details for debugging + if packet.len() >= 20 { + let version = (packet[0] >> 4) & 0xF; + let proto = packet[9]; + let src_ip = &packet[12..16]; + let dst_ip = &packet[16..20]; + debug!( + "Outgoing IPv{} packet: proto={}, src={}.{}.{}.{}, dst={}.{}.{}.{}", + version, proto, + src_ip[0], src_ip[1], src_ip[2], src_ip[3], + dst_ip[0], dst_ip[1], dst_ip[2], dst_ip[3] + ); + } + + // Necessary to bundle for IPR! See stream_wrapper_ipr.rs tests. + let bundled = MultiIpPacketCodec::bundle_one_packet(packet.into()); + if let Err(e) = self.stream.send_ip_packet(&bundled).await { + error!("Failed to send packet through mixnet: {}", e); + } else { + packets_sent += 1; + trace!("Total packets sent: {}", packets_sent); + } + } + + // Poll for incoming packets from mixnet + Ok(packets) = self.stream.handle_incoming() => { + if !packets.is_empty() { + info!("Bridge received {} packets from mixnet", packets.len()); + for packet in packets { + info!("Incoming packet: {} bytes", packet.len()); + + // Forward to device via channel + if let Err(_) = self.rx_sender.send(packet.to_vec()) { + error!("Failed to send packet to device - receiver dropped"); + return Err(SmolmixError::ChannelClosed); + } + packets_received += 1; + info!("Total packets received: {}", packets_received); + } + } + } + + else => { + info!("Bridge shutting down. Sent: {}, Received: {}", packets_sent, packets_received); + break; + } + } + } + + Ok(()) + } +} diff --git a/smolmix/src/device.rs b/smolmix/src/device.rs new file mode 100644 index 00000000000..e2a78566945 --- /dev/null +++ b/smolmix/src/device.rs @@ -0,0 +1,175 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-2.0-only + +use smoltcp::{ + phy::{Device, DeviceCapabilities, Medium, RxToken, TxToken}, + time::Instant, +}; +use std::collections::VecDeque; +use tokio::sync::mpsc; +use tracing::{debug, trace}; + +/// # Overview +/// We need something to bridge the async / sync weirdness (Device trait fns are sync, IpMixStream fns are +/// async) in a way that allows for the `NymIprDevice` to look and act like any other device. +/// +/// cf smoltcp's loopback.rs: +/// ``` +/// pub struct Loopback { +/// queue: VecDeque>, +/// } +/// +/// impl Device for Loopback { +/// type RxToken<'a> = RxToken; +/// type TxToken<'a> = TxToken<'a>; +/// +/// fn receive(&mut self, _timestamp: Instant) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> { +/// self.queue.pop_front().map(move |buffer| { +/// let rx = RxToken { buffer }; +/// let tx = TxToken { +/// queue: &mut self.queue, +/// }; +/// (rx, tx) +/// }) +/// } +/// } +/// ``` +/// +/// We need to be polling the queue to/from the NymIprBridge, hence the addition of the +/// mpsc channels in the Device struct and the extra fns. +/// +/// # Architecture +/// +/// smoltcp (sync) <-> NymIprDevice <-> channels <-> NymIprBridge <-> Mixnet (async) +/// +/// The device maintains a receive queue for packets coming from the mixnet and +/// uses unbounded channels to communicate with the bridge task that handles the +/// actual mixnet I/O. We poll the channel in receive() to move packets via mpsc +/// from async to sync world. +/// +/// This way no blocking from smoltcp + allows for concurrency. +/// +/// Adapter pattern between sync polling-based I/O and async event-based I/O. +pub struct NymIprDevice { + // Receive queue for packets coming from the mixnet + rx_queue: VecDeque>, + + // Channel to send packets to the bridge task + tx_sender: mpsc::UnboundedSender>, + + // Device capabilities + capabilities: DeviceCapabilities, + + // Channel to receive packets from the bridge task + rx_receiver: mpsc::UnboundedReceiver>, +} + +impl NymIprDevice { + pub fn new( + tx_sender: mpsc::UnboundedSender>, + rx_receiver: mpsc::UnboundedReceiver>, + ) -> Self { + let mut capabilities = DeviceCapabilities::default(); + capabilities.medium = Medium::Ip; + // Standard MTU for IP packets - TODO make configurable + capabilities.max_transmission_unit = 1500; + // Process one packet at a time. TODO experiment with this + capabilities.max_burst_size = Some(1); + + Self { + rx_queue: VecDeque::new(), + tx_sender, + capabilities, + rx_receiver, + } + } + + /// Poll for new packets from the bridge + fn poll_rx_queue(&mut self) { + // Try to receive all available packets without blocking, queue them for smoltcp consumption. + while let Ok(packet) = self.rx_receiver.try_recv() { + trace!("Received packet of {} bytes from bridge", packet.len()); + self.rx_queue.push_back(packet); + } + } +} + +impl Device for NymIprDevice { + type RxToken<'a> + = NymRxToken + where + Self: 'a; + type TxToken<'a> + = NymTxToken + where + Self: 'a; + + fn receive(&mut self, _timestamp: Instant) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> { + // Poll for new packets from the async bridge + self.poll_rx_queue(); + + // Check if we have a packet to deliver + let packet = self.rx_queue.pop_front()?; + + // Create tokens - RxToken owns the packet data + let rx_token = NymRxToken { buffer: packet }; + let tx_token = NymTxToken { + tx_sender: self.tx_sender.clone(), + }; + + Some((rx_token, tx_token)) + } + + fn transmit(&mut self, _timestamp: Instant) -> Option> { + // We can always transmit (channel will buffer) + Some(NymTxToken { + tx_sender: self.tx_sender.clone(), + }) + } + + fn capabilities(&self) -> DeviceCapabilities { + self.capabilities.clone() + } +} + +/// Receive token - owns the packet buffer +pub struct NymRxToken { + buffer: Vec, +} + +impl RxToken for NymRxToken { + fn consume(self, f: F) -> R + where + F: FnOnce(&[u8]) -> R, + { + debug!("Consuming RX packet of {} bytes", self.buffer.len()); + f(&self.buffer) + } +} + +/// Transmit token - holds channel sender +pub struct NymTxToken { + tx_sender: mpsc::UnboundedSender>, +} + +impl TxToken for NymTxToken { + fn consume(self, len: usize, f: F) -> R + where + F: FnOnce(&mut [u8]) -> R, + { + // Create buffer for the packet + let mut buffer = vec![0u8; len]; + + // Let smoltcp fill the packet + let result = f(&mut buffer); + + // Send raw packet to the bridge task for transmission + if let Err(e) = self.tx_sender.send(buffer) { + warn!("Failed to send packet to bridge: {}", e); + } else { + info!("Sent {} byte packet to bridge", len); + } + + result + } +} diff --git a/smolmix/src/error.rs b/smolmix/src/error.rs new file mode 100644 index 00000000000..1c7fbf777aa --- /dev/null +++ b/smolmix/src/error.rs @@ -0,0 +1,16 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-2.0-only + +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum SmolmixError { + #[error("Channel closed")] + ChannelClosed, + + #[error("Not connected to IPR")] + NotConnected, + + #[error("Nym SDK error: {0}")] + NymSdk(#[from] nym_sdk::Error), +} diff --git a/smolmix/src/lib.rs b/smolmix/src/lib.rs new file mode 100644 index 00000000000..bafee7a9944 --- /dev/null +++ b/smolmix/src/lib.rs @@ -0,0 +1,70 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-2.0-only + +mod bridge; +mod device; +mod error; + +pub use bridge::NymIprBridge; +pub use device::NymIprDevice; +pub use error::SmolmixError; + +use nym_ip_packet_requests::IpPair; +use nym_sdk::stream_wrapper::IpMixStream; +use tokio::sync::mpsc; + +/// Create a connected smoltcp device and async bridge for the tunneling packets through the +/// Mixnet to remote hosts via an IPR. +/// +/// This function handles the complete setup process: +/// - Ensures the IPR stream is connected +/// - Retrieves allocated IP addresses +/// - Creates communication channels +/// - Constructs the device and bridge components +/// +/// # Component Interaction +/// +/// ``` +/// create_device() +/// | +/// +--------------+---------------+ +/// | | | +/// v v v +/// NymIprDevice NymIprBridge IpPair +/// | | (10.0.x.x) +/// | | +/// +-- channels --+ +/// | +/// v +/// IpMixStream +/// | +/// v +/// Mixnet +/// ``` +pub async fn create_device( + mut ipr_stream: IpMixStream, +) -> Result<(NymIprDevice, NymIprBridge, IpPair), SmolmixError> { + // Ensure the stream is connected + if !ipr_stream.is_connected() { + ipr_stream.connect_tunnel().await?; + } + + // Get the allocated IPs before moving the stream - need these for proper packet creation + // further 'up' the flow in the code calling this fn (see examples/tcp_connect.rs). + let allocated_ips = ipr_stream + .allocated_ips() + .ok_or(SmolmixError::NotConnected)? + .clone(); + + // Create channels for device <-> bridge communication + let (tx_to_bridge, tx_from_device) = mpsc::unbounded_channel(); + let (rx_to_device, rx_from_bridge) = mpsc::unbounded_channel(); + + // Create device + let device = NymIprDevice::new(tx_to_bridge, rx_from_bridge); + + // Create bridge (moves ipr_stream) + let bridge = NymIprBridge::new(ipr_stream, tx_from_device, rx_to_device); + + Ok((device, bridge, allocated_ips)) +} From 1713ede0528c52de31974c6275785d5f3ba918ba Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 24 Jul 2025 15:09:42 +0200 Subject: [PATCH 047/139] remove old note --- .../src/stream_wrapper/connection-logics.md | 73 ------------------- 1 file changed, 73 deletions(-) delete mode 100644 sdk/rust/nym-sdk/src/stream_wrapper/connection-logics.md diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/connection-logics.md b/sdk/rust/nym-sdk/src/stream_wrapper/connection-logics.md deleted file mode 100644 index 849b04d47dc..00000000000 --- a/sdk/rust/nym-sdk/src/stream_wrapper/connection-logics.md +++ /dev/null @@ -1,73 +0,0 @@ - -## MixStream -WRITING (App → Mixnet): -1. App calls stream.write(bytes) -2. AsyncWrite implementation: - - Deserializes bytes as InputMessage using InputMessageCodec - - Forwards InputMessage to MixnetClient -3. MixnetClient sends to mixnet - -READING (Mixnet → App): -1. MixnetClient receives ReconstructedMessage from Mixnet -2. Stream implementation buffers messages -3. AsyncRead implementation: - - Encodes ReconstructedMessage using ReconstructedMessageCodec - - Returns encoded bytes to app - -Flow: App bytes ↔ InputMessage/ReconstructedMessage ↔ Mixnet - -## IP Client -CONNECTING: -1. Create MixnetClient -2. Send IpPacketRequest::Connect wrapped in InputMessage -3. Use wait_for_messages() to get ReconstructedMessage from Mixnet -4. Parse as IpPacketResponse::Connect -5. Extract allocated IPs - -SENDING IP PACKETS: -1. App provides IP packet bytes -2. Wrap in IpPacketRequest::Data -3. Send as InputMessage through MixnetClient - -RECEIVING IP PACKETS: -1. IprListener processes ReconstructedMessages -2. Parse as IpPacketResponse -3. Extract IP packets from IpPacketResponse::Data using MultiIpPacketCodec -4. Return raw IP packet bytes to app - -Flow: IP packets → IpPacketRequest → InputMessage → Mixnet → IPR - IPR → Mixnet → IpPacketResponse → IP packets - -## IPRMixStream -SETUP: -1. Create MixStream to IPR address -2. Split into reader/writer -3. Background task owns reader, processes IpPacketResponse messages -4. Main struct owns writer for sending - -CONNECTING -1. Send IpPacketRequest::Connect wrapped in InputMessage -2. Use wait_for_messages() to get ReconstructedMessage from Mixnet -3. Parse as IpPacketResponse::Connect -4. Extract allocated IPs - -WRITING (TUN → IPR?): -1. TUN device calls stream.write(ip_packet_bytes) -2. AsyncWrite implementation: - - Wrap IP packet in IpPacketRequest::Data - - Serialize to bytes using to_bytes() - - Call writer.write_bytes() which: - - Wraps in InputMessage - - Sends through mixnet - -READING (IPR → TUN): -1. Background task continuously reads from MixStreamReader -2. Decodes bytes as ReconstructedMessage -3. Parses as IpPacketResponse -4. Extracts IP packets from Data responses -5. Adds to shared buffer -6. AsyncRead polls buffer and returns IP packets to TUN - -Flow: -Write: TUN IP packet → IpPacketRequest → serialize → MixStreamWriter → InputMessage → Mixnet → IPR -Read: IPR → Mixnet → MixStreamReader → ReconstructedMessage → IpPacketResponse → extract IP packets → buffer → TUN From 441fbcbe52469facaaaac1539ebe0b6f1e0042bb Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 24 Jul 2025 19:22:34 +0200 Subject: [PATCH 048/139] change logging for nym provider --- smolmix/examples/download_file.rs | 2 +- smolmix/src/device.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/smolmix/examples/download_file.rs b/smolmix/examples/download_file.rs index e535c353970..08d8f91578c 100644 --- a/smolmix/examples/download_file.rs +++ b/smolmix/examples/download_file.rs @@ -16,7 +16,7 @@ use tracing::info; #[tokio::main] async fn main() -> Result<(), Box> { - tracing_subscriber::fmt::init(); + nym_bin_common::logging::setup_tracing_logger(); let download_dir = dirs::home_dir() .unwrap_or_else(|| PathBuf::from(".")) diff --git a/smolmix/src/device.rs b/smolmix/src/device.rs index e2a78566945..f94a261beb0 100644 --- a/smolmix/src/device.rs +++ b/smolmix/src/device.rs @@ -7,7 +7,7 @@ use smoltcp::{ }; use std::collections::VecDeque; use tokio::sync::mpsc; -use tracing::{debug, trace}; +use tracing::{debug, info, trace, warn}; /// # Overview /// We need something to bridge the async / sync weirdness (Device trait fns are sync, IpMixStream fns are From c27074fcc8318804fe53cbccda93fe742ec98781 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 24 Jul 2025 19:24:06 +0200 Subject: [PATCH 049/139] update readme with new logging --- smolmix/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smolmix/README.md b/smolmix/README.md index efc0f61f864..f02cf9d817b 100644 --- a/smolmix/README.md +++ b/smolmix/README.md @@ -3,11 +3,11 @@ At the moment this is very basic but it works with smol files (large ones end up borking at the moment). ```sh -RUST_LOG=cargo run --example download +cargo run --example download ``` There is a quick check for httpbin's IPs via `nslookup` and connectivity **not** using the Mixnet: ```sh -RUST_LOG=cargo run --example check +cargo run --example check ``` From 55482deb49d0679d409d3279018954383ecff1fc Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 26 Sep 2025 17:25:56 +0200 Subject: [PATCH 050/139] TLS first version --- Cargo.lock | 13287 ---------------------------------------- smolmix/Cargo.toml | 2 + smolmix/src/bridge.rs | 6 +- smolmix/src/device.rs | 17 +- smolmix/src/error.rs | 12 + smolmix/src/lib.rs | 2 + smolmix/src/tls.rs | 407 ++ 7 files changed, 441 insertions(+), 13292 deletions(-) delete mode 100644 Cargo.lock create mode 100644 smolmix/src/tls.rs diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 0dedf74f5e9..00000000000 --- a/Cargo.lock +++ /dev/null @@ -1,13287 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "accessory" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e416a3ab45838bac2ab2d81b1088d738d7b2d2c5272a54d39366565a29bd80" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "addr" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" -dependencies = [ - "psl", - "psl-types", -] - -[[package]] -name = "adler2" -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", - "generic-array 0.14.9", -] - -[[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 2.6.1", -] - -[[package]] -name = "aes-gcm-siv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "polyval", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "ammonia" -<<<<<<< HEAD -version = "4.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" -======= -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b346764dd0814805de8abf899fe03065bcee69bb1a4771c785817e39f3978f" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "cssparser", - "html5ever", - "maplit", - "tendril", - "url", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstream" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" -dependencies = [ - "windows-sys 0.60.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.60.2", -] - -[[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - -[[package]] -name = "argon2" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" -dependencies = [ - "base64ct", - "blake2 0.10.6", - "cpufeatures", - "password-hash", -] - -[[package]] -name = "ark-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "rayon", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rayon", - "rustc_version 0.4.1", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand 0.8.5", - "rayon", -] - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "askama" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7" -dependencies = [ - "askama_derive", - "itoa", - "percent-encoding", - "serde", - "serde_json", -] - -[[package]] -name = "askama_derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac" -dependencies = [ - "askama_parser", - "basic-toml", - "memchr", - "proc-macro2", - "quote", - "rustc-hash", - "serde", - "serde_derive", - "syn 2.0.106", -] - -[[package]] -name = "askama_parser" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f" -dependencies = [ - "memchr", - "serde", - "serde_derive", - "winnow", -] - -[[package]] -name = "assert-json-diff" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - -[[package]] -name = "async-compression" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" -dependencies = [ - "compression-codecs", - "compression-core", - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "async-lock" -version = "3.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" -dependencies = [ - "event-listener 5.4.1", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "async-tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3609af4bbf701ddaf1f6bb4e6257dff4ff8932327d0e685d3f653724c258b1ac" -dependencies = [ - "futures-io", - "futures-util", - "log", - "pin-project-lite", - "rustls-native-certs 0.7.3", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.25.0", - "tungstenite 0.21.0", -] - -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "auto-future" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "autodoc" -version = "0.1.0" -dependencies = [ - "env_logger", - "log", -] - -[[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.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "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.2", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-client-ip" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" -dependencies = [ - "axum", - "forwarded-header-value", - "serde", -] - -[[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.3.1", - "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-extra" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" -dependencies = [ - "axum", - "axum-core", - "bytes", - "fastrand 2.3.0", - "futures-util", - "headers", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "mime", - "multer", - "pin-project-lite", - "serde", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - -[[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.106", -] - -[[package]] -name = "axum-test" -version = "16.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e3a443d2608936a02a222da7b746eb412fede7225b3030b64fe9be99eab8dc" -dependencies = [ - "anyhow", - "assert-json-diff", - "auto-future", - "axum", - "bytes", - "bytesize", - "cookie", - "http 1.3.1", - "http-body-util", - "hyper 1.7.0", - "hyper-util", - "mime", - "pretty_assertions", - "reserve-port", - "rust-multipart-rfc7578_2", - "serde", - "serde_json", - "serde_urlencoded", - "smallvec", - "tokio", - "tower 0.5.2", - "url", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" - -[[package]] -name = "base85rs" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87678d33a2af71f019ed11f52db246ca6c5557edee2cccbe689676d1ad9c6b5a" - -[[package]] -name = "basic-toml" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" -dependencies = [ - "serde", -] - -[[package]] -name = "bech32" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "binstring" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" - -[[package]] -name = "bip32" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" -dependencies = [ - "bs58", - "hmac", - "k256", - "rand_core 0.6.4", - "ripemd", - "secp256k1", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "bip39" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "rand_core 0.6.4", - "serde", - "unicode-normalization", - "zeroize", -] - -[[package]] -name = "bitcoin-internals" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" - -[[package]] -name = "bitcoin_hashes" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" -dependencies = [ - "bitcoin-internals", - "hex-conservative", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" -dependencies = [ - "serde", -] - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "digest 0.10.7", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - -[[package]] -name = "bloomfilter" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" -dependencies = [ - "getrandom 0.2.16", - "siphasher 1.0.1", -] - -[[package]] -name = "bls12_381" -version = "0.8.0" -source = "git+https://github.com/jstuczyn/bls12_381?branch=temp/experimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" -dependencies = [ - "digest 0.10.7", - "ff", - "group", - "pairing", - "rand_core 0.6.4", - "serde", - "serdect 0.3.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "bnum" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" - -[[package]] -name = "brotli" -version = "8.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "sha2 0.10.9", - "tinyvec", -] - -[[package]] -name = "bumpalo" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "bytecodec" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" -dependencies = [ - "byteorder", - "trackable 0.2.24", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -dependencies = [ - "serde", -] - -[[package]] -name = "bytesize" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" - -[[package]] -name = "camino" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" -dependencies = [ - "serde_core", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.27", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.27", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "castaway" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" - -[[package]] -name = "cc" -version = "1.2.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "celes" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" -dependencies = [ - "phf 0.11.3", - "serde", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", -] - -[[package]] -name = "chrono" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-link 0.2.1", -] - -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "clap" -<<<<<<< HEAD -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" -======= -version = "4.5.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -<<<<<<< HEAD -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" -======= -version = "4.5.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_complete" -<<<<<<< HEAD -version = "4.5.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" -======= -version = "4.5.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5abde44486daf70c5be8b8f8f1b66c49f86236edf6fa2abadb4d961c4c6229a" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "clap", -] - -[[package]] -name = "clap_complete_fig" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" -dependencies = [ - "clap", - "clap_complete", -] - -[[package]] -name = "clap_derive" -<<<<<<< HEAD -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" -======= -version = "4.5.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "clap_lex" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" - -[[package]] -name = "coarsetime" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" -dependencies = [ - "libc", - "wasix", - "wasm-bindgen", -] - -[[package]] -name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "colored" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" -dependencies = [ - "lazy_static", - "windows-sys 0.59.0", -] - -[[package]] -name = "comfy-table" -version = "7.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" -dependencies = [ - "crossterm 0.29.0", - "unicode-segmentation", - "unicode-width 0.2.2", -] - -[[package]] -name = "compression-codecs" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" -dependencies = [ - "brotli", - "compression-core", - "flate2", - "memchr", - "zstd", - "zstd-safe", -] - -[[package]] -name = "compression-core" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "console" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width 0.2.2", - "windows-sys 0.61.2", -] - -[[package]] -name = "console-api" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" -dependencies = [ - "futures-core", - "prost", - "prost-types", - "tonic", - "tracing-core", -] - -[[package]] -name = "console-subscriber" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" -dependencies = [ - "console-api", - "crossbeam-channel", - "crossbeam-utils", - "futures-task", - "hdrhistogram", - "humantime", - "hyper-util", - "prost", - "prost-types", - "serde", - "serde_json", - "thread_local", - "tokio", - "tokio-stream", - "tonic", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const-str" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" - -[[package]] -name = "const_format" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" -dependencies = [ - "const_format_proc_macros", -] - -[[package]] -name = "const_format_proc_macros" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - -[[package]] -name = "cookie" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" -dependencies = [ - "time", - "version_check", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cosmos-sdk-proto" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462e1f6a8e005acc8835d32d60cbd7973ed65ea2a8d8473830e675f050956427" -dependencies = [ - "prost", - "tendermint-proto", -] - -[[package]] -name = "cosmrs" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1394c263335da09e8ba8c4b2c675d804e3e0deb44cce0866a5f838d3ddd43d02" -dependencies = [ - "bip32", - "cosmos-sdk-proto", - "ecdsa", - "eyre", - "k256", - "rand_core 0.6.4", - "serde", - "serde_json", - "signature", - "subtle-encoding", - "tendermint", - "tendermint-rpc", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-core" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" - -[[package]] -name = "cosmwasm-crypto" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", - "cosmwasm-core", - "curve25519-dalek", - "digest 0.10.7", - "ecdsa", - "ed25519-zebra", - "k256", - "num-traits", - "p256", - "rand_core 0.6.4", - "rayon", - "sha2 0.10.9", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "cosmwasm-schema" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" -dependencies = [ - "cosmwasm-schema-derive", - "schemars 0.8.22", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "cosmwasm-std" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" -dependencies = [ - "base64 0.22.1", - "bech32", - "bnum", - "cosmwasm-core", - "cosmwasm-crypto", - "cosmwasm-derive", - "derive_more 1.0.0", - "hex", - "rand_core 0.6.4", - "rmp-serde", - "schemars 0.8.22", - "serde", - "serde-json-wasm", - "sha2 0.10.9", - "static_assertions", - "thiserror 1.0.69", -] - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "criterion" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "futures", - "is-terminal", - "itertools 0.10.5", - "num-traits", - "once_cell", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools 0.10.5", -] - -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crossterm" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" -dependencies = [ - "bitflags 1.3.2", - "crossterm_winapi", - "libc", - "mio 0.8.11", - "parking_lot", - "signal-hook", - "signal-hook-mio", - "winapi", -] - -[[package]] -name = "crossterm" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" -dependencies = [ - "bitflags 2.9.4", - "crossterm_winapi", - "document-features", - "parking_lot", - "rustix", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array 0.14.9", - "rand_core 0.6.4", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array 0.14.9", - "rand_core 0.6.4", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - -[[package]] -name = "cssparser" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "phf 0.11.3", - "smallvec", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.106", -] - -[[package]] -name = "csv" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" -dependencies = [ - "memchr", -] - -[[package]] -name = "ct-codecs" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8" - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "cupid" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1" -dependencies = [ - "gcc", - "rustc_version 0.2.3", -] - -[[package]] -name = "curl" -version = "0.4.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2 0.6.1", - "windows-sys 0.59.0", -] - -[[package]] -name = "curl-sys" -version = "0.4.83+curl-8.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.59.0", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version 0.4.1", - "serde", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "curve25519-dalek-ng" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", - "subtle-ng", - "zeroize", -] - -[[package]] -name = "cw-controllers" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw-multi-test" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" -dependencies = [ - "anyhow", - "bech32", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "itertools 0.14.0", - "prost", - "schemars 0.8.22", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", -] - -[[package]] -name = "cw-storage-plus" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" -dependencies = [ - "cosmwasm-std", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "cw-utils" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw20" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "cw3" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw20", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw4" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "darling" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.106", -] - -[[package]] -name = "darling_macro" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "serde", -] - -[[package]] -name = "data-encoding" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - -[[package]] -name = "debounced" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107e5cd9b5163c19751e53eef634cae25cf5ed5f6d0c81125feaa92e43703cc7" -dependencies = [ - "futures-timer", - "futures-util", -] - -[[package]] -name = "defguard_wireguard_rs" -version = "0.4.7" -source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.4.7#ef1cf3714629bf5016fb38cbb7320451dc69fb09" -dependencies = [ - "base64 0.22.1", - "libc", - "log", - "netlink-packet-core 0.7.0", - "netlink-packet-generic 0.3.3", - "netlink-packet-route 0.20.1", - "netlink-packet-utils", - "netlink-packet-wireguard", - "netlink-sys", - "nix 0.29.0", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "defmt" -version = "0.3.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" -dependencies = [ - "defmt 1.0.1", -] - -[[package]] -name = "defmt" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "548d977b6da32fa1d1fda2876453da1e7df63ad0304c8b3dae4dbe7b96f39b78" -dependencies = [ - "bitflags 1.3.2", - "defmt-macros", -] - -[[package]] -name = "defmt-macros" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d4fc12a85bcf441cfe44344c4b72d58493178ce635338a3f3b78943aceb258e" -dependencies = [ - "defmt-parser", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "defmt-parser" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" -dependencies = [ - "thiserror 2.0.12", -] - -[[package]] -name = "delegate-display" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9926686c832494164c33a36bf65118f4bd6e704000b58c94681bf62e9ad67a74" -dependencies = [ - "impartial-ord", - "itoa", - "macroific", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" -dependencies = [ - "powerfmt", - "serde_core", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - -[[package]] -name = "derive_more" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" -dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "unicode-xid", -] - -[[package]] -name = "derive_more-impl" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "unicode-xid", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle 2.6.1", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "dispatch2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" -dependencies = [ - "bitflags 2.9.4", - "block2", - "libc", - "objc2", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "dkg-bypass-contract" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "nym-coconut-dkg-common", - "nym-contracts-common", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "document-features" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" -dependencies = [ - "litrs", -] - -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - -[[package]] -name = "dtoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - -[[package]] -name = "easy-addr" -version = "0.1.0" -dependencies = [ - "cosmwasm-std", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "serdect 0.2.0", - "signature", - "spki", -] - -[[package]] -name = "echo-server" -version = "0.1.0" -dependencies = [ - "anyhow", - "bincode", - "bytecodec", - "bytes", - "clap", - "dashmap", - "dirs", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-sdk", - "serde", - "tempfile", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "tracing-subscriber", - "uuid", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "serde", - "signature", -] - -[[package]] -name = "ed25519-compact" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" -dependencies = [ - "ct-codecs", - "getrandom 0.2.16", -] - -[[package]] -name = "ed25519-consensus" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" -dependencies = [ - "curve25519-dalek-ng", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-dalek" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core 0.6.4", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0017d969298eec91e3db7a2985a8cab4df6341d86e6f3a6f5878b13fb7846bc9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core 0.6.4", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -dependencies = [ - "serde", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array 0.14.9", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "serdect 0.2.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "env_filter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "jiff", - "log", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - -[[package]] -name = "etherparse" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827292ea592108849932ad8e30218f8b1f21c0dfd0696698a18b5d0aed62d990" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "5.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener 5.4.1", - "pin-project-lite", -] - -[[package]] -name = "extension-storage" -version = "1.4.0-rc.0" -dependencies = [ - "bip39", - "console_error_panic_hook", - "js-sys", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-storage", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fancy_constructor" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - -[[package]] -name = "filetime" -version = "0.2.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.60.2", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flex-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" -dependencies = [ - "eyre", - "paste", -] - -[[package]] -name = "flume" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" -dependencies = [ - "futures-core", - "futures-sink", - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "forwarded-header-value" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" -dependencies = [ - "nonempty", - "thiserror 1.0.69", -] - -[[package]] -name = "fs-err" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" -dependencies = [ - "autocfg", -] - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-intrusive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "gcc" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" -dependencies = [ - "serde", - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi", - "wasip2", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug 0.3.1", - "polyval", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "gloo-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.2.0", - "http 1.3.1", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror 1.0.69", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-utils" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-utils" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "goblin" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" -dependencies = [ - "log", - "plain", - "scroll", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.11.4", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.3.1", - "indexmap 2.11.4", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" -dependencies = [ - "cfg-if", - "crunchy", - "zerocopy", -] - -[[package]] -name = "handlebars" -version = "3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" -dependencies = [ - "log", - "pest", - "pest_derive", - "quick-error", - "serde", - "serde_json", -] - -[[package]] -name = "hash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" - -[[package]] -name = "hashlink" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" -dependencies = [ - "hashbrown 0.15.5", -] - -[[package]] -name = "hdrhistogram" -version = "7.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" -dependencies = [ - "base64 0.21.7", - "byteorder", - "flate2", - "nom", - "num-traits", -] - -[[package]] -name = "headers" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" -dependencies = [ - "base64 0.22.1", - "bytes", - "headers-core", - "http 1.3.1", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http 1.3.1", -] - -[[package]] -name = "heapless" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "hash32", - "stable_deref_trait", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-conservative" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" - -[[package]] -name = "hex-literal" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - -[[package]] -name = "hickory-proto" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" -dependencies = [ - "async-trait", - "bytes", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "h2 0.4.12", - "http 1.3.1", - "idna", - "ipnet", - "once_cell", - "rand 0.9.2", - "ring", -<<<<<<< HEAD - "rustls 0.23.32", - "thiserror 2.0.17", -======= - "rustls 0.23.29", - "thiserror 2.0.12", ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) - "tinyvec", - "tokio", - "tokio-rustls 0.26.4", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "hickory-resolver" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "moka", - "once_cell", - "parking_lot", - "rand 0.9.2", - "resolv-conf", -<<<<<<< HEAD - "rustls 0.23.32", -======= - "rustls 0.23.29", ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) - "smallvec", - "thiserror 2.0.17", - "tokio", - "tokio-rustls 0.26.4", - "tracing", - "webpki-roots 0.26.11", -] - -[[package]] -name = "hidapi" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" -dependencies = [ - "cc", - "libc", - "pkg-config", - "winapi", -] - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha1-compact" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" - -[[package]] -name = "hmac-sha256" -version = "1.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha512" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "html5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" -dependencies = [ - "log", - "markup5ever", - "match_token", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.3.1", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http 1.3.1", - "http-body 1.0.1", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpcodec" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" -dependencies = [ - "bytecodec", - "trackable 0.2.24", -] - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "humantime" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" - -[[package]] -name = "humantime-serde" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" -dependencies = [ - "humantime", - "serde", -] - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2 0.4.12", - "http 1.3.1", - "http-body 1.0.1", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -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", - "hyper-util", -<<<<<<< HEAD - "rustls 0.23.32", -======= - "rustls 0.23.29", ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.4", - "tower-service", - "webpki-roots 1.0.3", -] - -[[package]] -name = "hyper-timeout" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" -dependencies = [ - "hyper 1.7.0", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "hyper-util" -<<<<<<< HEAD -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" -======= -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.7.0", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.1", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.62.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" - -[[package]] -name = "icu_provider" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" -dependencies = [ - "displaydoc", - "icu_locale_core", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "impartial-ord" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "importer-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "bip39", - "clap", - "dirs", - "importer-contract", - "nym-bin-common", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-validator-client", - "nym-vesting-contract-common", - "serde", - "serde_json", - "tokio", - "tracing", -] - -[[package]] -name = "importer-contract" -version = "0.1.0" -dependencies = [ - "base85rs", - "cosmwasm-schema", - "cosmwasm-std", -] - -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - -[[package]] -name = "indexed_db_futures" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" -dependencies = [ - "accessory", - "cfg-if", - "delegate-display", - "derive_more 2.0.1", - "fancy_constructor", - "indexed_db_futures_macros_internal", - "js-sys", - "sealed", - "smallvec", - "thiserror 2.0.17", - "tokio", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "indexed_db_futures_macros_internal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caeba94923b68f254abef921cea7e7698bf4675fdd89d7c58bf1ed885b49a27d" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" -dependencies = [ - "equivalent", - "hashbrown 0.16.0", - "serde", - "serde_core", -] - -[[package]] -name = "indicatif" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" -dependencies = [ - "console", - "portable-atomic", - "unicode-width 0.2.2", - "unit-prefix", - "vt100", - "web-time", -] - -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "block-padding", - "generic-array 0.14.9", -] - -[[package]] -name = "inquire" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" -dependencies = [ - "bitflags 1.3.2", - "crossterm 0.25.0", - "dyn-clone", - "lazy_static", - "newline-converter", - "thiserror 1.0.69", - "unicode-segmentation", - "unicode-width 0.1.14", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - -[[package]] -name = "inventory" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" -dependencies = [ - "rustversion", -] - -[[package]] -name = "ip_network" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" - -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2 0.5.10", - "widestring", - "windows-sys 0.48.0", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "ipnetwork" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" -dependencies = [ - "serde", -] - -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "isahc" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" -dependencies = [ - "async-channel", - "castaway", - "crossbeam-utils", - "curl", - "curl-sys", - "event-listener 2.5.3", - "futures-lite", - "http 0.2.12", - "log", - "once_cell", - "polling", - "slab", - "sluice", - "tracing", - "tracing-futures", - "url", - "waker-fn", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jiff" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" -dependencies = [ - "jiff-static", - "log", - "portable-atomic", - "portable-atomic-util", - "serde", -] - -[[package]] -name = "jiff-static" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jwt-simple" -version = "0.12.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "731011e9647a71ff4f8474176ff6ce6e0d2de87a0173f15613af3a84c3e3401a" -dependencies = [ - "anyhow", - "binstring", - "blake2b_simd", - "coarsetime", - "ct-codecs", - "ed25519-compact", - "hmac-sha1-compact", - "hmac-sha256", - "hmac-sha512", - "k256", - "p256", - "p384", - "rand 0.8.5", - "serde", - "serde_json", - "superboring", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "k256" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2 0.10.9", - "signature", -] - -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - -[[package]] -name = "kqueue" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "ledger-apdu" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" -dependencies = [ - "arrayref", - "no-std-compat", - "snafu", -] - -[[package]] -name = "ledger-transport" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" -dependencies = [ - "async-trait", - "ledger-apdu", -] - -[[package]] -name = "ledger-transport-hid" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" -dependencies = [ - "byteorder", - "cfg-if", - "hex", - "hidapi", - "ledger-transport", - "libc", - "log", - "thiserror 1.0.69", -] - -[[package]] -name = "libc" -version = "0.2.177" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" - -[[package]] -name = "libm" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" - -[[package]] -name = "libredox" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" -dependencies = [ - "bitflags 2.9.4", - "libc", - "redox_syscall", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" - -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2 0.8.1", - "chacha", - "keystream", -] - -[[package]] -name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "litrs" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "macroific" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89f276537b4b8f981bf1c13d79470980f71134b7bdcc5e6e911e910e556b0285" -dependencies = [ - "macroific_attr_parse", - "macroific_core", - "macroific_macro", -] - -[[package]] -name = "macroific_attr_parse" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad4023761b45fcd36abed8fb7ae6a80456b0a38102d55e89a57d9a594a236be9" -dependencies = [ - "proc-macro2", - "quote", - "sealed", - "syn 2.0.106", -] - -[[package]] -name = "macroific_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a7594d3c14916fa55bef7e9d18c5daa9ed410dd37504251e4b75bbdeec33e3" -dependencies = [ - "proc-macro2", - "quote", - "sealed", - "syn 2.0.106", -] - -[[package]] -name = "macroific_macro" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da6f2ed796261b0a74e2b52b42c693bb6dee1effba3a482c49592659f824b3b" -dependencies = [ - "macroific_attr_parse", - "macroific_core", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "managed" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "markup5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" -dependencies = [ - "log", - "tendril", - "web_atoms", -] - -[[package]] -name = "match_token" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest 0.10.7", -] - -[[package]] -name = "memchr" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minicov" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" -dependencies = [ - "cc", - "walkdir", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.59.0", -] - -[[package]] -name = "mix-fetch-wasm" -version = "1.4.0-rc.0" -dependencies = [ - "async-trait", - "futures", - "js-sys", - "nym-bin-common", - "nym-http-api-client", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-requests", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "tokio", - "tsify", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-client-core", - "wasm-utils", -] - -[[package]] -name = "mixnet-connectivity-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-network-defaults", - "nym-sdk", - "tokio", - "tracing", -] - -[[package]] -name = "mock_instant" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" - -[[package]] -name = "moka" -version = "0.12.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" -dependencies = [ - "async-lock", - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "equivalent", - "event-listener 5.4.1", - "futures-util", - "parking_lot", - "portable-atomic", - "rustc_version 0.4.1", - "smallvec", - "tagptr", - "uuid", -] - -[[package]] -name = "multer" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http 1.3.1", - "httparse", - "memchr", - "mime", - "spin", - "version_check", -] - -[[package]] -name = "netlink-packet-core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-core" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" -dependencies = [ - "paste", -] - -[[package]] -name = "netlink-packet-generic" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-core 0.7.0", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-generic" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f891b2e0054cac5a684a06628f59568f841c93da4e551239da6e518f539e775" -dependencies = [ - "netlink-packet-core 0.8.1", -] - -[[package]] -name = "netlink-packet-route" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" -dependencies = [ - "anyhow", - "bitflags 2.9.4", - "byteorder", - "libc", - "log", - "netlink-packet-core 0.7.0", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d83370a96813d7c977f8b63054f1162df6e5784f1c598d689236564fb5a6f2" -dependencies = [ - "anyhow", - "bitflags 2.9.4", - "byteorder", - "libc", - "log", - "netlink-packet-core 0.7.0", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", -] - -[[package]] -name = "netlink-packet-wireguard" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598962d9067d3153a00106da10e7b8276cea68f396f4a22f5b4a079270d92e29" -dependencies = [ - "libc", - "log", - "netlink-packet-core 0.8.1", - "netlink-packet-generic 0.4.0", -] - -[[package]] -name = "netlink-proto" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core 0.7.0", - "netlink-sys", - "thiserror 2.0.17", -] - -[[package]] -name = "netlink-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" -dependencies = [ - "bytes", - "futures", - "libc", - "log", - "tokio", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "newline-converter" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nonempty" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" - -[[package]] -name = "notify" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" -dependencies = [ - "bitflags 1.3.2", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "mio 0.8.11", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.5", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "nym-api" -version = "1.1.67" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "axum-test", - "bincode", - "bip39", - "bs58", - "cfg-if", - "clap", - "console-subscriber", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw3", - "cw4", - "dashmap", - "dotenvy", - "futures", - "humantime-serde", - "moka", - "nym-api-requests", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-cache", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-dkg", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-ecash-time", - "nym-gateway-client", - "nym-http-api-client", - "nym-http-api-common", - "nym-mixnet-contract-common", - "nym-node-requests", - "nym-node-tester-utils", - "nym-pemstore", - "nym-serde-helpers", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-ticketbooks-merkle", - "nym-topology", - "nym-types", - "nym-validator-client", - "pin-project", - "rand 0.8.5", - "rand_chacha 0.3.1", - "reqwest 0.12.24", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx", - "tempfile", - "tendermint", - "test-with", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "ts-rs", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", - "zeroize", -] - -[[package]] -name = "nym-api-requests" -version = "0.1.0" -dependencies = [ - "bs58", - "cosmrs", - "cosmwasm-std", - "ecdsa", - "hex", - "humantime-serde", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-signer-check-types", - "nym-ecash-time", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-node-requests", - "nym-noise-keys", - "nym-serde-helpers", - "nym-ticketbooks-merkle", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tracing", - "ts-rs", - "utoipa", -] - -[[package]] -name = "nym-apple-network" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" -dependencies = [ - "block2", - "dispatch2", - "nix 0.30.1", - "objc2", - "objc2-foundation", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-async-file-watcher" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "notify", - "tokio", -] - -[[package]] -name = "nym-authenticator-client" -version = "0.1.0" -dependencies = [ - "bincode", - "futures", - "nym-authenticator-requests", - "nym-bandwidth-controller", - "nym-credentials-interface", - "nym-crypto", - "nym-registration-common", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-validator-client", - "nym-wireguard-types", - "semver 1.0.27", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-authenticator-requests" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "bincode", - "hmac", - "nym-credentials-interface", - "nym-crypto", - "nym-network-defaults", - "nym-service-provider-requests-common", - "nym-sphinx", - "nym-wireguard-types", - "rand 0.8.5", - "semver 1.0.27", - "serde", - "sha2 0.10.9", - "strum_macros", - "thiserror 2.0.17", - "x25519-dalek", -] - -[[package]] -name = "nym-bandwidth-controller" -version = "0.1.0" -dependencies = [ - "async-trait", - "bip39", - "log", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "thiserror 2.0.17", - "url", - "zeroize", -] - -[[package]] -name = "nym-bin-common" -version = "0.6.0" -dependencies = [ - "clap", - "clap_complete", - "clap_complete_fig", - "const-str", - "log", - "opentelemetry", - "opentelemetry-jaeger", - "schemars 0.8.22", - "serde", - "serde_json", - "tracing", - "tracing-opentelemetry", - "tracing-subscriber", - "tracing-tree", - "utoipa", - "vergen", -] - -[[package]] -name = "nym-cache" -version = "0.1.0" -dependencies = [ - "tokio", -] - -[[package]] -name = "nym-cli" -version = "1.1.64" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bip39", - "bs58", - "clap", - "clap_complete", - "clap_complete_fig", - "dotenvy", - "inquire", - "log", - "nym-bin-common", - "nym-cli-commands", - "nym-network-defaults", - "nym-validator-client", - "serde", - "serde_json", - "tap", - "tokio", -] - -[[package]] -name = "nym-cli-commands" -version = "1.0.0" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bip39", - "bs58", - "cfg-if", - "clap", - "colored", - "comfy-table", - "cosmrs", - "cosmwasm-std", - "csv", - "cw-utils", - "futures", - "handlebars", - "humantime-serde", - "inquire", - "k256", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-coconut-dkg-common", - "nym-config", - "nym-contracts-common", - "nym-credential-proxy-requests", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-http-api-client", - "nym-id", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "toml 0.8.23", - "url", - "zeroize", -] - -[[package]] -name = "nym-client" -version = "1.1.64" -dependencies = [ - "bs58", - "clap", - "dirs", - "futures", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-client-websocket-requests", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-gateway-requests", - "nym-id", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core" -version = "1.1.15" -dependencies = [ - "async-trait", - "base64 0.21.7", - "bincode", - "bs58", - "cfg-if", - "clap", - "comfy-table", - "futures", - "gloo-timers", - "http-body-util", - "humantime", - "hyper 1.7.0", - "hyper-util", - "nym-bandwidth-controller", - "nym-client-core-config-types", - "nym-client-core-gateways-storage", - "nym-client-core-surb-storage", - "nym-credential-storage", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-gateway-client", - "nym-gateway-requests", - "nym-http-api-client", - "nym-id", - "nym-mixnet-client", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-nonexhaustive-delayqueue", - "nym-pemstore", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-client-core-config-types" -version = "0.1.0" -dependencies = [ - "humantime-serde", - "nym-config", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-statistics-common", - "serde", - "thiserror 2.0.17", - "url", -] - -[[package]] -name = "nym-client-core-gateways-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "cosmrs", - "nym-crypto", - "nym-gateway-requests", - "serde", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core-surb-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "dashmap", - "nym-crypto", - "nym-sphinx", - "nym-task", - "sqlx", - "sqlx-pool-guard", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-client-wasm" -version = "1.4.0-rc.0" -dependencies = [ - "anyhow", - "futures", - "js-sys", - "nym-bin-common", - "nym-node-tester-utils", - "nym-node-tester-wasm", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "wasm-client-core", - "wasm-utils", -] - -[[package]] -name = "nym-client-websocket-requests" -version = "0.1.0" -dependencies = [ - "nym-sphinx", - "serde", - "serde_json", -] - -[[package]] -name = "nym-coconut-dkg-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw4", - "nym-contracts-common", - "nym-multisig-contract-common", -] - -[[package]] -name = "nym-common" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" -dependencies = [ - "tracing", - "tracing-test", -] - -[[package]] -name = "nym-compact-ecash" -version = "0.1.0" -dependencies = [ - "bincode", - "bls12_381", - "bs58", - "cfg-if", - "criterion", - "digest 0.10.7", - "ff", - "group", - "itertools 0.14.0", - "nym-network-defaults", - "nym-pemstore", - "rand 0.8.5", - "rayon", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-config" -version = "0.1.0" -dependencies = [ - "dirs", - "handlebars", - "log", - "nym-network-defaults", - "serde", - "thiserror 2.0.17", - "toml 0.8.23", - "url", -] - -[[package]] -name = "nym-contracts-common" -version = "0.5.0" -dependencies = [ - "anyhow", - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "utoipa", - "vergen", -] - -[[package]] -name = "nym-contracts-common-testing" -version = "0.1.0" -dependencies = [ - "anyhow", - "cosmwasm-std", - "cw-multi-test", - "cw-storage-plus", - "nym-contracts-common", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", -] - -[[package]] -name = "nym-cpp-ffi" -version = "0.1.2" -dependencies = [ - "anyhow", - "bs58", - "lazy_static", - "nym-bin-common", - "nym-ffi-shared", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "tokio", -] - -[[package]] -name = "nym-credential-proxy" -version = "0.3.0" -dependencies = [ - "anyhow", - "axum", - "bip39", - "bs58", - "cfg-if", - "clap", - "futures", - "humantime", - "nym-bin-common", - "nym-compact-ecash", - "nym-config", - "nym-credential-proxy-lib", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-http-api-common", - "nym-network-defaults", - "nym-validator-client", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "url", - "utoipa", - "utoipa-swagger-ui", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-credential-proxy-lib" -version = "0.1.0" -dependencies = [ - "anyhow", - "axum", - "bip39", - "bs58", - "futures", - "humantime", - "nym-cache", - "nym-compact-ecash", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-signer-check", - "nym-network-defaults", - "nym-validator-client", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tracing", - "url", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-credential-proxy-requests" -version = "0.1.0" -dependencies = [ - "async-trait", - "nym-credentials", - "nym-credentials-interface", - "nym-http-api-client", - "nym-http-api-common", - "nym-serde-helpers", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "serde_json", - "time", - "tsify", - "utoipa", - "uuid", - "wasm-bindgen", - "wasmtimer", -] - -[[package]] -name = "nym-credential-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "log", - "nym-compact-ecash", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-test-utils", - "serde", - "sqlx", - "sqlx-pool-guard", - "thiserror 2.0.17", - "tokio", - "zeroize", -] - -[[package]] -name = "nym-credential-utils" -version = "0.1.0" -dependencies = [ - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-ecash-time", - "nym-validator-client", - "thiserror 2.0.17", - "time", - "tokio", -] - -[[package]] -name = "nym-credential-verification" -version = "0.1.0" -dependencies = [ - "async-trait", - "bs58", - "cosmwasm-std", - "cw-utils", - "dyn-clone", - "futures", - "nym-api-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-ecash-contract-common", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "si-scale", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-credentials" -version = "0.1.0" -dependencies = [ - "bincode", - "bls12_381", - "cosmrs", - "log", - "nym-api-requests", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-http-api-client", - "nym-network-defaults", - "nym-serde-helpers", - "nym-validator-client", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "zeroize", -] - -[[package]] -name = "nym-credentials-interface" -version = "0.1.0" -dependencies = [ - "bls12_381", - "nym-compact-ecash", - "nym-ecash-time", - "nym-network-defaults", - "rand 0.8.5", - "serde", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "utoipa", -] - -[[package]] -name = "nym-crypto" -version = "0.4.0" -dependencies = [ - "aead", - "aes", - "aes-gcm-siv", - "base64 0.22.1", - "blake3", - "bs58", - "cipher", - "ctr", - "digest 0.10.7", - "ed25519-dalek", - "generic-array 0.14.9", - "hkdf", - "hmac", - "jwt-simple", - "nym-pemstore", - "nym-sphinx-types", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_bytes", - "sha2 0.10.9", - "subtle-encoding", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-dkg" -version = "0.1.0" -dependencies = [ - "bitvec", - "bls12_381", - "bs58", - "criterion", - "ff", - "group", - "lazy_static", - "nym-contracts-common", - "nym-pemstore", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "serde", - "serde_derive", - "sha2 0.10.9", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-ecash-contract-common" -version = "0.1.0" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "nym-multisig-contract-common", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ecash-signer-check" -version = "0.1.0" -dependencies = [ - "futures", - "nym-ecash-signer-check-types", - "nym-http-api-client", - "nym-network-defaults", - "nym-validator-client", - "semver 1.0.27", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nym-ecash-signer-check-types" -version = "0.1.0" -dependencies = [ - "nym-coconut-dkg-common", - "nym-crypto", - "semver 1.0.27", - "serde", - "thiserror 2.0.17", - "time", - "tracing", - "url", - "utoipa", -] - -[[package]] -name = "nym-ecash-time" -version = "0.1.0" -dependencies = [ - "nym-compact-ecash", - "time", -] - -[[package]] -name = "nym-exit-policy" -version = "0.1.0" -dependencies = [ - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-ffi-shared" -version = "0.2.1" -dependencies = [ - "anyhow", - "bs58", - "lazy_static", - "nym-bin-common", - "nym-crypto", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "tokio", - "uniffi", - "uniffi_build", -] - -[[package]] -name = "nym-gateway" -version = "1.1.36" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bip39", - "bs58", - "dashmap", - "defguard_wireguard_rs", - "fastrand 2.3.0", - "futures", - "ipnetwork", - "mock_instant", - "nym-api-requests", - "nym-authenticator-requests", - "nym-client-core", - "nym-credential-verification", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-gateway-stats-storage", - "nym-gateway-storage", - "nym-id", - "nym-ip-packet-router", - "nym-mixnet-client", - "nym-mixnode-common", - "nym-network-defaults", - "nym-network-requester", - "nym-node-metrics", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-types", - "nym-validator-client", - "nym-wireguard", - "nym-wireguard-private-metadata-server", - "nym-wireguard-types", - "rand 0.8.5", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-gateway-client" -version = "0.1.0" -dependencies = [ - "futures", - "getrandom 0.2.16", - "gloo-utils 0.2.0", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "serde", - "si-scale", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-directory" -version = "0.0.0" -dependencies = [ - "futures", - "itertools 0.14.0", - "nym-client-core", - "nym-common", - "nym-http-api-client", - "nym-offline-monitor", - "nym-sphinx", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "strum", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nym-gateway-requests" -version = "0.1.0" -dependencies = [ - "anyhow", - "bs58", - "futures", - "generic-array 0.14.9", - "nym-compact-ecash", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-pemstore", - "nym-serde-helpers", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-test-utils", - "rand 0.8.5", - "serde", - "serde_json", - "strum", - "subtle 2.6.1", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "tungstenite 0.20.1", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-stats-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "nym-node-metrics", - "nym-sphinx", - "nym-statistics-common", - "sqlx", - "strum", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-gateway-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "defguard_wireguard_rs", - "dyn-clone", - "nym-credentials-interface", - "nym-gateway-requests", - "nym-sphinx", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-go-ffi" -version = "0.2.2" -dependencies = [ - "anyhow", - "lazy_static", - "nym-bin-common", - "nym-crypto", - "nym-ffi-shared", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "thiserror 2.0.17", - "tokio", - "uniffi", - "uniffi_build", -] - -[[package]] -name = "nym-group-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cw-controllers", - "cw4", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "nym-http-api-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "bincode", - "bytes", - "cfg-if", - "encoding_rs", - "hickory-resolver", - "http 1.3.1", - "inventory", - "itertools 0.14.0", - "mime", - "nym-bin-common", - "nym-http-api-client-macro", - "nym-http-api-common", - "nym-network-defaults", - "once_cell", - "reqwest 0.12.24", - "serde", - "serde_json", - "serde_plain", - "serde_yaml", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "nym-http-api-client-macro" -version = "0.1.0" -dependencies = [ - "nym-http-api-client", - "proc-macro-crate", - "proc-macro2", - "quote", - "reqwest 0.12.24", - "syn 2.0.106", - "uuid", -] - -[[package]] -name = "nym-http-api-common" -version = "0.1.0" -dependencies = [ - "axum", - "axum-client-ip", - "bincode", - "bytes", - "colored", - "futures", - "mime", - "serde", - "serde_json", - "serde_yaml", - "subtle 2.6.1", - "time", - "tower 0.5.2", - "tracing", - "utoipa", - "zeroize", -] - -[[package]] -name = "nym-id" -version = "0.1.0" -dependencies = [ - "nym-credential-storage", - "nym-credentials", - "thiserror 2.0.17", - "time", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-id-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "bs58", - "clap", - "nym-bin-common", - "nym-credential-storage", - "nym-id", - "tokio", - "tracing", -] - -[[package]] -name = "nym-inclusion-probability" -version = "0.1.0" -dependencies = [ - "log", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ip-packet-client" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "futures", - "nym-gateway-directory", - "nym-ip-packet-requests", - "nym-sdk", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-ip-packet-requests" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "nym-bin-common", - "nym-crypto", - "nym-service-provider-requests-common", - "nym-sphinx", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", -] - -[[package]] -name = "nym-ip-packet-router" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bs58", - "bytes", - "clap", - "etherparse", - "futures", - "log", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-crypto", - "nym-exit-policy", - "nym-id", - "nym-ip-packet-requests", - "nym-network-defaults", - "nym-network-requester", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-service-providers-common", - "nym-sphinx", - "nym-task", - "nym-tun", - "nym-types", - "nym-wireguard", - "nym-wireguard-types", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tun", - "tokio-util", - "url", -] - -[[package]] -name = "nym-ledger" -version = "0.1.0" -dependencies = [ - "bip32", - "k256", - "ledger-transport", - "ledger-transport-hid", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-metrics" -version = "0.1.0" -dependencies = [ - "dashmap", - "lazy_static", - "prometheus", - "tracing", -] - -[[package]] -name = "nym-mixnet-client" -version = "0.1.0" -dependencies = [ - "dashmap", - "futures", - "nym-crypto", - "nym-noise", - "nym-sphinx", - "nym-task", - "rand 0.8.5", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-mixnet-contract-common" -version = "0.6.0" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-storage-plus", - "cw2", - "humantime-serde", - "nym-contracts-common", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "serde_repr", - "thiserror 2.0.17", - "time", - "ts-rs", - "utoipa", -] - -[[package]] -name = "nym-mixnode-common" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "humantime-serde", - "log", - "nym-crypto", - "nym-metrics", - "nym-network-defaults", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-types", - "nym-task", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "url", -] - -[[package]] -name = "nym-multisig-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "cw3", - "cw4", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-network-defaults" -version = "0.1.0" -dependencies = [ - "cargo_metadata 0.19.2", - "dotenvy", - "log", - "regex", - "schemars 0.8.22", - "serde", - "url", - "utoipa", -] - -[[package]] -name = "nym-network-monitor" -version = "1.0.2" -dependencies = [ - "anyhow", - "axum", - "clap", - "dashmap", - "futures", - "log", - "nym-bin-common", - "nym-client-core", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-sdk", - "nym-sphinx", - "nym-topology", - "nym-types", - "nym-validator-client", - "petgraph", - "rand 0.8.5", - "rand_chacha 0.3.1", - "reqwest 0.12.24", - "serde", - "serde_json", - "tokio", - "tokio-postgres", - "tokio-util", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "nym-network-requester" -version = "1.1.65" -dependencies = [ - "addr", - "anyhow", - "async-trait", - "bs58", - "clap", - "dirs", - "futures", - "humantime-serde", - "ipnetwork", - "log", - "nym-async-file-watcher", - "nym-bin-common", - "nym-client-core", - "nym-client-websocket-requests", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-exit-policy", - "nym-id", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-types", - "publicsuffix", - "rand 0.8.5", - "regex", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "tokio-util", - "url", - "zeroize", -] - -[[package]] -name = "nym-node" -version = "1.19.0" -dependencies = [ - "anyhow", - "arc-swap", - "arrayref", - "async-trait", - "axum", - "bip39", - "blake2 0.8.1", - "bloomfilter", - "bs58", - "cargo_metadata 0.19.2", - "celes", - "cfg-if", - "chacha", - "clap", - "colored", - "console-subscriber", - "criterion", - "csv", - "cupid", - "futures", - "hkdf", - "human-repr", - "humantime-serde", - "indicatif", - "ipnetwork", - "lioness", - "nym-bin-common", - "nym-client-core-config-types", - "nym-config", - "nym-crypto", - "nym-gateway", - "nym-gateway-stats-storage", - "nym-http-api-client", - "nym-http-api-common", - "nym-ip-packet-router", - "nym-metrics", - "nym-mixnet-client", - "nym-network-requester", - "nym-node-metrics", - "nym-node-requests", - "nym-noise", - "nym-noise-keys", - "nym-nonexhaustive-delayqueue", - "nym-pemstore", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-types", - "nym-validator-client", - "nym-verloc", - "nym-wireguard", - "nym-wireguard-types", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "sysinfo", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.8.23", - "tower-http 0.5.2", - "tracing", - "tracing-indicatif", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "zeroize", -] - -[[package]] -name = "nym-node-metrics" -version = "0.1.0" -dependencies = [ - "dashmap", - "futures", - "nym-metrics", - "nym-statistics-common", - "strum", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-node-requests" -version = "0.1.0" -dependencies = [ - "async-trait", - "celes", - "humantime", - "humantime-serde", - "nym-bin-common", - "nym-crypto", - "nym-exit-policy", - "nym-http-api-client", - "nym-noise-keys", - "nym-wireguard-types", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "serde", - "serde_json", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "tokio", - "utoipa", -] - -[[package]] -name = "nym-node-status-agent" -version = "1.0.7" -dependencies = [ - "anyhow", - "clap", - "futures", - "nym-bin-common", - "nym-crypto", - "nym-node-status-client", - "rand 0.8.5", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "nym-node-status-api" -version = "4.0.5" -dependencies = [ - "ammonia", - "anyhow", - "axum", - "axum-test", - "bip39", - "bs58", - "celes", - "clap", - "cosmwasm-std", - "futures-util", - "humantime", - "itertools 0.14.0", - "moka", - "nym-bin-common", - "nym-contracts-common", - "nym-credential-proxy-lib", - "nym-credentials", - "nym-crypto", - "nym-ecash-time", - "nym-http-api-client", - "nym-http-api-common", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-node-metrics", - "nym-node-requests", - "nym-node-status-client", - "nym-serde-helpers", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "rand_chacha 0.3.1", - "regex", - "reqwest 0.12.24", - "semver 1.0.27", - "serde", - "serde_json", - "serde_json_path", - "sqlx", - "strum", - "strum_macros", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-log 0.2.0", - "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", - "zeroize", -] - -[[package]] -name = "nym-node-status-client" -version = "0.2.0" -dependencies = [ - "anyhow", - "bincode", - "bs58", - "nym-credentials", - "nym-crypto", - "reqwest 0.12.24", - "serde", - "serde_json", - "time", - "tracing", -] - -[[package]] -name = "nym-node-tester-utils" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "nym-crypto", - "nym-sphinx", - "nym-sphinx-params", - "nym-task", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "wasm-utils", -] - -[[package]] -name = "nym-node-tester-wasm" -version = "1.3.0-rc.0" -dependencies = [ - "futures", - "js-sys", - "nym-node-tester-utils", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "tokio", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-client-core", - "wasm-utils", - "wasmtimer", -] - -[[package]] -name = "nym-noise" -version = "0.1.0" -dependencies = [ - "anyhow", - "arc-swap", - "bytes", - "futures", - "nym-crypto", - "nym-noise-keys", - "nym-test-utils", - "pin-project", - "rand_chacha 0.3.1", - "sha2 0.10.9", - "snow", - "strum", - "strum_macros", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-noise-keys" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "schemars 0.8.22", - "serde", - "utoipa", -] - -[[package]] -name = "nym-nonexhaustive-delayqueue" -version = "0.1.0" -dependencies = [ - "tokio", - "tokio-stream", - "tokio-util", - "wasmtimer", -] - -[[package]] -name = "nym-nr-query" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "log", - "nym-bin-common", - "nym-network-defaults", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-requests", - "serde", - "tokio", -] - -[[package]] -name = "nym-offline-monitor" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" -dependencies = [ - "async-trait", - "debounced", - "dispatch2", - "futures", - "nym-apple-network", - "nym-common", - "nym-routing", - "nym-windows", - "thiserror 2.0.17", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-ordered-buffer" -version = "0.1.0" -dependencies = [ - "log", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-outfox" -version = "0.1.0" -dependencies = [ - "blake3", - "chacha20", - "chacha20poly1305", - "criterion", - "fastrand 2.3.0", - "getrandom 0.2.16", - "log", - "rand 0.8.5", - "rayon", - "sphinx-packet", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-pemstore" -version = "0.3.0" -dependencies = [ - "pem", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-performance-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "nym-contracts-common", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-pool-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", - "time", -] - -[[package]] -name = "nym-registration-client" -version = "0.1.0" -dependencies = [ - "nym-authenticator-client", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials-interface", - "nym-ip-packet-client", - "nym-registration-common", - "nym-sdk", - "nym-validator-client", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "nym-registration-common" -version = "0.1.0" -dependencies = [ - "nym-authenticator-requests", - "nym-crypto", - "nym-ip-packet-requests", - "nym-sphinx", - "tokio-util", -] - -[[package]] -name = "nym-routing" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" -dependencies = [ - "bitflags 2.9.4", - "futures", - "ipnetwork", - "libc", - "netlink-packet-core 0.7.0", - "netlink-packet-route 0.24.0", - "netlink-sys", - "nix 0.30.1", - "nym-common", - "nym-windows", - "rtnetlink", - "system-configuration 0.6.1", - "thiserror 2.0.17", - "tokio", - "tracing", - "widestring", - "windows 0.59.0", -] - -[[package]] -name = "nym-sdk" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bip39", - "bytecodec", - "bytes", - "clap", - "dashmap", - "dirs", - "dotenvy", - "futures", - "hex", - "http 1.3.1", - "httpcodec", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-config 0.1.0", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-directory", - "nym-gateway-requests", - "nym-http-api-client", - "nym-ip-packet-requests", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-client-core", - "nym-socks5-requests", - "nym-sphinx", - "nym-sphinx-addressing", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "parking_lot", - "pnet_packet", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.8.23", - "tracing", - "tracing-subscriber", - "url", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-serde-helpers" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "bs58", - "hex", - "serde", - "time", -] - -[[package]] -name = "nym-service-provider-requests-common" -version = "0.1.0" -dependencies = [ - "bincode", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-service-providers-common" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "log", - "nym-bin-common", - "nym-sdk", - "nym-socks5-requests", - "nym-sphinx-anonymous-replies", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", -] - -[[package]] -name = "nym-signers-monitor" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "humantime", - "itertools 0.14.0", - "nym-bin-common", - "nym-ecash-signer-check", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "time", - "tokio", - "tracing", - "url", - "zulip-client", -] - -[[package]] -name = "nym-socks5-client" -version = "1.1.64" -dependencies = [ - "bs58", - "clap", - "log", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-gateway-requests", - "nym-id", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-pemstore", - "nym-socks5-client-core", - "nym-sphinx", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", - "time", - "tokio", - "url", - "zeroize", -] - -[[package]] -name = "nym-socks5-client-core" -version = "0.1.0" -dependencies = [ - "anyhow", - "dirs", - "futures", - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-contracts-common", - "nym-credential-storage", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-validator-client", - "pin-project", - "rand 0.8.5", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "tap", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "url", -] - -[[package]] -name = "nym-socks5-proxy-helpers" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "log", - "nym-ordered-buffer", - "nym-socks5-requests", - "nym-task", - "tokio", - "tokio-test", - "tokio-util", -] - -[[package]] -name = "nym-socks5-requests" -version = "0.1.0" -dependencies = [ - "bincode", - "log", - "nym-exit-policy", - "nym-service-providers-common", - "nym-sphinx-addressing", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx" -version = "0.1.0" -dependencies = [ - "bincode", - "log", - "nym-crypto", - "nym-metrics", - "nym-mixnet-contract-common", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-chunking", - "nym-sphinx-cover", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_distr", - "serde", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-sphinx-acknowledgements" -version = "0.1.0" -dependencies = [ - "generic-array 0.14.9", - "nym-crypto", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-sphinx-addressing" -version = "0.1.0" -dependencies = [ - "bincode", - "nym-crypto", - "nym-sphinx-types", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-anonymous-replies" -version = "0.1.0" -dependencies = [ - "bs58", - "nym-crypto", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "thiserror 2.0.17", - "tracing", - "wasm-bindgen", -] - -[[package]] -name = "nym-sphinx-chunking" -version = "0.1.0" -dependencies = [ - "dashmap", - "log", - "nym-crypto", - "nym-metrics", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-types", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "utoipa", -] - -[[package]] -name = "nym-sphinx-cover" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-chunking", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-forwarding" -version = "0.1.0" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-params", - "nym-sphinx-types", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-framing" -version = "0.1.0" -dependencies = [ - "bytes", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-types", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-sphinx-params" -version = "0.1.0" -dependencies = [ - "nym-crypto", - "nym-sphinx-types", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-routing" -version = "0.1.0" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-types", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-types" -version = "0.2.0" -dependencies = [ - "nym-outfox", - "sphinx-packet", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-statistics-api" -version = "0.2.1" -dependencies = [ - "anyhow", - "axum", - "axum-client-ip", - "axum-extra", - "celes", - "clap", - "nym-bin-common", - "nym-http-api-client", - "nym-http-api-common", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "serde", - "serde_json", - "sqlx", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nym-statistics-common" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "nym-credentials-interface", - "nym-crypto", - "nym-metrics", - "nym-sphinx", - "nym-task", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "strum", - "strum_macros", - "sysinfo", - "thiserror 2.0.17", - "time", - "tokio", - "utoipa", - "wasmtimer", -] - -[[package]] -name = "nym-store-cipher" -version = "0.1.0" -dependencies = [ - "aes-gcm", - "argon2", - "generic-array 0.14.9", - "getrandom 0.2.16", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-task" -version = "0.1.0" -dependencies = [ - "anyhow", - "cfg-if", - "futures", - "log", - "nym-test-utils", - "serde", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasmtimer", -] - -[[package]] -name = "nym-test-utils" -version = "0.1.0" -dependencies = [ - "anyhow", - "futures", - "rand_chacha 0.3.1", - "tokio", -] - -[[package]] -name = "nym-ticketbooks-merkle" -version = "0.1.0" -dependencies = [ - "nym-credentials-interface", - "nym-serde-helpers", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rs_merkle", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "time", - "utoipa", -] - -[[package]] -name = "nym-topology" -version = "0.1.0" -dependencies = [ - "async-trait", - "nym-api-requests", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-sphinx-addressing", - "nym-sphinx-types", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tracing", - "tsify", - "wasm-bindgen", - "wasm-utils", -] - -[[package]] -name = "nym-tun" -version = "0.1.0" -dependencies = [ - "etherparse", - "log", - "nym-wireguard-types", - "thiserror 2.0.17", - "tokio", - "tokio-tun", -] - -[[package]] -name = "nym-types" -version = "1.0.0" -dependencies = [ - "base64 0.22.1", - "cosmrs", - "cosmwasm-std", - "eyre", - "hmac", - "itertools 0.14.0", - "log", - "nym-config", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-validator-client", - "nym-vesting-contract-common", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "strum", - "strum_macros", - "tempfile", - "thiserror 2.0.17", - "ts-rs", - "url", - "utoipa", - "x25519-dalek", -] - -[[package]] -name = "nym-upgrade-mode-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "jwt-simple", - "nym-crypto", - "nym-http-api-client", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tracing", -] - -[[package]] -name = "nym-validator-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bip32", - "bip39", - "colored", - "cosmrs", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "cw3", - "cw4", - "eyre", - "flate2", - "futures", - "itertools 0.14.0", - "nym-api-requests", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-ecash-contract-common", - "nym-group-contract-common", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-network-defaults", - "nym-performance-contract-common", - "nym-serde-helpers", - "nym-vesting-contract-common", - "prost", - "reqwest 0.12.24", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "ts-rs", - "url", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-validator-rewarder" -version = "0.3.0" -dependencies = [ - "anyhow", - "bip39", - "clap", - "cosmwasm-std", - "futures", - "humantime", - "humantime-serde", - "nym-bin-common", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-http-api-client", - "nym-network-defaults", - "nym-pemstore", - "nym-serde-helpers", - "nym-task", - "nym-ticketbooks-merkle", - "nym-validator-client", - "nyxd-scraper", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "serde_with", - "sha2 0.10.9", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-verloc" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "humantime", - "nym-api-requests", - "nym-crypto", - "nym-http-api-client", - "nym-task", - "nym-validator-client", - "rand 0.8.5", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "nym-vesting-contract-common" -version = "0.7.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2", - "nym-contracts-common", - "nym-mixnet-contract-common", - "serde", - "thiserror 2.0.17", - "ts-rs", -] - -[[package]] -name = "nym-vpn-api-lib-wasm" -version = "0.1.0" -dependencies = [ - "bs58", - "getrandom 0.2.16", - "js-sys", - "nym-bin-common", - "nym-compact-ecash", - "nym-credential-proxy-requests", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "thiserror 2.0.17", - "time", - "tsify", - "wasm-bindgen", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "nym-wallet-types" -version = "1.0.0" -dependencies = [ - "cosmrs", - "cosmwasm-std", - "hex-literal", - "nym-config", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "serde", - "serde_json", - "strum", - "strum_macros", - "ts-rs", -] - -[[package]] -name = "nym-windows" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" -dependencies = [ - "bitflags 2.9.4", - "futures", - "thiserror 2.0.17", - "tokio", - "tracing", - "windows 0.59.0", -] - -[[package]] -name = "nym-wireguard" -version = "0.1.0" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bincode", - "chrono", - "dashmap", - "defguard_wireguard_rs", - "dyn-clone", - "futures", - "ip_network", - "log", - "nym-authenticator-requests", - "nym-credential-verification", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-network-defaults", - "nym-node-metrics", - "nym-task", - "nym-wireguard-types", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tracing", - "x25519-dalek", -] - -[[package]] -name = "nym-wireguard-private-metadata-client" -version = "1.0.0" -dependencies = [ - "async-trait", - "nym-http-api-client", - "nym-wireguard-private-metadata-shared", - "tracing", -] - -[[package]] -name = "nym-wireguard-private-metadata-server" -version = "1.0.0" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "futures", - "nym-credential-verification", - "nym-credentials-interface", - "nym-http-api-common", - "nym-wireguard", - "nym-wireguard-private-metadata-shared", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "nym-wireguard-private-metadata-shared" -version = "1.0.0" -dependencies = [ - "axum", - "bincode", - "nym-credentials-interface", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", - "utoipa", -] - -[[package]] -name = "nym-wireguard-private-metadata-tests" -version = "1.0.0" -dependencies = [ - "async-trait", - "axum", - "nym-credential-verification", - "nym-credentials-interface", - "nym-http-api-client", - "nym-http-api-common", - "nym-wireguard", - "nym-wireguard-private-metadata-client", - "nym-wireguard-private-metadata-server", - "nym-wireguard-private-metadata-shared", - "tokio", - "tower-http 0.5.2", - "utoipa", -] - -[[package]] -name = "nym-wireguard-types" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "log", - "nym-config", - "nym-crypto", - "nym-network-defaults", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "x25519-dalek", -] - -[[package]] -name = "nymvisor" -version = "0.1.29" -dependencies = [ - "anyhow", - "bytes", - "clap", - "dotenvy", - "flate2", - "futures", - "hex", - "humantime", - "humantime-serde", - "nix 0.27.1", - "nym-async-file-watcher", - "nym-bin-common", - "nym-config", - "nym-task", - "reqwest 0.12.24", - "serde", - "serde_json", - "sha2 0.10.9", - "tar", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nyx-chain-watcher" -version = "0.1.14" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "chrono", - "clap", - "nym-bin-common", - "nym-config", - "nym-network-defaults", - "nym-task", - "nym-validator-client", - "nyxd-scraper", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nyxd-scraper" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "const_format", - "cosmrs", - "eyre", - "futures", - "humantime", - "serde", - "sha2 0.10.9", - "sqlx", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "objc2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" -dependencies = [ - "objc2-encode", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.9.4", - "dispatch2", - "objc2", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" -dependencies = [ - "bitflags 2.9.4", - "block2", - "libc", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-io-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" -dependencies = [ - "libc", - "objc2-core-foundation", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" - -[[package]] -name = "oorandom" -version = "11.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[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.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.110" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" -dependencies = [ - "opentelemetry_api", - "opentelemetry_sdk", -] - -[[package]] -name = "opentelemetry-http" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" -dependencies = [ - "async-trait", - "bytes", - "http 0.2.12", - "isahc", - "opentelemetry_api", -] - -[[package]] -name = "opentelemetry-jaeger" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" -dependencies = [ - "async-trait", - "futures", - "futures-executor", - "http 0.2.12", - "isahc", - "once_cell", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-semantic-conventions", - "thiserror 1.0.69", - "thrift", - "tokio", -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" -dependencies = [ - "opentelemetry", -] - -[[package]] -name = "opentelemetry_api" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" -dependencies = [ - "fnv", - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "once_cell", - "pin-project-lite", - "thiserror 1.0.69", - "urlencoding", -] - -[[package]] -name = "opentelemetry_sdk" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" -dependencies = [ - "async-trait", - "crossbeam-channel", - "dashmap", - "fnv", - "futures-channel", - "futures-executor", - "futures-util", - "once_cell", - "opentelemetry_api", - "percent-encoding", - "rand 0.8.5", - "thiserror 1.0.69", - "tokio", - "tokio-stream", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - -[[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link 0.2.1", -] - -[[package]] -name = "password-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "peg" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477" -dependencies = [ - "peg-macros", - "peg-runtime", -] - -[[package]] -name = "peg-macros" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71" -dependencies = [ - "peg-runtime", - "proc-macro2", - "quote", -] - -[[package]] -name = "peg-runtime" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca" - -[[package]] -name = "pem" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" -dependencies = [ - "base64 0.13.1", - "once_cell", - "regex", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pest" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "pest_meta" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" -dependencies = [ - "pest", - "sha2 0.10.9", -] - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.11.4", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_shared 0.13.1", - "serde", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.1", -] - -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher 1.0.1", -] - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - -[[package]] -name = "plotters" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" - -[[package]] -name = "plotters-svg" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "pnet_base" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" -dependencies = [ - "no-std-net", -] - -[[package]] -name = "pnet_macros" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.104", -] - -[[package]] -name = "pnet_macros_support" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" -dependencies = [ - "pnet_base", -] - -[[package]] -name = "pnet_packet" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" -dependencies = [ - "glob", - "pnet_base", - "pnet_macros", - "pnet_macros_support", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug 0.3.1", - "universal-hash", -] - -[[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 0.3.1", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - -[[package]] -name = "postgres-protocol" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" -dependencies = [ - "base64 0.22.1", - "byteorder", - "bytes", - "fallible-iterator", - "hmac", - "md-5", - "memchr", - "rand 0.9.2", - "sha2 0.10.9", - "stringprep", -] - -[[package]] -name = "postgres-types" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" -dependencies = [ - "bytes", - "fallible-iterator", - "postgres-protocol", -] - -[[package]] -name = "potential_utf" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "pretty_assertions" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" -dependencies = [ - "diff", - "yansi", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit 0.23.7", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "proc-macro2" -version = "1.0.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proc_pidinfo" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" -dependencies = [ - "libc", -] - -[[package]] -name = "prometheus" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf", - "thiserror 2.0.17", -] - -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "prost-types" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror 1.0.69", -] - -[[package]] -name = "protobuf-support" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" -dependencies = [ - "thiserror 1.0.69", -] - -[[package]] -name = "psl" -<<<<<<< HEAD -version = "2.1.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c569a9577fe28cc82ac9969ec31778511f1912b3468fe236c24393bebf8a571" -======= -version = "2.1.124" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "281f96193296bf4916d7a112df4cc578aaf7a4d71f1570667779bb07364ed837" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "psl-types", -] - -[[package]] -name = "psl-types" -version = "2.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" - -[[package]] -name = "publicsuffix" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" -dependencies = [ - "idna", - "psl-types", -] - -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", -<<<<<<< HEAD - "rustls 0.23.32", - "socket2 0.6.1", - "thiserror 2.0.17", -======= - "rustls 0.23.29", - "socket2", - "thiserror 2.0.12", ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" -dependencies = [ - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash", -<<<<<<< HEAD - "rustls 0.23.32", -======= - "rustls 0.23.29", ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) - "rustls-pki-types", - "slab", - "thiserror 2.0.17", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.6.1", - "tracing", - "windows-sys 0.60.2", -] - -[[package]] -name = "quote" -version = "1.0.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.4", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "rayon" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags 2.9.4", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 1.0.69", -] - -[[package]] -name = "ref-cast" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "regex" -version = "1.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration 0.5.1", - "tokio", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "reqwest" -version = "0.12.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" -dependencies = [ - "async-compression", - "base64 0.22.1", - "bytes", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "hyper-rustls 0.27.7", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", -<<<<<<< HEAD - "rustls 0.23.32", -======= - "rustls 0.23.29", ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.2", - "tokio", - "tokio-rustls 0.26.4", - "tokio-util", - "tower 0.5.2", - "tower-http 0.6.6", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots 1.0.3", -] - -[[package]] -name = "reserve-port" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" -dependencies = [ - "thiserror 2.0.17", -] - -[[package]] -name = "resolv-conf" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle 2.6.1", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "rmp" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] - -[[package]] -name = "rmp-serde" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" -dependencies = [ - "byteorder", - "rmp", - "serde", -] - -[[package]] -name = "rs_merkle" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" -dependencies = [ - "sha2 0.10.9", -] - -[[package]] -name = "rsa" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" -dependencies = [ - "const-oid", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core 0.6.4", - "sha2 0.10.9", - "signature", - "spki", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rtnetlink" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe0a03f6b9b483c67d4b328fc5d66c8db0b6aa274e0fa2def71b5e442a69acf" -dependencies = [ - "futures", - "log", - "netlink-packet-core 0.7.0", - "netlink-packet-route 0.24.0", - "netlink-packet-utils", - "netlink-proto", - "netlink-sys", - "nix 0.29.0", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "rust-embed" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn 2.0.106", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" -dependencies = [ - "sha2 0.10.9", - "walkdir", -] - -[[package]] -name = "rust-multipart-rfc7578_2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" -dependencies = [ - "bytes", - "futures-core", - "futures-util", - "http 0.2.12", - "mime", - "mime_guess", - "rand 0.8.5", - "thiserror 1.0.69", -] - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.27", -] - -[[package]] -name = "rustix" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" -dependencies = [ - "bitflags 2.9.4", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls" -<<<<<<< HEAD -version = "0.23.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" -======= -version = "0.23.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", -<<<<<<< HEAD - "rustls-webpki 0.103.7", -======= - "rustls-webpki 0.103.4", ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.2.0", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -<<<<<<< HEAD -version = "0.103.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" -======= -version = "0.103.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", - "uuid", -] - -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals 0.29.1", - "syn 2.0.106", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scroll" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sealed" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array 0.14.9", - "pkcs8", - "serdect 0.2.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" -dependencies = [ - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" -dependencies = [ - "cc", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.9.4", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde-json-wasm" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" -dependencies = [ - "serde", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde_bytes" -version = "0.11.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_derive_internals" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_json" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", - "serde_core", -] - -[[package]] -name = "serde_json_path" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b992cea3194eea663ba99a042d61cea4bd1872da37021af56f6a37e0359b9d33" -dependencies = [ - "inventory", - "nom", - "regex", - "serde", - "serde_json", - "serde_json_path_core", - "serde_json_path_macros", - "thiserror 2.0.17", -] - -[[package]] -name = "serde_json_path_core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde67d8dfe7d4967b5a95e247d4148368ddd1e753e500adb34b3ffe40c6bc1bc" -dependencies = [ - "inventory", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "serde_json_path_macros" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "517acfa7f77ddaf5c43d5f119c44a683774e130b4247b7d3210f8924506cfac8" -dependencies = [ - "inventory", - "serde_json_path_core", - "serde_json_path_macros_internal", -] - -[[package]] -name = "serde_json_path_macros_internal" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[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", -] - -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.11.4", - "schemars 0.9.0", - "schemars 1.0.4", - "serde_core", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.11.4", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - -[[package]] -name = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "serdect" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "si-scale" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" - -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" -dependencies = [ - "libc", - "mio 0.8.11", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "slab" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" - -[[package]] -name = "sluice" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" -dependencies = [ - "async-channel", - "futures-core", - "futures-io", -] - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -dependencies = [ - "serde", -] - -[[package]] -name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - -[[package]] -name = "smolmix" -version = "0.1.0" -dependencies = [ - "bytes", - "dirs", - "nym-bin-common 0.6.0", - "nym-ip-packet-requests", - "nym-sdk", - "reqwest 0.12.22", - "smoltcp", - "thiserror 2.0.12", - "tokio", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "smoltcp" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" -dependencies = [ - "bitflags 1.3.2", - "byteorder", - "cfg-if", - "defmt 0.3.100", - "heapless", - "managed", -] - -[[package]] -name = "snafu" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" -dependencies = [ - "doc-comment", - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "snow" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" -dependencies = [ - "aes-gcm", - "blake2 0.10.6", - "chacha20poly1305", - "curve25519-dalek", - "rand_core 0.6.4", - "rustc_version 0.4.1", - "sha2 0.10.9", - "subtle 2.6.1", -] - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "sphinx-packet" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" -dependencies = [ - "aes", - "arrayref", - "blake2 0.8.1", - "bs58", - "byteorder", - "chacha", - "ctr", - "curve25519-dalek", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "rand 0.8.5", - "rand_distr", - "sha2 0.10.9", - "subtle 2.6.1", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sqlx" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" -dependencies = [ - "base64 0.22.1", - "bytes", - "chrono", - "crc", - "crossbeam-queue", - "either", - "event-listener 5.4.1", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashbrown 0.15.5", - "hashlink", - "indexmap 2.11.4", - "log", - "memchr", - "once_cell", - "percent-encoding", - "rustls 0.23.32", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "sqlx-macros" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 2.0.106", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" -dependencies = [ - "dotenvy", - "either", - "heck 0.5.0", - "hex", - "once_cell", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx-core", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", - "syn 2.0.106", - "tokio", - "url", -] - -[[package]] -name = "sqlx-mysql" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.9.4", - "byteorder", - "bytes", - "chrono", - "crc", - "digest 0.10.7", - "dotenvy", - "either", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "generic-array 0.14.9", - "hex", - "hkdf", - "hmac", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "rsa", - "serde", - "sha1", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.17", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-pool-guard" -version = "0.1.0" -dependencies = [ - "proc_pidinfo", - "sqlx", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", - "windows 0.61.3", -] - -[[package]] -name = "sqlx-postgres" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.9.4", - "byteorder", - "chrono", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-util", - "hex", - "hkdf", - "hmac", - "home", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "rand 0.8.5", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.17", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-sqlite" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" -dependencies = [ - "atoi", - "chrono", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "serde", - "serde_urlencoded", - "sqlx-core", - "thiserror 2.0.17", - "time", - "tracing", - "url", -] - -[[package]] -name = "ssl-inject" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "hex", - "tokio", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.11.3", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", - "proc-macro2", - "quote", -] - -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "superboring" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "515cce34a781d7250b8a65706e0f2a5b99236ea605cb235d4baed6685820478f" -dependencies = [ - "getrandom 0.2.16", - "hmac-sha256", - "hmac-sha512", - "rand 0.8.5", - "rsa", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "sysinfo" -version = "0.37.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" -dependencies = [ - "libc", - "memchr", - "ntapi", - "objc2-core-foundation", - "objc2-io-kit", - "windows 0.61.3", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys 0.5.0", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.9.4", - "core-foundation", - "system-configuration-sys 0.6.0", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tar" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tempfile" -version = "3.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" -dependencies = [ - "fastrand 2.3.0", - "getrandom 0.3.4", - "once_cell", - "rustix", - "windows-sys 0.61.2", -] - -[[package]] -name = "tendermint" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" -dependencies = [ - "bytes", - "digest 0.10.7", - "ed25519", - "ed25519-consensus", - "flex-error", - "futures", - "k256", - "num-traits", - "once_cell", - "prost", - "ripemd", - "serde", - "serde_bytes", - "serde_json", - "serde_repr", - "sha2 0.10.9", - "signature", - "subtle 2.6.1", - "subtle-encoding", - "tendermint-proto", - "time", - "zeroize", -] - -[[package]] -name = "tendermint-config" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" -dependencies = [ - "flex-error", - "serde", - "serde_json", - "tendermint", - "toml 0.8.23", - "url", -] - -[[package]] -name = "tendermint-proto" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" -dependencies = [ - "bytes", - "flex-error", - "prost", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-rpc" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" -dependencies = [ - "async-trait", - "async-tungstenite", - "bytes", - "flex-error", - "futures", - "getrandom 0.2.16", - "peg", - "pin-project", - "rand 0.8.5", - "reqwest 0.11.27", - "semver 1.0.27", - "serde", - "serde_bytes", - "serde_json", - "subtle 2.6.1", - "subtle-encoding", - "tendermint", - "tendermint-config", - "tendermint-proto", - "thiserror 1.0.69", - "time", - "tokio", - "tracing", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "test-with" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f370b9efbfbbc5f057cbce9888373eaeb146a3095bb8cc869b199c94d15559" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "regex", - "syn 2.0.106", -] - -[[package]] -name = "testnet-manager" -version = "0.1.0" -dependencies = [ - "anyhow", - "bip39", - "bs58", - "clap", - "console", - "cw-utils", - "dkg-bypass-contract", - "humantime", - "indicatif", - "nym-bin-common", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-crypto", - "nym-ecash-contract-common", - "nym-group-contract-common", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-pemstore", - "nym-performance-contract-common", - "nym-validator-client", - "nym-vesting-contract-common", - "rand 0.8.5", - "serde", - "serde_json", - "sqlx", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "toml 0.8.23", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "textwrap" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" -dependencies = [ - "smawk", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" -dependencies = [ - "thiserror-impl 2.0.17", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "log", - "ordered-float", - "threadpool", -] - -[[package]] -name = "time" -version = "0.3.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" -dependencies = [ - "deranged", - "itoa", - "js-sys", - "libc", - "num-conv", - "num_threads", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" - -[[package]] -name = "time-macros" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "tinyvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" -dependencies = [ - "bytes", - "libc", - "mio 1.0.4", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.6.1", - "tokio-macros", - "tracing", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "tokio-postgres" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" -dependencies = [ - "async-trait", - "byteorder", - "bytes", - "fallible-iterator", - "futures-channel", - "futures-util", - "log", - "parking_lot", - "percent-encoding", - "phf 0.13.1", - "pin-project-lite", - "postgres-protocol", - "postgres-types", - "rand 0.9.2", - "socket2 0.6.1", - "tokio", - "tokio-util", - "whoami", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ -<<<<<<< HEAD - "rustls 0.23.32", -======= - "rustls 0.23.29", ->>>>>>> f5ab0c505 (* got ipr pings working with stream_wrapper_ipr) - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-test" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" -dependencies = [ - "async-stream", - "bytes", - "futures-core", - "tokio", - "tokio-stream", -] - -[[package]] -name = "tokio-tun" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5381752d5832fc811f89d54fc334951aa435022f494190ba7151661f206df" -dependencies = [ - "libc", - "nix 0.29.0", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", - "tungstenite 0.20.1", - "webpki-roots 0.25.4", -] - -[[package]] -name = "tokio-util" -version = "0.7.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "futures-util", - "pin-project-lite", - "slab", - "tokio", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.11.4", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_write", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.23.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" -dependencies = [ - "indexmap 2.11.4", - "toml_datetime 0.7.3", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - -[[package]] -name = "tonic" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64 0.22.1", - "bytes", - "h2 0.4.12", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "hyper-timeout", - "hyper-util", - "percent-encoding", - "pin-project", - "prost", - "socket2 0.5.10", - "tokio", - "tokio-stream", - "tower 0.4.13", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 1.0.2", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" -dependencies = [ - "async-compression", - "bitflags 2.9.4", - "bytes", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "http-range-header", - "httpdate", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "bitflags 2.9.4", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "iri-string", - "pin-project-lite", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-indicatif" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04d4e11e0e27acef25a47f27e9435355fecdc488867fa2bc90e75b0700d2823d" -dependencies = [ - "indicatif", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" -dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" -dependencies = [ - "matchers", - "nu-ansi-term 0.50.3", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log 0.2.0", -] - -[[package]] -name = "tracing-test" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" -dependencies = [ - "tracing-core", - "tracing-subscriber", - "tracing-test-macro", -] - -[[package]] -name = "tracing-test-macro" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" -dependencies = [ - "quote", - "syn 2.0.106", -] - -[[package]] -name = "tracing-tree" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" -dependencies = [ - "nu-ansi-term 0.46.0", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "trackable" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" -dependencies = [ - "trackable 1.3.0", - "trackable_derive", -] - -[[package]] -name = "trackable" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" -dependencies = [ - "trackable_derive", -] - -[[package]] -name = "trackable_derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "ts-rs" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" -dependencies = [ - "lazy_static", - "thiserror 2.0.17", - "ts-rs-macros", -] - -[[package]] -name = "ts-rs-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "nym-api-requests", - "nym-mixnet-contract-common", - "nym-types", - "nym-validator-client", - "nym-vesting-contract-common", - "nym-wallet-types", - "ts-rs", - "walkdir", -] - -[[package]] -name = "ts-rs-macros" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "termcolor", -] - -[[package]] -name = "tsify" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" -dependencies = [ - "gloo-utils 0.1.7", - "serde", - "serde-wasm-bindgen 0.5.0", - "serde_json", - "tsify-macros", - "wasm-bindgen", -] - -[[package]] -name = "tsify-macros" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals 0.28.0", - "syn 2.0.106", -] - -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.21.12", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", - "webpki-roots 0.24.0", -] - -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.3.1", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.22.4", - "rustls-pki-types", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - -[[package]] -name = "unicode-ident" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-width" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "uniffi" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d968cb62160c11f2573e6be724ef8b1b18a277aededd17033f8a912d73e2b4" -dependencies = [ - "anyhow", - "camino", - "cargo_metadata 0.19.2", - "clap", - "uniffi_bindgen", - "uniffi_build", - "uniffi_core", - "uniffi_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_bindgen" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b39ef1acbe1467d5d210f274fae344cb6f8766339330cb4c9688752899bf6b" -dependencies = [ - "anyhow", - "askama", - "camino", - "cargo_metadata 0.19.2", - "fs-err", - "glob", - "goblin", - "heck 0.5.0", - "indexmap 2.11.4", - "once_cell", - "serde", - "tempfile", - "textwrap", - "toml 0.5.11", - "uniffi_internal_macros", - "uniffi_meta", - "uniffi_pipeline", - "uniffi_udl", -] - -[[package]] -name = "uniffi_build" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6683e6b665423cddeacd89a3f97312cf400b2fb245a26f197adaf65c45d505b2" -dependencies = [ - "anyhow", - "camino", - "uniffi_bindgen", -] - -[[package]] -name = "uniffi_core" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d990b553d6b9a7ee9c3ae71134674739913d52350b56152b0e613595bb5a6f" -dependencies = [ - "anyhow", - "bytes", - "once_cell", - "static_assertions", -] - -[[package]] -name = "uniffi_internal_macros" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f4f224becf14885c10e6e400b95cc4d1985738140cb194ccc2044563f8a56b" -dependencies = [ - "anyhow", - "indexmap 2.11.4", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "uniffi_macros" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b481d385af334871d70904e6a5f129be7cd38c18fcf8dd8fd1f646b426a56d58" -dependencies = [ - "camino", - "fs-err", - "once_cell", - "proc-macro2", - "quote", - "serde", - "syn 2.0.106", - "toml 0.5.11", - "uniffi_meta", -] - -[[package]] -name = "uniffi_meta" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f817868a3b171bb7bf259e882138d104deafde65684689b4694c846d322491" -dependencies = [ - "anyhow", - "siphasher 0.3.11", - "uniffi_internal_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_pipeline" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b147e133ad7824e32426b90bc41fda584363563f2ba747f590eca1fd6fd14e6" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap 2.11.4", - "tempfile", - "uniffi_internal_macros", -] - -[[package]] -name = "uniffi_udl" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caed654fb73da5abbc7a7e9c741532284532ba4762d6fe5071372df22a41730a" -dependencies = [ - "anyhow", - "textwrap", - "uniffi_meta", - "weedle2", -] - -[[package]] -name = "unit-prefix" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle 2.6.1", -] - -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "utoipa" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" -dependencies = [ - "indexmap 2.11.4", - "serde", - "serde_json", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.106", - "uuid", -] - -[[package]] -name = "utoipa-swagger-ui" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" -dependencies = [ - "axum", - "base64 0.22.1", - "mime_guess", - "regex", - "rust-embed", - "serde", - "serde_json", - "url", - "utoipa", - "zip", -] - -[[package]] -name = "utoipauto" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba36db2c397c614110554a60fbb4bb97d5f8c6823775c766e6f455e37377047" -dependencies = [ - "utoipauto-macro", -] - -[[package]] -name = "utoipauto-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "utoipauto-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "utoipauto-core", -] - -[[package]] -name = "uuid" -version = "1.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" -dependencies = [ - "getrandom 0.3.4", - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "validator-status-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "comfy-table", - "nym-bin-common", - "nym-http-api-client", - "nym-network-defaults", - "nym-validator-client", - "serde", - "serde_json", - "strum", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "vergen" -version = "8.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" -dependencies = [ - "anyhow", - "cargo_metadata 0.18.1", - "cfg-if", - "regex", - "rustc_version 0.4.1", - "rustversion", - "time", -] - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vt100" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" -dependencies = [ - "itoa", - "log", - "unicode-width 0.1.14", - "vte", -] - -[[package]] -name = "vte" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" -dependencies = [ - "arrayvec", - "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - -[[package]] -name = "wasix" -version = "0.12.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" -dependencies = [ - "wasi", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-bindgen-test" -version = "0.3.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" -dependencies = [ - "js-sys", - "minicov", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.3.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "wasm-client-core" -version = "0.1.0" -dependencies = [ - "async-trait", - "console_error_panic_hook", - "js-sys", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-crypto", - "nym-gateway-client", - "nym-http-api-client", - "nym-sphinx", - "nym-sphinx-acknowledgements", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "time", - "tsify", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-storage", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "wasm-storage" -version = "0.1.0" -dependencies = [ - "async-trait", - "getrandom 0.2.16", - "indexed_db_futures", - "js-sys", - "nym-store-cipher", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-utils", -] - -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasm-utils" -version = "0.1.0" -dependencies = [ - "console_error_panic_hook", - "futures", - "getrandom 0.2.16", - "gloo-net", - "gloo-utils 0.2.0", - "js-sys", - "tungstenite 0.20.1", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmtimer" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" -dependencies = [ - "futures", - "js-sys", - "parking_lot", - "pin-utils", - "slab", - "wasm-bindgen", -] - -[[package]] -name = "web-sys" -version = "0.3.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web_atoms" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" -dependencies = [ - "phf 0.11.3", - "phf_codegen", - "string_cache", - "string_cache_codegen", -] - -[[package]] -name = "webpki-roots" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" -dependencies = [ - "rustls-webpki 0.101.7", -] - -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.3", -] - -[[package]] -name = "webpki-roots" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "weedle2" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" -dependencies = [ - "nom", -] - -[[package]] -name = "whoami" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", - "web-sys", -] - -[[package]] -name = "widestring" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" -dependencies = [ - "windows-core 0.59.0", - "windows-targets 0.53.5", -] - -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link 0.1.3", - "windows-numerics", -] - -[[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", -] - -[[package]] -name = "windows-core" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" -dependencies = [ - "windows-implement 0.59.0", - "windows-interface", - "windows-result 0.3.4", - "windows-strings 0.3.1", - "windows-targets 0.53.5", -] - -[[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", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement 0.60.2", - "windows-interface", - "windows-link 0.2.1", - "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", -] - -[[package]] -name = "windows-implement" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[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-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", -] - -[[package]] -name = "windows-strings" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" -dependencies = [ - "windows-link 0.1.3", -] - -[[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", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link 0.2.1", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link 0.2.1", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[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_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "winnow" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wit-bindgen" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - -[[package]] -name = "writeable" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" -dependencies = [ - "curve25519-dalek", - "rand_core 0.6.4", - "serde", - "zeroize", -] - -[[package]] -name = "xattr" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" -dependencies = [ - "libc", - "rustix", -] - -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - -[[package]] -name = "yoke" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "zerotrie" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "zip" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" -dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap 2.11.4", - "memchr", - "thiserror 2.0.17", - "zopfli", -] - -[[package]] -name = "zknym-lib" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bs58", - "getrandom 0.2.16", - "js-sys", - "nym-bin-common", - "nym-compact-ecash", - "nym-credentials", - "nym-crypto", - "nym-http-api-client", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "thiserror 2.0.17", - "tokio", - "tsify", - "uuid", - "wasm-bindgen", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "zopfli" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" -dependencies = [ - "bumpalo", - "crc32fast", - "log", - "simd-adler32", -] - -[[package]] -name = "zstd" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "zulip-client" -version = "0.1.0" -dependencies = [ - "itertools 0.14.0", - "nym-bin-common", - "nym-http-api-client", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", - "zeroize", -] diff --git a/smolmix/Cargo.toml b/smolmix/Cargo.toml index a298991fbf1..4c36ddb69a2 100644 --- a/smolmix/Cargo.toml +++ b/smolmix/Cargo.toml @@ -22,6 +22,8 @@ nym-ip-packet-requests = { path = "../common/ip-packet-requests" } thiserror.workspace = true reqwest.workspace = true dirs.workspace = true +rustls = { version = "0.23", default-features = false, features = ["std"] } +webpki-roots = "1.0.2" [[example]] name = "check" diff --git a/smolmix/src/bridge.rs b/smolmix/src/bridge.rs index 6492be2261d..41590bfd7bd 100644 --- a/smolmix/src/bridge.rs +++ b/smolmix/src/bridge.rs @@ -64,7 +64,7 @@ impl NymIprBridge { tokio::select! { // Outgoing packets from smoltcp layer above. Some(packet) = self.tx_receiver.recv() => { - debug!("Bridge sending {} byte packet to mixnet", packet.len()); + info!("Bridge sending {} byte packet to mixnet", packet.len()); // Log packet details for debugging if packet.len() >= 20 { @@ -72,7 +72,7 @@ impl NymIprBridge { let proto = packet[9]; let src_ip = &packet[12..16]; let dst_ip = &packet[16..20]; - debug!( + info!( "Outgoing IPv{} packet: proto={}, src={}.{}.{}.{}, dst={}.{}.{}.{}", version, proto, src_ip[0], src_ip[1], src_ip[2], src_ip[3], @@ -86,7 +86,7 @@ impl NymIprBridge { error!("Failed to send packet through mixnet: {}", e); } else { packets_sent += 1; - trace!("Total packets sent: {}", packets_sent); + info!("Total packets sent: {}", packets_sent); } } diff --git a/smolmix/src/device.rs b/smolmix/src/device.rs index f94a261beb0..484ad37e5fa 100644 --- a/smolmix/src/device.rs +++ b/smolmix/src/device.rs @@ -88,10 +88,23 @@ impl NymIprDevice { fn poll_rx_queue(&mut self) { // Try to receive all available packets without blocking, queue them for smoltcp consumption. while let Ok(packet) = self.rx_receiver.try_recv() { - trace!("Received packet of {} bytes from bridge", packet.len()); + info!("Received packet of {} bytes from bridge", packet.len()); self.rx_queue.push_back(packet); } } + + pub fn tx_sender(&self) -> mpsc::UnboundedSender> { + self.tx_sender.clone() + } + + /// Get the receiver for external use + pub fn rx_receiver(&self) -> mpsc::UnboundedReceiver> { + // Create a new channel and return the receiver + // This is a bit of a hack but necessary for the current architecture + let (_tx, rx) = mpsc::unbounded_channel(); + // We just need the receiver for testing + rx + } } impl Device for NymIprDevice { @@ -142,7 +155,7 @@ impl RxToken for NymRxToken { where F: FnOnce(&[u8]) -> R, { - debug!("Consuming RX packet of {} bytes", self.buffer.len()); + info!("Consuming RX packet of {} bytes", self.buffer.len()); f(&self.buffer) } } diff --git a/smolmix/src/error.rs b/smolmix/src/error.rs index 1c7fbf777aa..e8aa351c0d5 100644 --- a/smolmix/src/error.rs +++ b/smolmix/src/error.rs @@ -13,4 +13,16 @@ pub enum SmolmixError { #[error("Nym SDK error: {0}")] NymSdk(#[from] nym_sdk::Error), + + #[error("TLS handshake failed")] + TlsHandshakeFailed, + + #[error("TLS encrypt/decrypt error")] + TlsCrypto, + + #[error("DNS err placeholder")] + InvalidDnsName, + + #[error("IO error: {0}")] + Io(#[from] std::io::Error), } diff --git a/smolmix/src/lib.rs b/smolmix/src/lib.rs index bafee7a9944..533049e87ef 100644 --- a/smolmix/src/lib.rs +++ b/smolmix/src/lib.rs @@ -4,10 +4,12 @@ mod bridge; mod device; mod error; +pub mod tls; pub use bridge::NymIprBridge; pub use device::NymIprDevice; pub use error::SmolmixError; +pub use tls::TlsOverTcp; use nym_ip_packet_requests::IpPair; use nym_sdk::stream_wrapper::IpMixStream; diff --git a/smolmix/src/tls.rs b/smolmix/src/tls.rs new file mode 100644 index 00000000000..34cf979dc18 --- /dev/null +++ b/smolmix/src/tls.rs @@ -0,0 +1,407 @@ +use crate::SmolmixError; +use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; +use smoltcp::socket::tcp; +use std::{ + io::{self, Read, Write}, + sync::Arc, +}; +use tracing::info; + +pub struct TlsOverTcp { + pub conn: ClientConnection, +} + +impl TlsOverTcp { + pub fn new(domain: &str) -> Result { + let mut root_store = rustls::RootCertStore::empty(); + root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); + + let config = ClientConfig::builder() + .with_root_certificates(root_store) + .with_no_client_auth(); + + let server_name = ServerName::try_from(domain) + .map_err(|_| SmolmixError::InvalidDnsName)? + .to_owned(); + + let conn = ClientConnection::new(Arc::new(config), server_name) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + + Ok(Self { conn }) + } + + /// Move data from TLS connection to TCP socket + pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + let mut buf = [0u8; 4096]; + while self.conn.wants_write() { + match self.conn.write_tls(&mut buf.as_mut_slice()) { + Ok(n) if n > 0 => { + socket + .send_slice(&buf[..n]) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + } + _ => break, + } + } + Ok(()) + } + + /// Move data from TCP socket to TLS connection + pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + if socket.can_recv() { + let _ = socket.recv(|chunk| { + if !chunk.is_empty() { + inspect_tls_packet(chunk); + let _ = self.conn.read_tls(&mut io::Cursor::new(&mut *chunk)); + let _ = self.conn.process_new_packets(); + } + (chunk.len(), ()) + }); + } + Ok(()) + } + + /// Send data - TODO FRAMING + pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + self.conn + .writer() + .write_all(data) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + self.write_tls(socket) + } + + /// Receive data - TODO FRAMING + pub fn recv(&mut self, socket: &mut tcp::Socket) -> Result, SmolmixError> { + self.read_tls(socket)?; + let mut result = Vec::new(); + let mut buf = vec![0u8; 4096]; + match self.conn.reader().read(&mut buf) { + Ok(n) if n > 0 => result.extend_from_slice(&buf[..n]), + _ => {} + } + Ok(result) + } +} + +fn inspect_tls_packet(data: &[u8]) { + if data.len() < 5 { + return; + } + let content_type = data[0]; + if content_type < 0x14 || content_type > 0x17 { + return; + } + let version = u16::from_be_bytes([data[1], data[2]]); + let length = u16::from_be_bytes([data[3], data[4]]); + info!( + "TLS packet: ContentType={:#04x}, Version={:#06x}, Length={}", + content_type, version, length + ); + if content_type == 0x16 && data.len() > 5 { + let handshake_type = data[5]; + let handshake_types = match handshake_type { + 0x01 => "ClientHello", + 0x02 => "ServerHello", + 0x0b => "Certificate", + 0x0c => "ServerKeyExchange", + 0x0d => "CertificateRequest", + 0x0e => "ServerHelloDone", + 0x0f => "CertificateVerify", + 0x10 => "ClientKeyExchange", + 0x14 => "Finished", + _ => "Unknown", + }; + info!( + "Handshake type: {:#04x} ({}), Length: {}", + handshake_type, handshake_types, length + ); + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::create_device; + use nym_sdk::stream_wrapper::IpMixStream; + use smoltcp::{ + iface::{Config, Interface, SocketSet}, + socket::tcp, + time::Instant, + wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, + }; + use std::time::Duration; + use tracing::info; + + #[tokio::test] + async fn simple_tls_check() -> Result<(), Box> { + nym_bin_common::logging::setup_tracing_logger(); + + let ipr_stream = IpMixStream::new().await?; + let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; + info!("Allocated IP: {}", allocated_ips.ipv4); + + tokio::spawn(async move { + bridge.run().await.unwrap(); + }); + + let config = Config::new(HardwareAddress::Ip); + let mut iface = Interface::new(config, &mut device, Instant::now()); + iface.update_ip_addrs(|ip_addrs| { + ip_addrs + .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) + .unwrap(); + }); + iface + .routes_mut() + .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) + .unwrap(); + + let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); + let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); + let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); + let mut sockets = SocketSet::new(vec![]); + let tcp_handle = sockets.add(tcp_socket); + + let target_ip = Ipv4Address::new(1, 1, 1, 1); // Pinging Cloudflare + let target_port = 443; + info!("Connecting to {}:{} through mixnet", target_ip, target_port); + + let mut timestamp = Instant::from_millis(0); + let start = tokio::time::Instant::now(); + let mut connected = false; + let mut tls = None; + let mut handshake_completed = false; + + loop { + if start.elapsed() > Duration::from_secs(120) { + info!("Test timeout after 120 seconds"); + break; + } + + iface.poll(timestamp, &mut device, &mut sockets); + timestamp += smoltcp::time::Duration::from_millis(1); + let socket = sockets.get_mut::(tcp_handle); + + if !connected && !socket.is_open() { + match socket.connect(iface.context(), (target_ip, target_port), 49152) { + Ok(_) => { + info!("TCP connect started"); + connected = true; + } + Err(e) => { + info!("TCP connect failed: {}", e); + break; + } + } + } + + if start.elapsed().as_secs() % 5 == 0 && start.elapsed().as_millis() % 1000 < 100 { + info!( + "State: TCP={:?}, established={}, can_send={}, can_recv={}", + socket.state(), + socket.state() == tcp::State::Established, + socket.may_send(), + socket.can_recv() + ); + } + + if socket.state() == tcp::State::Established && tls.is_none() { + info!("TCP established - creating TLS connection"); + match TlsOverTcp::new("cloudflare.com") { + Ok(t) => tls = Some(t), + Err(e) => { + info!("TLS create failed: {}", e); + break; + } + } + } + + if let Some(ref mut tls_conn) = tls { + let _ = tls_conn.read_tls(socket); + let _ = tls_conn.write_tls(socket); + + if start.elapsed().as_secs() % 10 == 0 && start.elapsed().as_millis() % 1000 < 100 { + info!( + "TLS state: handshaking={}, wants_read={}, wants_write={}", + tls_conn.conn.is_handshaking(), + tls_conn.conn.wants_read(), + tls_conn.conn.wants_write() + ); + } + + if !tls_conn.conn.is_handshaking() && !handshake_completed { + info!("TLS handshake complete"); + info!( + "TLS verification: handshake_complete=true, wants_read={}, wants_write={}", + tls_conn.conn.wants_read(), + tls_conn.conn.wants_write() + ); + + match tls_conn.recv(socket) { + Ok(data) if data.is_empty() => { + info!("No unexpected application data waiting to be read"); + } + Ok(data) => { + info!("Unexpected application data received: {} bytes", data.len()); + } + Err(e) => { + info!("TLS recv check failed: {}", e); + } + } + info!("TLS handshake successful with cloudflare"); + break; + } + } + tokio::time::sleep(Duration::from_millis(1)).await; + } + + info!("Test completed"); + Ok(()) + } + + #[tokio::test] + async fn https_req_res() -> Result<(), Box> { + nym_bin_common::logging::setup_tracing_logger(); + + let ipr_stream = IpMixStream::new().await?; + let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; + info!("Allocated IP: {}", allocated_ips.ipv4); + + tokio::spawn(async move { + bridge.run().await.unwrap(); + }); + + let config = Config::new(HardwareAddress::Ip); + let mut iface = Interface::new(config, &mut device, Instant::now()); + iface.update_ip_addrs(|ip_addrs| { + ip_addrs + .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) + .unwrap(); + }); + iface + .routes_mut() + .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) + .unwrap(); + + let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); + let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); + let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); + let mut sockets = SocketSet::new(vec![]); + let tcp_handle = sockets.add(tcp_socket); + + let target_ip = Ipv4Address::new(1, 1, 1, 1); + let target_port = 443; + + let mut timestamp = Instant::from_millis(0); + let start = tokio::time::Instant::now(); + let mut connected = false; + let mut tls = None; + let mut handshake_completed = false; + let mut request_sent = false; + + loop { + if start.elapsed() > Duration::from_secs(60) { + info!("Test timeout after 60 seconds"); + break; + } + + iface.poll(timestamp, &mut device, &mut sockets); + timestamp += smoltcp::time::Duration::from_millis(1); + let socket = sockets.get_mut::(tcp_handle); + + // TCP connection setup + if !connected && !socket.is_open() { + match socket.connect(iface.context(), (target_ip, target_port), 49152) { + Ok(_) => { + info!("TCP connect started"); + connected = true; + } + Err(e) => { + info!("TCP connect failed: {}", e); + break; + } + } + } + + // TLS setup after TCP established + if socket.state() == tcp::State::Established && tls.is_none() { + info!("TCP established - creating TLS connection"); + match TlsOverTcp::new("cloudflare.com") { + Ok(t) => tls = Some(t), + Err(e) => { + info!("TLS create failed: {}", e); + break; + } + } + } + + // TLS handshake and request + if let Some(ref mut tls_conn) = tls { + let _ = tls_conn.read_tls(socket); + let _ = tls_conn.write_tls(socket); + + // Complete handshake + if !tls_conn.conn.is_handshaking() && !handshake_completed { + handshake_completed = true; + info!("TLS handshake completed - ready for HTTPS"); + + // Send simple HTTP request + let request = b"GET /cdn-cgi/trace HTTP/1.1\r\nHost: cloudflare.com\r\nUser-Agent: smolmix-test/1.0\r\nAccept: */*\r\nConnection: close\r\n\r\n"; + match tls_conn.send(request, socket) { + Ok(_) => { + info!("HTTPS request sent"); + request_sent = true; + } + Err(e) => { + info!("HTTPS send failed: {}", e); + break; + } + } + } + + // Read response after request sent + if request_sent { + let mut response_data = Vec::new(); + let mut buf = vec![0u8; 4096]; + + match tls_conn.conn.reader().read(&mut buf) { + Ok(0) => { + info!("Response complete - connection closed"); + break; + } + Ok(n) if n > 0 => { + response_data.extend_from_slice(&buf[..n]); + info!("Received {} bytes", n); + + if let Ok(response_str) = std::str::from_utf8(&response_data) { + if response_str.contains("\r\n\r\n") { + info!("HTTPS response received!"); + + if let Some(status_end) = response_str.find("\r\n") { + info!("HTTP Status: {}", &response_str[..status_end]); + } + + info!("Full response: {}", response_str); + return Ok(()); + } + } + } + Ok(1_usize..) => { + todo!() + } + Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => { + // Keep polling + } + Err(e) => { + info!("Read error: {}", e); + break; + } + } + } + } + tokio::time::sleep(Duration::from_millis(10)).await; + } + + Err("No HTTP response received".into()) + } +} From 90870f455384001488d0bfe55938668812b46791 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 26 Sep 2025 17:27:15 +0200 Subject: [PATCH 051/139] remove clunky old examples in place of unit tests --- smolmix/README.md | 12 +- smolmix/examples/check.rs | 65 ----------- smolmix/examples/download_file.rs | 186 ------------------------------ 3 files changed, 1 insertion(+), 262 deletions(-) delete mode 100644 smolmix/examples/check.rs delete mode 100644 smolmix/examples/download_file.rs diff --git a/smolmix/README.md b/smolmix/README.md index f02cf9d817b..21e4d603bbe 100644 --- a/smolmix/README.md +++ b/smolmix/README.md @@ -1,13 +1,3 @@ # smolmix poc -At the moment this is very basic but it works with smol files (large ones end up borking at the moment). - -```sh -cargo run --example download -``` - -There is a quick check for httpbin's IPs via `nslookup` and connectivity **not** using the Mixnet: - -```sh -cargo run --example check -``` +Test TLS conn + smol HTTPS req/res with `cargo test`. More to come. diff --git a/smolmix/examples/check.rs b/smolmix/examples/check.rs deleted file mode 100644 index 2979709089b..00000000000 --- a/smolmix/examples/check.rs +++ /dev/null @@ -1,65 +0,0 @@ -use reqwest; -use std::{ - io::{Read, Write}, - net::TcpStream, - process::Command, -}; - -// These are just for checking: -// - Using the proper IP info in the other tests -// - That network connection is fine otherwise outside of the `NymIprDevice` -#[tokio::main] -async fn main() -> Result<(), Box> { - println!("Testing connectivity to httpbin.org...\n"); - - println!("DNS Resolution:"); - let output = Command::new("nslookup") - .arg("httpbin.org") - .output() - .expect("Failed to execute nslookup"); - println!("{}", String::from_utf8_lossy(&output.stdout)); - - println!("\nHTTP GET request:"); - match reqwest::get("http://httpbin.org/get").await { - Ok(response) => { - println!("Status: {}", response.status()); - println!("Headers: {:#?}", response.headers()); - let body = response.text().await?; - println!("Body:\n{}", body); - } - Err(e) => { - println!("Request failed: {}", e); - } - } - - println!("\nRaw TCP connection test:"); - - match TcpStream::connect("httpbin.org:80") { - Ok(mut stream) => { - println!("Connected to httpbin.org:80"); - - let request = b"GET /get HTTP/1.1\r\n\ - Host: httpbin.org\r\n\ - User-Agent: test/1.0\r\n\ - Accept: */*\r\n\ - Connection: close\r\n\ - \r\n"; - - stream.write_all(request)?; - println!("Sent request"); - - let mut response = Vec::new(); - stream.read_to_end(&mut response)?; - println!( - "Response ({} bytes):\n{}", - response.len(), - String::from_utf8_lossy(&response[..500.min(response.len())]) - ); - } - Err(e) => { - println!("Connection failed: {}", e); - } - } - - Ok(()) -} diff --git a/smolmix/examples/download_file.rs b/smolmix/examples/download_file.rs deleted file mode 100644 index 08d8f91578c..00000000000 --- a/smolmix/examples/download_file.rs +++ /dev/null @@ -1,186 +0,0 @@ -use nym_sdk::stream_wrapper::IpMixStream; -use smolmix::create_device; -use smoltcp::{ - iface::{Config, Interface, SocketSet}, - socket::tcp, - time::Instant, - wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, -}; -use std::{ - fs::{self, File}, - io::Write, - path::PathBuf, - time::Duration, -}; -use tracing::info; - -#[tokio::main] -async fn main() -> Result<(), Box> { - nym_bin_common::logging::setup_tracing_logger(); - - let download_dir = dirs::home_dir() - .unwrap_or_else(|| PathBuf::from(".")) - .join("Downloads") - .join("nym-test"); - - fs::create_dir_all(&download_dir)?; - let file_path = download_dir.join("1Mb.dat"); - info!("Will save to: {}", file_path.display()); - - info!("Connecting to Mixnet..."); - let ipr_stream = IpMixStream::new().await?; - let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; - - info!("Allocated IP: {}", allocated_ips.ipv4); - - // Bridge has to be run in its own task as per its docs - tokio::spawn(async move { - if let Err(e) = bridge.run().await { - eprintln!("Bridge error: {}", e); - } - }); - - // Create smoltcp interface using our allocated IP - let config = Config::new(HardwareAddress::Ip); - let mut iface = Interface::new(config, &mut device, Instant::now()); - - // Configure with our allocated IP TODO can probably smush this + fn above into one / somewhere else so doesn't have to be done manually - iface.update_ip_addrs(|ip_addrs| { - ip_addrs - .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) - .unwrap(); - }); - - // Add default route - iface - .routes_mut() - .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) - .unwrap(); - - let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 65536]); - let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); - let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); - - let mut sockets = SocketSet::new(vec![]); - let tcp_handle = sockets.add(tcp_socket); - - let target_ip = Ipv4Address::new(3, 213, 24, 5); // httpbin.org IP - if you're getting a mangled response run check.rs and make sure you're using the correct IP - let remote_path = "/bytes/10240"; // 10KB - let target_port = 80; - let expected_size = 10240; - - info!("Downloading {}:{}{}", target_ip, target_port, remote_path); - - let mut file = File::create(&file_path)?; - let mut connected = false; - let mut request_sent = false; - let mut total_bytes = 0; - let mut body_bytes = 0; - let mut headers_complete = false; - let mut header_buffer = Vec::new(); - let mut timestamp = Instant::from_millis(0); - let start = tokio::time::Instant::now(); - - while start.elapsed() < Duration::from_secs(300) { - iface.poll(timestamp, &mut device, &mut sockets); - - let socket = sockets.get_mut::(tcp_handle); - - if !connected && !socket.is_open() { - // iface is the hook into the NymIpDevice - socket.connect(iface.context(), (target_ip, target_port), 49152)?; - info!("Connecting..."); - connected = true; - } - - if socket.state() == tcp::State::Established && !request_sent { - let http_request = format!( - "GET {} HTTP/1.1\r\n\ - Host: httpbin.org\r\n\ - User-Agent: smolmix/0.1\r\n\ - Connection: close\r\n\ - \r\n", - remote_path - ); - - socket.send_slice(http_request.as_bytes())?; - info!("Request sent"); - request_sent = true; - } - - if socket.can_recv() { - socket.recv(|buffer| { - let len = buffer.len(); - total_bytes += len; - - if !headers_complete { - header_buffer.extend_from_slice(buffer); - - // Check for end of headers - if let Ok(headers_str) = std::str::from_utf8(&header_buffer) { - if let Some(header_end) = headers_str.find("\r\n\r\n") { - headers_complete = true; - - // Write body portion to file - let body_start = header_end + 4; - if body_start < header_buffer.len() { - let body_chunk = &header_buffer[body_start..]; - file.write_all(body_chunk).unwrap(); - body_bytes = body_chunk.len(); - info!("Headers complete, writing body to file"); - } - } - } - } else { - // Headers done, write body directly to file - file.write_all(buffer).unwrap(); - body_bytes += len; - } - - // Progress update - if body_bytes > 0 && body_bytes % 10240 < len { - let progress = (body_bytes as f64 / expected_size as f64) * 100.0; - let elapsed = start.elapsed().as_secs_f64(); - let throughput = (body_bytes as f64 / elapsed) / 1024.0; - - info!( - "Progress: {:.1}% ({} / {} bytes) - {:.1} KB/s", - progress, body_bytes, expected_size, throughput - ); - } - - (len, ()) - })?; - } - - // Check completion - if body_bytes >= expected_size || (socket.state() == tcp::State::Closed && body_bytes > 0) { - break; - } - - timestamp += smoltcp::time::Duration::from_millis(10); - tokio::time::sleep(Duration::from_millis(10)).await; - } - - // Ensure file is flushed - file.flush()?; - - // Final report - let elapsed = start.elapsed().as_secs_f64(); - let throughput = (body_bytes as f64 / elapsed) / 1024.0; - - info!("\nDownload Complete!"); - info!("Saved to: {}", file_path.display()); - info!("File size: {} bytes", body_bytes); - info!("Total time: {:.1} seconds", elapsed); - info!("Average speed: {:.1} KB/s", throughput); - - // Verify file - let metadata = fs::metadata(&file_path)?; - info!("File on disk: {} bytes", metadata.len()); - info!("Success: {}", metadata.len() as usize == expected_size); - - // TODO make a graceful shutdown fn for Device -> IprWrapper - - Ok(()) -} From b897ec5dc979a1a195606e50669b0434f6e28b96 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 29 Sep 2025 14:32:22 +0200 Subject: [PATCH 052/139] rough first reqwest client poc --- .../mixnet_stream_wrapper_ipr.rs | 3 + smolmix/Cargo.toml | 8 - smolmix/src/error.rs | 24 ++ smolmix/src/lib.rs | 1 + smolmix/src/reqwest_client.rs | 346 ++++++++++++++++++ smolmix/src/tls.rs | 16 +- 6 files changed, 388 insertions(+), 10 deletions(-) create mode 100644 smolmix/src/reqwest_client.rs diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index f80df1e3117..514ed620e68 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -559,6 +559,9 @@ mod tests { static INIT: Once = Once::new(); fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; + } INIT.call_once(|| { nym_bin_common::logging::setup_tracing_logger(); }); diff --git a/smolmix/Cargo.toml b/smolmix/Cargo.toml index 4c36ddb69a2..4e0ef9a026f 100644 --- a/smolmix/Cargo.toml +++ b/smolmix/Cargo.toml @@ -24,11 +24,3 @@ reqwest.workspace = true dirs.workspace = true rustls = { version = "0.23", default-features = false, features = ["std"] } webpki-roots = "1.0.2" - -[[example]] -name = "check" -path = "examples/check.rs" - -[[example]] -name = "download" -path = "examples/download_file.rs" diff --git a/smolmix/src/error.rs b/smolmix/src/error.rs index e8aa351c0d5..cf6210df40e 100644 --- a/smolmix/src/error.rs +++ b/smolmix/src/error.rs @@ -25,4 +25,28 @@ pub enum SmolmixError { #[error("IO error: {0}")] Io(#[from] std::io::Error), + + #[error("HTTP parse failed")] + HttpParseFailed, + + #[error("Invalid URL")] + InvalidUrl, + + #[error("Mixnet connection failed")] + MixnetConnectionFailed, + + #[error("Request timeout")] + Timeout, + + #[error("TCP connection failed")] + TcpConnectionFailed, + + #[error("Response read failed")] + ResponseReadFailed, + + #[error("No response received")] + NoResponseReceived, + + #[error("Invalid HTTP response")] + InvalidHttpResponse, } diff --git a/smolmix/src/lib.rs b/smolmix/src/lib.rs index 533049e87ef..446493a430c 100644 --- a/smolmix/src/lib.rs +++ b/smolmix/src/lib.rs @@ -4,6 +4,7 @@ mod bridge; mod device; mod error; +mod reqwest_client; pub mod tls; pub use bridge::NymIprBridge; diff --git a/smolmix/src/reqwest_client.rs b/smolmix/src/reqwest_client.rs new file mode 100644 index 00000000000..6ac7ed1cb2f --- /dev/null +++ b/smolmix/src/reqwest_client.rs @@ -0,0 +1,346 @@ +use crate::{create_device, IpMixStream, SmolmixError}; +use bytes::Bytes; +use reqwest::StatusCode; +use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; +use smoltcp::{ + iface::{Config, Interface, SocketSet}, + socket::tcp, + time::Instant, + wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, +}; +use std::{ + io::{self, Read, Write}, + sync::Arc, + time::Duration, +}; +use tracing::info; + +pub struct TlsOverTcp { + pub conn: ClientConnection, +} + +impl TlsOverTcp { + pub fn new(domain: &str) -> Result { + let mut root_store = rustls::RootCertStore::empty(); + root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); + + let config = ClientConfig::builder() + .with_root_certificates(root_store) + .with_no_client_auth(); + + let server_name = ServerName::try_from(domain) + .map_err(|_| SmolmixError::InvalidDnsName)? + .to_owned(); + + let conn = ClientConnection::new(Arc::new(config), server_name) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + + Ok(Self { conn }) + } + + pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + let mut buf = [0u8; 4096]; + while self.conn.wants_write() { + match self.conn.write_tls(&mut buf.as_mut_slice()) { + Ok(n) if n > 0 => { + socket + .send_slice(&buf[..n]) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + } + _ => break, + } + } + Ok(()) + } + + pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + if socket.can_recv() { + let _ = socket.recv(|chunk| { + if !chunk.is_empty() { + let _ = self.conn.read_tls(&mut io::Cursor::new(&mut *chunk)); + let _ = self.conn.process_new_packets(); + } + (chunk.len(), ()) + }); + } + Ok(()) + } + + pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + self.conn + .writer() + .write_all(data) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + self.write_tls(socket) + } +} + +/// Minimal reqwest-compatible client - just GET +pub struct SmolmixReqwestClient; + +impl SmolmixReqwestClient { + pub async fn new() -> Result { + // TODO need to move the creation of the device + running of bridge into here, instead of on request + Ok(Self) + } + + pub async fn get(&self, url: &str) -> Result { + let parsed_url = reqwest::Url::parse(url).map_err(|_| SmolmixError::InvalidUrl)?; + let host = parsed_url.host_str().ok_or(SmolmixError::InvalidUrl)?; + let path = parsed_url.path(); + + // Get raw response and parse with reqwest helpers + let response_bytes = self.simple_get_request(host, path).await?; + let (status, body) = self.parse_simple_response(&response_bytes)?; + + Ok(SmolmixResponse { status, body }) + } + + /// Simple GET request - logic copied from tls.rs + async fn simple_get_request(&self, domain: &str, path: &str) -> Result, SmolmixError> { + let ipr_stream = IpMixStream::new() + .await + .map_err(|_| SmolmixError::MixnetConnectionFailed)?; + + let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; + info!("Allocated IP: {}", allocated_ips.ipv4); + + tokio::spawn(async move { + if let Err(e) = bridge.run().await { + tracing::error!("Bridge error: {}", e); + } + }); + + let config = Config::new(HardwareAddress::Ip); + let mut iface = Interface::new(config, &mut device, Instant::now()); + iface.update_ip_addrs(|ip_addrs| { + ip_addrs + .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) + .unwrap(); + }); + iface + .routes_mut() + .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) + .unwrap(); + + let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); + let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); + let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); + let mut sockets = SocketSet::new(vec![]); + let tcp_handle = sockets.add(tcp_socket); + + let target_ip = Ipv4Address::new(1, 1, 1, 1); + let target_port = 443; + + let mut timestamp = Instant::from_millis(0); + let start = tokio::time::Instant::now(); + let mut connected = false; + let mut tls = None; + let mut handshake_completed = false; + let mut request_sent = false; + let mut response_data = Vec::new(); + + loop { + if start.elapsed() > Duration::from_secs(60) { + return Err(SmolmixError::Timeout); + } + + iface.poll(timestamp, &mut device, &mut sockets); + timestamp += smoltcp::time::Duration::from_millis(1); + let socket = sockets.get_mut::(tcp_handle); + + if !connected && !socket.is_open() { + match socket.connect(iface.context(), (target_ip, target_port), 49152) { + Ok(_) => { + info!("TCP connect started"); + connected = true; + } + Err(e) => { + info!("TCP connect failed: {}", e); + return Err(SmolmixError::TcpConnectionFailed); + } + } + } + + if socket.state() == tcp::State::Established && tls.is_none() { + info!("TCP established - creating TLS connection"); + match TlsOverTcp::new(domain) { + Ok(t) => tls = Some(t), + Err(e) => { + info!("TLS create failed: {}", e); + return Err(SmolmixError::TlsHandshakeFailed); + } + } + } + + if let Some(ref mut tls_conn) = tls { + let _ = tls_conn.read_tls(socket); + let _ = tls_conn.write_tls(socket); + + if !tls_conn.conn.is_handshaking() && !handshake_completed { + handshake_completed = true; + info!("TLS handshake completed - ready for HTTPS"); + + let request = format!( + "GET {} HTTP/1.1\r\nHost: {}\r\nUser-Agent: smolmix/1.0\r\nAccept: */*\r\nConnection: close\r\n\r\n", + path, domain + ); + tls_conn.send(request.as_bytes(), socket)?; + info!("HTTPS request sent"); + request_sent = true; + } + + if request_sent { + let mut buf = vec![0u8; 4096]; + match tls_conn.conn.reader().read(&mut buf) { + Ok(0) => { + info!("Response complete"); + break; + } + Ok(n) if n > 0 => { + response_data.extend_from_slice(&buf[..n]); + if let Ok(response_str) = std::str::from_utf8(&response_data) { + if response_str.contains("\r\n\r\n") { + return Ok(response_data); + } + } + } + Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => {} + Err(e) => { + info!("Read error: {}", e); + return Err(SmolmixError::ResponseReadFailed); + } + Ok(1_usize..) => todo!(), + } + } + } + tokio::time::sleep(Duration::from_millis(10)).await; + } + + Err(SmolmixError::NoResponseReceived) + } + + fn parse_simple_response(&self, response_bytes: &[u8]) -> Result<(u16, String), SmolmixError> { + let response_str = String::from_utf8_lossy(response_bytes); + + // Extract status code + let status_line = response_str + .lines() + .next() + .ok_or(SmolmixError::InvalidHttpResponse)?; + + let status: u16 = status_line + .split_whitespace() + .nth(1) + .and_then(|s| s.parse().ok()) + .unwrap_or(200); + + // Find body (after headers) + if let Some(body_start) = response_str.find("\r\n\r\n") { + let body = response_str[body_start + 4..].to_string(); + Ok((status, body)) + } else { + Err(SmolmixError::InvalidHttpResponse) + } + } +} + +pub struct SmolmixResponse { + status: u16, + body: String, +} + +impl SmolmixResponse { + pub fn status(&self) -> StatusCode { + StatusCode::from_u16(self.status).unwrap_or(StatusCode::INTERNAL_SERVER_ERROR) + } + + pub async fn text(self) -> Result { + Ok(self.body) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::sync::Once; + + static INIT: Once = Once::new(); + + fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; + } + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); + } + + #[tokio::test] + async fn mixnet_vs_plain_reqwest() -> Result<(), Box> { + init_logging(); + + let test_url = "https://cloudflare.com/cdn-cgi/trace"; + + // Plain reqwest - direct connection + info!("Fetching with plain reqwest..."); + let start = tokio::time::Instant::now(); + let plain_response = reqwest::get(test_url).await?; + let plain_status = plain_response.status(); + let plain_text = plain_response.text().await?; + let plain_duration = start.elapsed(); + + // info!( + // "Plain reqwest - Status: {}, Time: {:?}", + // plain_status, plain_duration + // ); + info!("Plain response: {} chars", plain_text.len()); + info!( + "Plain first 200 chars: {}", + &plain_text[..plain_text.len().min(200)] + ); + + info!("\nFetching through mixnet..."); + let start = tokio::time::Instant::now(); + let client = SmolmixReqwestClient::new().await?; + let mixnet_response = client.get(test_url).await?; + let mixnet_status = mixnet_response.status(); + let mixnet_text = mixnet_response.text().await?; + let mixnet_duration = start.elapsed(); + + // info!( + // "Mixnet reqwest - Status: {}, Time: {:?}", + // mixnet_status, mixnet_duration + // ); + info!("Mixnet response: {} chars", mixnet_text.len()); + info!( + "Mixnet first 200 chars: {}", + &mixnet_text[..mixnet_text.len().min(200)] + ); + + info!("Status codes match: {}", plain_status == mixnet_status); + info!( + "Response lengths match: {}", + plain_text.len() == mixnet_text.len() + ); + + // Both should contain the same key fields + let key_fields = ["fl=", "ip=", "ts=", "visit_scheme="]; + for field in key_fields { + let plain_has = plain_text.contains(field); + let mixnet_has = mixnet_text.contains(field); + info!( + "Field '{}' - Plain: {}, Mixnet: {}", + field, plain_has, mixnet_has + ); + assert_eq!(plain_has, mixnet_has, "Field '{}' mismatch", field); + } + + // Performance comparison - TODO introduce this when we're not init-ing a mixnet client on each req + // info!("Plain reqwest time: {:?}", plain_duration); + // info!("Mixnet reqwest time: {:?}", mixnet_duration); + // let slowdown = mixnet_duration.as_millis() as f64 / plain_duration.as_millis() as f64; + // info!("Mixnet slowdown: {:.1}x", slowdown); + Ok(()) + } +} diff --git a/smolmix/src/tls.rs b/smolmix/src/tls.rs index 34cf979dc18..e037315309e 100644 --- a/smolmix/src/tls.rs +++ b/smolmix/src/tls.rs @@ -129,12 +129,24 @@ mod tests { time::Instant, wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, }; + use std::sync::Once; use std::time::Duration; use tracing::info; + static INIT: Once = Once::new(); + + fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; + } + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); + } + #[tokio::test] async fn simple_tls_check() -> Result<(), Box> { - nym_bin_common::logging::setup_tracing_logger(); + init_logging(); let ipr_stream = IpMixStream::new().await?; let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; @@ -261,7 +273,7 @@ mod tests { #[tokio::test] async fn https_req_res() -> Result<(), Box> { - nym_bin_common::logging::setup_tracing_logger(); + init_logging(); let ipr_stream = IpMixStream::new().await?; let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; From f318f1cfe8c867016d6cd0026f79e92299b6399a Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 30 Sep 2025 11:04:04 +0100 Subject: [PATCH 053/139] Tests + getting reuable client in new() for speedup --- Cargo.lock | 13270 ++++++++++++++++ .../mixnet_stream_wrapper_ipr.rs | 6 +- smolmix/Cargo.toml | 1 + smolmix/README.md | 2 +- smolmix/src/reqwest_client.rs | 118 +- 5 files changed, 13342 insertions(+), 55 deletions(-) create mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000000..5404355908c --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,13270 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "accessory" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28e416a3ab45838bac2ab2d81b1088d738d7b2d2c5272a54d39366565a29bd80" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "addr" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" +dependencies = [ + "psl", + "psl-types", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +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", + "generic-array 0.14.7", +] + +[[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 2.6.1", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.3", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "ammonia" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b346764dd0814805de8abf899fe03065bcee69bb1a4771c785817e39f3978f" +dependencies = [ + "cssparser", + "html5ever", + "maplit", + "tendril", + "url", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstream" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2 0.10.6", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "askama" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7" +dependencies = [ + "askama_derive", + "itoa", + "percent-encoding", + "serde", + "serde_json", +] + +[[package]] +name = "askama_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac" +dependencies = [ + "askama_parser", + "basic-toml", + "memchr", + "proc-macro2", + "quote", + "rustc-hash", + "serde", + "serde_derive", + "syn 2.0.104", +] + +[[package]] +name = "askama_parser" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f" +dependencies = [ + "memchr", + "serde", + "serde_derive", + "winnow", +] + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-compression" +version = "0.4.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40f6024f3f856663b45fd0c9b6f2024034a702f453549449e0d84a305900dad4" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "zstd", + "zstd-safe", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.4.0", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "async-trait" +version = "0.1.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "async-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3609af4bbf701ddaf1f6bb4e6257dff4ff8932327d0e685d3f653724c258b1ac" +dependencies = [ + "futures-io", + "futures-util", + "log", + "pin-project-lite", + "rustls-native-certs 0.7.3", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tungstenite 0.21.0", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-future" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "autodoc" +version = "0.1.0" +dependencies = [ + "env_logger", + "log", +] + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower 0.4.13", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core 0.4.5", + "axum-macros", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "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.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-client-ip" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" +dependencies = [ + "axum 0.7.9", + "forwarded-header-value", + "serde", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[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.3.1", + "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-extra" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" +dependencies = [ + "axum 0.7.9", + "axum-core 0.4.5", + "bytes", + "fastrand 2.3.0", + "futures-util", + "headers", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "multer", + "pin-project-lite", + "serde", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[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.104", +] + +[[package]] +name = "axum-test" +version = "16.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e3a443d2608936a02a222da7b746eb412fede7225b3030b64fe9be99eab8dc" +dependencies = [ + "anyhow", + "assert-json-diff", + "auto-future", + "axum 0.7.9", + "bytes", + "bytesize", + "cookie", + "http 1.3.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "mime", + "pretty_assertions", + "reserve-port", + "rust-multipart-rfc7578_2", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tokio", + "tower 0.5.2", + "url", +] + +[[package]] +name = "backon" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302eaff5357a264a2c42f127ecb8bac761cf99749fc3dc95677e2743991f99e7" +dependencies = [ + "fastrand 2.3.0", + "gloo-timers", + "tokio", +] + +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-url" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2b6c78c06f7288d5e3c3d683bde35a79531127c83b087e5d0d77c974b4b28" +dependencies = [ + "base64 0.22.1", +] + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "base85rs" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87678d33a2af71f019ed11f52db246ca6c5557edee2cccbe689676d1ad9c6b5a" + +[[package]] +name = "basic-toml" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" +dependencies = [ + "serde", +] + +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bip32" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" +dependencies = [ + "bs58", + "hmac", + "k256", + "rand_core 0.6.4", + "ripemd", + "secp256k1", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bip39" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", + "zeroize", +] + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +dependencies = [ + "byte-tools", + "crypto-mac", + "digest 0.8.1", + "opaque-debug 0.2.3", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" +dependencies = [ + "objc2", +] + +[[package]] +name = "bloomfilter" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" +dependencies = [ + "getrandom 0.2.16", + "siphasher 1.0.1", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/jstuczyn/bls12_381?branch=temp/experimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" +dependencies = [ + "digest 0.10.7", + "ff", + "group", + "pairing", + "rand_core 0.6.4", + "serde", + "serdect 0.3.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bnum" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" + +[[package]] +name = "brotli" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.9", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytecodec" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" +dependencies = [ + "byteorder", + "trackable 0.2.24", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "bytesize" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" + +[[package]] +name = "camino" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 2.0.12", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "castaway" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" + +[[package]] +name = "cc" +version = "1.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "celes" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" +dependencies = [ + "phf", + "serde", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" +dependencies = [ + "byteorder", + "keystream", +] + +[[package]] +name = "chacha" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a4d0c4741f6b1d67dc11a9926348a2bbe4fcdb9693dd56ff9bd1f9bf8a13c30" +dependencies = [ + "keystream", +] + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "clap" +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_complete" +version = "4.5.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5abde44486daf70c5be8b8f8f1b66c49f86236edf6fa2abadb4d961c4c6229a" +dependencies = [ + "clap", +] + +[[package]] +name = "clap_complete_fig" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" +dependencies = [ + "clap", + "clap_complete", +] + +[[package]] +name = "clap_derive" +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "clap_lex" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + +[[package]] +name = "comfy-table" +version = "7.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +dependencies = [ + "crossterm 0.28.1", + "unicode-segmentation", + "unicode-width 0.2.1", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.1", + "windows-sys 0.59.0", +] + +[[package]] +name = "console" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.1", + "windows-sys 0.60.2", +] + +[[package]] +name = "console-api" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2895653b4d9f1538a83970077cb01dfc77a4810524e51a110944688e916b18e" +dependencies = [ + "prost 0.11.9", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4cf42660ac07fcebed809cfe561dd8730bcd35b075215e6479c516bcd0d11cb" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures", + "hdrhistogram", + "humantime", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-str" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" + +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462e1f6a8e005acc8835d32d60cbd7973ed65ea2a8d8473830e675f050956427" +dependencies = [ + "prost 0.13.5", + "tendermint-proto", +] + +[[package]] +name = "cosmrs" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1394c263335da09e8ba8c4b2c675d804e3e0deb44cce0866a5f838d3ddd43d02" +dependencies = [ + "bip32", + "cosmos-sdk-proto", + "ecdsa", + "eyre", + "k256", + "rand_core 0.6.4", + "serde", + "serde_json", + "signature", + "subtle-encoding", + "tendermint", + "tendermint-rpc", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-core" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" + +[[package]] +name = "cosmwasm-crypto" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "cosmwasm-core", + "curve25519-dalek", + "digest 0.10.7", + "ecdsa", + "ed25519-zebra", + "k256", + "num-traits", + "p256", + "rand_core 0.6.4", + "rayon", + "sha2 0.10.9", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "cosmwasm-schema" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" +dependencies = [ + "cosmwasm-schema-derive", + "schemars 0.8.22", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "cosmwasm-std" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" +dependencies = [ + "base64 0.22.1", + "bech32", + "bnum", + "cosmwasm-core", + "cosmwasm-crypto", + "cosmwasm-derive", + "derive_more 1.0.0", + "hex", + "rand_core 0.6.4", + "rmp-serde", + "schemars 0.8.22", + "serde", + "serde-json-wasm", + "sha2 0.10.9", + "static_assertions", + "thiserror 1.0.69", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "futures", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "tokio", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +dependencies = [ + "bitflags 2.9.1", + "crossterm_winapi", + "parking_lot", + "rustix 0.38.44", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +dependencies = [ + "generic-array 0.12.4", + "subtle 1.0.0", +] + +[[package]] +name = "cssparser" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.104", +] + +[[package]] +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "cupid" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1" +dependencies = [ + "gcc", + "rustc_version 0.2.3", +] + +[[package]] +name = "curl" +version = "0.4.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2d5c8f48d9c0c23250e52b55e82a6ab4fdba6650c931f5a0a57a43abda812b" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2", + "windows-sys 0.59.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.82+curl-8.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4d63638b5ec65f1a4ae945287b3fd035be4554bbaf211901159c9a2a74fb5be" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.59.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "serde", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "cw-controllers" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw-storage-plus" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" +dependencies = [ + "cosmwasm-std", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "cw-utils" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "semver 1.0.26", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw20" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "cw3" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw20", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw4" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.104", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", + "serde", +] + +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "debounced" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "107e5cd9b5163c19751e53eef634cae25cf5ed5f6d0c81125feaa92e43703cc7" +dependencies = [ + "futures-timer", + "futures-util", +] + +[[package]] +name = "defguard_wireguard_rs" +version = "0.4.7" +source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.4.7#ef1cf3714629bf5016fb38cbb7320451dc69fb09" +dependencies = [ + "base64 0.22.1", + "libc", + "log", + "netlink-packet-core", + "netlink-packet-generic", + "netlink-packet-route 0.20.1", + "netlink-packet-utils", + "netlink-packet-wireguard", + "netlink-sys", + "nix 0.29.0", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "defmt" +version = "0.3.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" +dependencies = [ + "defmt 1.0.1", +] + +[[package]] +name = "defmt" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "548d977b6da32fa1d1fda2876453da1e7df63ad0304c8b3dae4dbe7b96f39b78" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d4fc12a85bcf441cfe44344c4b72d58493178ce635338a3f3b78943aceb258e" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.12", +] + +[[package]] +name = "delegate-display" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9926686c832494164c33a36bf65118f4bd6e704000b58c94681bf62e9ad67a74" +dependencies = [ + "impartial-ord", + "itoa", + "macroific", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "unicode-xid", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.1", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "dkg-bypass-contract" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "nym-coconut-dkg-common 0.1.0", + "nym-contracts-common", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "dtoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "easy-addr" +version = "0.1.0" +dependencies = [ + "cosmwasm-std", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect 0.2.0", + "signature", + "spki", +] + +[[package]] +name = "echo-server" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "bytecodec", + "bytes", + "clap", + "dashmap", + "dirs", + "futures", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-sdk", + "serde", + "tempfile", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + +[[package]] +name = "ed25519-consensus" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" +dependencies = [ + "curve25519-dalek-ng", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core 0.6.4", + "sha2 0.10.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect 0.2.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + +[[package]] +name = "envy" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" +dependencies = [ + "serde", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "etherparse" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "827292ea592108849932ad8e30218f8b1f21c0dfd0696698a18b5d0aed62d990" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.0", + "pin-project-lite", +] + +[[package]] +name = "extension-storage" +version = "1.3.0-rc.0" +dependencies = [ + "bip39", + "console_error_panic_hook", + "js-sys", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.12", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-storage", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fancy_constructor" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "eyre", + "paste", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "forwarded-header-value" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +dependencies = [ + "nonempty", + "thiserror 1.0.69", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generator" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows 0.61.3", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", + "wasm-bindgen", +] + +[[package]] +name = "getset" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug 0.3.1", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 1.3.1", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "goblin" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.10.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.10.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "handlebars" +version = "3.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" +dependencies = [ + "log", + "pest", + "pest_derive", + "quick-error", + "serde", + "serde_json", +] + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64 0.22.1", + "bytes", + "headers-core", + "http 1.3.1", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.3.1", +] + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + +[[package]] +name = "hickory-proto" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +dependencies = [ + "async-trait", + "bytes", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "h2 0.4.11", + "http 1.3.1", + "idna", + "ipnet", + "once_cell", + "rand 0.9.1", + "ring", + "rustls 0.23.29", + "thiserror 2.0.12", + "tinyvec", + "tokio", + "tokio-rustls 0.26.2", + "tracing", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "moka", + "once_cell", + "parking_lot", + "rand 0.9.1", + "resolv-conf", + "rustls 0.23.29", + "smallvec", + "thiserror 2.0.12", + "tokio", + "tokio-rustls 0.26.2", + "tracing", + "webpki-roots 0.26.11", +] + +[[package]] +name = "hidapi" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "winapi", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "html5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" +dependencies = [ + "log", + "markup5ever", + "match_token", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpcodec" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" +dependencies = [ + "bytecodec", + "trackable 0.2.24", +] + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "humantime" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" + +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http 1.3.1", + "hyper 1.6.0", + "hyper-util", + "rustls 0.23.29", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.2", + "tower-service", + "webpki-roots 1.0.2", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.32", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-util" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.6.0", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.61.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impartial-ord" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "importer-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "bip39", + "clap", + "dirs", + "importer-contract", + "nym-bin-common 0.6.0", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "serde", + "serde_json", + "tokio", + "tracing", +] + +[[package]] +name = "importer-contract" +version = "0.1.0" +dependencies = [ + "base85rs", + "cosmwasm-schema", + "cosmwasm-std", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexed_db_futures" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" +dependencies = [ + "accessory", + "cfg-if", + "delegate-display", + "derive_more 2.0.1", + "fancy_constructor", + "indexed_db_futures_macros_internal", + "js-sys", + "sealed", + "smallvec", + "thiserror 2.0.12", + "tokio", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "indexed_db_futures_macros_internal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caeba94923b68f254abef921cea7e7698bf4675fdd89d7c58bf1ed885b49a27d" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +dependencies = [ + "equivalent", + "hashbrown 0.15.4", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console 0.15.11", + "number_prefix", + "portable-atomic", + "unicode-width 0.2.1", + "web-time", +] + +[[package]] +name = "indicatif" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +dependencies = [ + "console 0.16.0", + "portable-atomic", + "unicode-width 0.2.1", + "unit-prefix", + "vt100", + "web-time", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding", + "generic-array 0.14.7", +] + +[[package]] +name = "inquire" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" +dependencies = [ + "bitflags 1.3.2", + "crossterm 0.25.0", + "dyn-clone", + "lazy_static", + "newline-converter", + "thiserror 1.0.69", + "unicode-segmentation", + "unicode-width 0.1.14", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "inventory" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83" +dependencies = [ + "rustversion", +] + +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "libc", +] + +[[package]] +name = "ip_network" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "isahc" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel", + "castaway", + "crossbeam-utils", + "curl", + "curl-sys", + "event-listener 2.5.3", + "futures-lite", + "http 0.2.12", + "log", + "once_cell", + "polling", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "jobserver" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +dependencies = [ + "getrandom 0.3.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.9", + "signature", +] + +[[package]] +name = "keystream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" + +[[package]] +name = "kqueue" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "ledger-apdu" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" +dependencies = [ + "arrayref", + "no-std-compat", + "snafu", +] + +[[package]] +name = "ledger-transport" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" +dependencies = [ + "async-trait", + "ledger-apdu", +] + +[[package]] +name = "ledger-transport-hid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" +dependencies = [ + "byteorder", + "cfg-if", + "hex", + "hidapi", + "ledger-transport", + "libc", + "log", + "thiserror 1.0.69", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" +dependencies = [ + "bitflags 2.9.1", + "libc", + "redox_syscall", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "lioness" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" +dependencies = [ + "arrayref", + "blake2 0.8.1", + "chacha 0.3.0", + "keystream", +] + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "macroific" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89f276537b4b8f981bf1c13d79470980f71134b7bdcc5e6e911e910e556b0285" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "macroific_macro", +] + +[[package]] +name = "macroific_attr_parse" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad4023761b45fcd36abed8fb7ae6a80456b0a38102d55e89a57d9a594a236be9" +dependencies = [ + "proc-macro2", + "quote", + "sealed", + "syn 2.0.104", +] + +[[package]] +name = "macroific_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a7594d3c14916fa55bef7e9d18c5daa9ed410dd37504251e4b75bbdeec33e3" +dependencies = [ + "proc-macro2", + "quote", + "sealed", + "syn 2.0.104", +] + +[[package]] +name = "macroific_macro" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da6f2ed796261b0a74e2b52b42c693bb6dee1effba3a482c49592659f824b3b" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "managed" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "markup5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minicov" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +dependencies = [ + "cc", + "walkdir", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "mix-fetch-wasm" +version = "1.4.0-rc.0" +dependencies = [ + "async-trait", + "futures", + "js-sys", + "nym-bin-common 0.6.0", + "nym-http-api-client", + "nym-ordered-buffer", + "nym-service-providers-common", + "nym-socks5-requests", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.12", + "tokio", + "tsify", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-client-core", + "wasm-utils", +] + +[[package]] +name = "mixnet-connectivity-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "futures", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-network-defaults 0.1.0", + "nym-sdk", + "tokio", + "tracing", +] + +[[package]] +name = "mock_instant" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e1d4c44418358edcac6e1d9ce59cea7fb38052429c7704033f1196f0c179e6a" + +[[package]] +name = "moka" +version = "0.12.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +dependencies = [ + "async-lock", + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "event-listener 5.4.0", + "futures-util", + "loom", + "parking_lot", + "portable-atomic", + "rustc_version 0.4.1", + "smallvec", + "tagptr", + "thiserror 1.0.69", + "uuid", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.3.1", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-generic" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" +dependencies = [ + "anyhow", + "bitflags 2.9.1", + "byteorder", + "libc", + "log", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d83370a96813d7c977f8b63054f1162df6e5784f1c598d689236564fb5a6f2" +dependencies = [ + "anyhow", + "bitflags 2.9.1", + "byteorder", + "libc", + "log", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-packet-wireguard" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b25b050ff1f6a1e23c6777b72db22790fe5b6b5ccfd3858672587a79876c8f" +dependencies = [ + "anyhow", + "byteorder", + "libc", + "log", + "netlink-packet-generic", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-proto" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" +dependencies = [ + "bytes", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 2.0.12", +] + +[[package]] +name = "netlink-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +dependencies = [ + "bytes", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "newline-converter" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "notify" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" +dependencies = [ + "bitflags 1.3.2", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "mio 0.8.11", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "nym-api" +version = "1.1.60" +dependencies = [ + "anyhow", + "async-trait", + "axum 0.7.9", + "axum-extra", + "axum-test", + "bincode", + "bip39", + "bs58", + "cfg-if", + "chrono", + "clap", + "console-subscriber", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw3", + "cw4", + "dashmap", + "dirs", + "dotenv", + "futures", + "getset", + "humantime-serde", + "itertools 0.14.0", + "k256", + "moka", + "nym-api-requests 0.1.0", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-dkg", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-time 0.1.0", + "nym-gateway-client", + "nym-http-api-common", + "nym-inclusion-probability", + "nym-mixnet-contract-common 0.6.0", + "nym-multisig-contract-common 0.1.0", + "nym-node-requests 0.1.0", + "nym-node-tester-utils", + "nym-pemstore 0.3.0", + "nym-serde-helpers 0.1.0", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-ticketbooks-merkle 0.1.0", + "nym-topology", + "nym-types", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.22", + "schemars 0.8.22", + "semver 1.0.26", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx", + "tempfile", + "tendermint", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "ts-rs", + "url", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", + "zeroize", +] + +[[package]] +name = "nym-api-requests" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmrs", + "cosmwasm-std", + "ecdsa", + "getset", + "hex", + "humantime-serde", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-node-requests 0.1.0", + "nym-serde-helpers 0.1.0", + "nym-ticketbooks-merkle 0.1.0", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.12", + "time", + "ts-rs", + "utoipa", +] + +[[package]] +name = "nym-api-requests" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "bs58", + "cosmrs", + "cosmwasm-std", + "ecdsa", + "getset", + "hex", + "humantime-serde", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-contracts-common", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-node-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-ticketbooks-merkle 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.12", + "time", + "utoipa", +] + +[[package]] +name = "nym-apple-network" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "block2", + "dispatch2", + "nix 0.30.1", + "objc2", + "objc2-foundation", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-async-file-watcher" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "notify", + "tokio", +] + +[[package]] +name = "nym-authenticator" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "bs58", + "bytes", + "clap", + "defguard_wireguard_rs", + "fastrand 2.3.0", + "futures", + "ipnetwork", + "log", + "mock_instant", + "nym-authenticator-requests", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-verification", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-gateway-storage", + "nym-id", + "nym-network-defaults 0.1.0", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-service-providers-common", + "nym-sphinx", + "nym-task", + "nym-types", + "nym-wireguard", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.12", + "tokio", + "tokio-stream", + "tokio-util", + "url", +] + +[[package]] +name = "nym-authenticator-requests" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bincode", + "hmac", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-network-defaults 0.1.0", + "nym-service-provider-requests-common", + "nym-sphinx", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "thiserror 2.0.12", + "x25519-dalek", +] + +[[package]] +name = "nym-bandwidth-controller" +version = "0.1.0" +dependencies = [ + "bip39", + "log", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-time 0.1.0", + "nym-network-defaults 0.1.0", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "thiserror 2.0.12", + "url", + "zeroize", +] + +[[package]] +name = "nym-bin-common" +version = "0.6.0" +dependencies = [ + "clap", + "clap_complete", + "clap_complete_fig", + "const-str", + "log", + "opentelemetry", + "opentelemetry-jaeger", + "schemars 0.8.22", + "serde", + "serde_json", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "tracing-tree", + "utoipa", + "vergen", +] + +[[package]] +name = "nym-bin-common" +version = "0.6.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "const-str", + "log", + "schemars 0.8.22", + "serde", + "utoipa", + "vergen", +] + +[[package]] +name = "nym-bity-integration" +version = "0.1.0" +dependencies = [ + "anyhow", + "cosmrs", + "eyre", + "k256", + "nym-cli-commands", + "nym-validator-client 0.1.0", + "serde", + "serde_json", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-cli" +version = "1.1.57" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bip39", + "bs58", + "clap", + "clap_complete", + "clap_complete_fig", + "dotenvy", + "inquire", + "log", + "nym-bin-common 0.6.0", + "nym-cli-commands", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "serde", + "serde_json", + "tap", + "tokio", +] + +[[package]] +name = "nym-cli-commands" +version = "1.0.0" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bip39", + "bs58", + "cfg-if", + "clap", + "colored", + "comfy-table", + "cosmrs", + "cosmwasm-std", + "csv", + "cw-utils", + "futures", + "handlebars", + "humantime-serde", + "inquire", + "k256", + "log", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-coconut-dkg-common 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credential-proxy-requests 0.1.0", + "nym-credential-storage", + "nym-credential-utils", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-time 0.1.0", + "nym-id", + "nym-mixnet-contract-common 0.6.0", + "nym-multisig-contract-common 0.1.0", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "nym-sphinx", + "nym-types", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "tempfile", + "thiserror 2.0.12", + "time", + "tokio", + "toml 0.8.23", + "url", + "zeroize", +] + +[[package]] +name = "nym-client" +version = "1.1.57" +dependencies = [ + "bs58", + "clap", + "dirs", + "futures", + "log", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-client-websocket-requests", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-id", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "nym-sphinx", + "nym-task", + "nym-topology", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-tungstenite", + "url", + "zeroize", +] + +[[package]] +name = "nym-client-core" +version = "1.1.15" +dependencies = [ + "async-trait", + "base64 0.21.7", + "bincode", + "bs58", + "clap", + "comfy-table", + "futures", + "gloo-timers", + "http-body-util", + "humantime-serde", + "hyper 1.6.0", + "hyper-util", + "log", + "nym-bandwidth-controller", + "nym-client-core-config-types", + "nym-client-core-gateways-storage", + "nym-client-core-surb-storage", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "nym-gateway-client", + "nym-gateway-requests", + "nym-http-api-client", + "nym-id", + "nym-metrics", + "nym-mixnet-client", + "nym-network-defaults 0.1.0", + "nym-nonexhaustive-delayqueue", + "nym-pemstore 0.3.0", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "sha2 0.10.9", + "si-scale", + "tempfile", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "tungstenite 0.20.1", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-client-core-config-types" +version = "0.1.0" +dependencies = [ + "humantime-serde", + "nym-config 0.1.0", + "nym-pemstore 0.3.0", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-statistics-common", + "serde", + "thiserror 2.0.12", + "url", +] + +[[package]] +name = "nym-client-core-gateways-storage" +version = "0.1.0" +dependencies = [ + "async-trait", + "cosmrs", + "log", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "serde", + "sqlx", + "thiserror 2.0.12", + "time", + "tokio", + "url", + "zeroize", +] + +[[package]] +name = "nym-client-core-surb-storage" +version = "0.1.0" +dependencies = [ + "async-trait", + "dashmap", + "log", + "nym-crypto 0.4.0", + "nym-sphinx", + "nym-task", + "sqlx", + "thiserror 2.0.12", + "time", + "tokio", +] + +[[package]] +name = "nym-client-wasm" +version = "1.4.0-rc.0" +dependencies = [ + "anyhow", + "futures", + "js-sys", + "nym-bin-common 0.6.0", + "nym-node-tester-utils", + "nym-node-tester-wasm", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_json", + "thiserror 2.0.12", + "tokio", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "wasm-client-core", + "wasm-utils", +] + +[[package]] +name = "nym-client-websocket-requests" +version = "0.1.0" +dependencies = [ + "nym-sphinx", + "serde", + "serde_json", +] + +[[package]] +name = "nym-coconut-dkg-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw4", + "nym-contracts-common", + "nym-multisig-contract-common 0.1.0", +] + +[[package]] +name = "nym-coconut-dkg-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw4", + "nym-contracts-common", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", +] + +[[package]] +name = "nym-common" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "tracing", + "tracing-test", +] + +[[package]] +name = "nym-compact-ecash" +version = "0.1.0" +dependencies = [ + "bincode", + "bls12_381", + "bs58", + "cfg-if", + "criterion", + "digest 0.10.7", + "ff", + "group", + "itertools 0.14.0", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "rand 0.8.5", + "rayon", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "thiserror 2.0.12", + "zeroize", +] + +[[package]] +name = "nym-compact-ecash" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "bincode", + "bls12_381", + "bs58", + "cfg-if", + "digest 0.10.7", + "ff", + "group", + "itertools 0.14.0", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "thiserror 2.0.12", + "zeroize", +] + +[[package]] +name = "nym-config" +version = "0.1.0" +dependencies = [ + "dirs", + "handlebars", + "log", + "nym-network-defaults 0.1.0", + "serde", + "thiserror 2.0.12", + "toml 0.8.23", + "url", +] + +[[package]] +name = "nym-config" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "dirs", + "handlebars", + "log", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "serde", + "thiserror 2.0.12", + "toml 0.8.23", + "url", +] + +[[package]] +name = "nym-contracts-common" +version = "0.5.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "serde", + "serde_json", + "thiserror 2.0.12", + "utoipa", + "vergen", +] + +[[package]] +name = "nym-cpp-ffi" +version = "0.1.2" +dependencies = [ + "anyhow", + "bs58", + "lazy_static", + "nym-bin-common 0.6.0", + "nym-ffi-shared", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "tokio", +] + +[[package]] +name = "nym-credential-proxy" +version = "0.1.7" +dependencies = [ + "anyhow", + "async-trait", + "axum 0.7.9", + "bip39", + "bs58", + "cfg-if", + "clap", + "colored", + "dotenvy", + "futures", + "humantime", + "nym-bin-common 0.6.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-credential-proxy-requests 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-http-api-common", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "reqwest 0.12.22", + "serde", + "serde_json", + "sqlx", + "strum 0.26.3", + "strum_macros 0.26.4", + "tempfile", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-util", + "tower 0.5.2", + "tower-http 0.5.2", + "tracing", + "url", + "utoipa", + "utoipa-swagger-ui", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-credential-proxy-requests" +version = "0.1.0" +dependencies = [ + "async-trait", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-http-api-client", + "nym-http-api-common", + "nym-serde-helpers 0.1.0", + "reqwest 0.12.22", + "schemars 0.8.22", + "serde", + "serde_json", + "time", + "tsify", + "utoipa", + "uuid", + "wasm-bindgen", + "wasmtimer", +] + +[[package]] +name = "nym-credential-proxy-requests" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "async-trait", + "nym-credentials 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-http-api-client", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "reqwest 0.12.22", + "schemars 0.8.22", + "serde", + "serde_json", + "time", + "uuid", + "wasmtimer", +] + +[[package]] +name = "nym-credential-storage" +version = "0.1.0" +dependencies = [ + "async-trait", + "bincode", + "log", + "nym-compact-ecash 0.1.0", + "nym-credentials 0.1.0", + "nym-ecash-time 0.1.0", + "serde", + "sqlx", + "thiserror 2.0.12", + "tokio", + "zeroize", +] + +[[package]] +name = "nym-credential-utils" +version = "0.1.0" +dependencies = [ + "log", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-ecash-time 0.1.0", + "nym-validator-client 0.1.0", + "thiserror 2.0.12", + "time", + "tokio", +] + +[[package]] +name = "nym-credential-verification" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmwasm-std", + "cw-utils", + "futures", + "nym-api-requests 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-ecash-contract-common 0.1.0", + "nym-gateway-requests", + "nym-gateway-storage", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "si-scale", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-credentials" +version = "0.1.0" +dependencies = [ + "bincode", + "bls12_381", + "cosmrs", + "log", + "nym-api-requests 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-time 0.1.0", + "nym-network-defaults 0.1.0", + "nym-serde-helpers 0.1.0", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "thiserror 2.0.12", + "time", + "zeroize", +] + +[[package]] +name = "nym-credentials" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "bincode", + "bls12_381", + "cosmrs", + "log", + "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "serde", + "thiserror 2.0.12", + "time", + "zeroize", +] + +[[package]] +name = "nym-credentials-interface" +version = "0.1.0" +dependencies = [ + "bls12_381", + "nym-compact-ecash 0.1.0", + "nym-ecash-time 0.1.0", + "nym-network-defaults 0.1.0", + "rand 0.8.5", + "serde", + "strum 0.26.3", + "thiserror 2.0.12", + "time", + "utoipa", +] + +[[package]] +name = "nym-credentials-interface" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "bls12_381", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "rand 0.8.5", + "serde", + "strum 0.26.3", + "thiserror 2.0.12", + "time", + "utoipa", +] + +[[package]] +name = "nym-crypto" +version = "0.4.0" +dependencies = [ + "aead", + "aes", + "aes-gcm-siv", + "blake3", + "bs58", + "cipher", + "ctr", + "digest 0.10.7", + "ed25519-dalek", + "generic-array 0.14.7", + "hkdf", + "hmac", + "nym-pemstore 0.3.0", + "nym-sphinx-types 0.2.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_bytes", + "sha2 0.10.9", + "subtle-encoding", + "thiserror 2.0.12", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-crypto" +version = "0.4.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "aes", + "bs58", + "cipher", + "ctr", + "ed25519-dalek", + "generic-array 0.14.7", + "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-sphinx-types 0.2.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "serde", + "serde_bytes", + "subtle-encoding", + "thiserror 2.0.12", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-dkg" +version = "0.1.0" +dependencies = [ + "bitvec", + "bls12_381", + "bs58", + "criterion", + "ff", + "group", + "lazy_static", + "nym-contracts-common", + "nym-pemstore 0.3.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", + "serde_derive", + "sha2 0.10.9", + "thiserror 2.0.12", + "zeroize", +] + +[[package]] +name = "nym-ecash-contract-common" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "nym-multisig-contract-common 0.1.0", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-ecash-contract-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-ecash-time" +version = "0.1.0" +dependencies = [ + "nym-compact-ecash 0.1.0", + "time", +] + +[[package]] +name = "nym-ecash-time" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "time", +] + +[[package]] +name = "nym-execute" +version = "0.1.0" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "nym-exit-policy" +version = "0.1.0" +dependencies = [ + "reqwest 0.12.22", + "serde", + "serde_json", + "thiserror 2.0.12", + "tracing", + "utoipa", +] + +[[package]] +name = "nym-exit-policy" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "serde", + "serde_json", + "thiserror 2.0.12", + "tracing", + "utoipa", +] + +[[package]] +name = "nym-ffi-shared" +version = "0.2.1" +dependencies = [ + "anyhow", + "bs58", + "lazy_static", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "tokio", + "uniffi", + "uniffi_build", +] + +[[package]] +name = "nym-gateway" +version = "1.1.36" +dependencies = [ + "anyhow", + "async-trait", + "bip39", + "bs58", + "dashmap", + "defguard_wireguard_rs", + "futures", + "ipnetwork", + "nym-api-requests 0.1.0", + "nym-authenticator", + "nym-credential-verification", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-gateway-stats-storage", + "nym-gateway-storage", + "nym-ip-packet-router", + "nym-mixnet-client", + "nym-mixnode-common", + "nym-network-defaults 0.1.0", + "nym-network-requester", + "nym-node-metrics", + "nym-sdk", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-types", + "nym-validator-client 0.1.0", + "nym-wireguard", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "sha2 0.10.9", + "sqlx", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-gateway-client" +version = "0.1.0" +dependencies = [ + "futures", + "getrandom 0.2.16", + "gloo-utils 0.2.0", + "nym-bandwidth-controller", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-http-api-client", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "si-scale", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tracing", + "tungstenite 0.20.1", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-gateway-directory" +version = "0.0.0" +dependencies = [ + "futures", + "itertools 0.14.0", + "nym-client-core", + "nym-common", + "nym-crypto 0.4.0", + "nym-http-api-client", + "nym-offline-monitor", + "nym-sphinx", + "nym-topology", + "nym-validator-client 0.1.0", + "nym-vpn-api-client", + "rand 0.8.5", + "serde", + "strum 0.26.3", + "thiserror 2.0.12", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nym-gateway-requests" +version = "0.1.0" +dependencies = [ + "bs58", + "futures", + "generic-array 0.14.7", + "nym-compact-ecash 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-pemstore 0.3.0", + "nym-serde-helpers 0.1.0", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "rand 0.8.5", + "serde", + "serde_json", + "strum 0.26.3", + "subtle 2.6.1", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", + "tungstenite 0.20.1", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-gateway-stats-storage" +version = "0.1.0" +dependencies = [ + "nym-node-metrics", + "nym-sphinx", + "nym-statistics-common", + "sqlx", + "strum 0.26.3", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-gateway-storage" +version = "0.1.0" +dependencies = [ + "bincode", + "defguard_wireguard_rs", + "nym-credentials-interface 0.1.0", + "nym-gateway-requests", + "nym-sphinx", + "sqlx", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-go-ffi" +version = "0.2.2" +dependencies = [ + "anyhow", + "lazy_static", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-ffi-shared", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "thiserror 2.0.12", + "tokio", + "uniffi", + "uniffi_build", +] + +[[package]] +name = "nym-group-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cw-controllers", + "cw4", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "nym-group-contract-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "cosmwasm-schema", + "cw-controllers", + "cw4", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "nym-http-api-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "bincode", + "bytes", + "encoding_rs", + "hickory-resolver", + "http 1.3.1", + "mime", + "nym-bin-common 0.6.0", + "nym-http-api-common", + "once_cell", + "reqwest 0.12.22", + "serde", + "serde_json", + "thiserror 2.0.12", + "tokio", + "tracing", + "url", + "wasmtimer", +] + +[[package]] +name = "nym-http-api-common" +version = "0.1.0" +dependencies = [ + "axum 0.7.9", + "axum-client-ip", + "bincode", + "bytes", + "colored", + "futures", + "mime", + "serde", + "serde_yaml", + "subtle 2.6.1", + "time", + "tower 0.5.2", + "tracing", + "utoipa", + "zeroize", +] + +[[package]] +name = "nym-id" +version = "0.1.0" +dependencies = [ + "nym-credential-storage", + "nym-credentials 0.1.0", + "thiserror 2.0.12", + "time", + "tracing", + "zeroize", +] + +[[package]] +name = "nym-id-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "bs58", + "clap", + "nym-bin-common 0.6.0", + "nym-credential-storage", + "nym-id", + "tokio", + "tracing", +] + +[[package]] +name = "nym-inclusion-probability" +version = "0.1.0" +dependencies = [ + "log", + "rand 0.8.5", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-ip-packet-requests" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-service-provider-requests-common", + "nym-sphinx", + "rand 0.8.5", + "serde", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "nym-ip-packet-router" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bs58", + "bytes", + "clap", + "etherparse", + "futures", + "log", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-exit-policy 0.1.0", + "nym-id", + "nym-ip-packet-requests", + "nym-network-defaults 0.1.0", + "nym-network-requester", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-service-providers-common", + "nym-sphinx", + "nym-task", + "nym-tun", + "nym-types", + "nym-wireguard", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "reqwest 0.12.22", + "serde", + "serde_json", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-tun", + "tokio-util", + "url", +] + +[[package]] +name = "nym-ledger" +version = "0.1.0" +dependencies = [ + "bip32", + "k256", + "ledger-transport", + "ledger-transport-hid", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-metrics" +version = "0.1.0" +dependencies = [ + "dashmap", + "lazy_static", + "prometheus", + "tracing", +] + +[[package]] +name = "nym-mixnet-client" +version = "0.1.0" +dependencies = [ + "dashmap", + "futures", + "nym-sphinx", + "nym-task", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-mixnet-contract-common" +version = "0.6.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-storage-plus", + "cw2", + "humantime-serde", + "nym-contracts-common", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "semver 1.0.26", + "serde", + "serde-json-wasm", + "serde_repr", + "thiserror 2.0.12", + "time", + "ts-rs", + "utoipa", +] + +[[package]] +name = "nym-mixnet-contract-common" +version = "0.6.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-storage-plus", + "humantime-serde", + "nym-contracts-common", + "schemars 0.8.22", + "semver 1.0.26", + "serde", + "serde-json-wasm", + "serde_repr", + "thiserror 2.0.12", + "time", + "utoipa", +] + +[[package]] +name = "nym-mixnode-common" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "humantime-serde", + "log", + "nym-crypto 0.4.0", + "nym-metrics", + "nym-network-defaults 0.1.0", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-types 0.2.0", + "nym-task", + "rand 0.8.5", + "serde", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "nym-multisig-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "cw3", + "cw4", + "schemars 0.8.22", + "serde", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-multisig-contract-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "cw3", + "cw4", + "schemars 0.8.22", + "serde", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-network-defaults" +version = "0.1.0" +dependencies = [ + "cargo_metadata 0.18.1", + "dotenvy", + "log", + "regex", + "schemars 0.8.22", + "serde", + "url", + "utoipa", +] + +[[package]] +name = "nym-network-defaults" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "cargo_metadata 0.18.1", + "dotenvy", + "log", + "regex", + "schemars 0.8.22", + "serde", + "url", + "utoipa", +] + +[[package]] +name = "nym-network-monitor" +version = "1.0.2" +dependencies = [ + "anyhow", + "axum 0.7.9", + "clap", + "dashmap", + "futures", + "log", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-network-defaults 0.1.0", + "nym-sdk", + "nym-sphinx", + "nym-topology", + "nym-types", + "nym-validator-client 0.1.0", + "petgraph", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.22", + "serde", + "serde_json", + "tokio", + "tokio-postgres", + "tokio-util", + "utoipa", + "utoipa-swagger-ui", +] + +[[package]] +name = "nym-network-requester" +version = "1.1.58" +dependencies = [ + "addr", + "anyhow", + "async-trait", + "bs58", + "clap", + "dirs", + "futures", + "humantime-serde", + "ipnetwork", + "log", + "nym-async-file-watcher", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-client-websocket-requests", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-exit-policy 0.1.0", + "nym-id", + "nym-network-defaults 0.1.0", + "nym-ordered-buffer", + "nym-sdk", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", + "nym-sphinx", + "nym-task", + "nym-types", + "publicsuffix", + "rand 0.8.5", + "regex", + "reqwest 0.12.22", + "serde", + "serde_json", + "sqlx", + "tap", + "tempfile", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-tungstenite", + "tokio-util", + "url", + "zeroize", +] + +[[package]] +name = "nym-node" +version = "1.13.0" +dependencies = [ + "anyhow", + "arc-swap", + "arrayref", + "async-trait", + "axum 0.7.9", + "bip39", + "blake2 0.8.1", + "bloomfilter", + "bs58", + "cargo_metadata 0.18.1", + "celes", + "chacha 0.4.0", + "clap", + "colored", + "criterion", + "csv", + "cupid", + "futures", + "hkdf", + "human-repr", + "humantime-serde", + "indicatif 0.17.11", + "ipnetwork", + "lioness", + "nym-authenticator", + "nym-bin-common 0.6.0", + "nym-client-core-config-types", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway", + "nym-gateway-stats-storage", + "nym-http-api-client", + "nym-http-api-common", + "nym-ip-packet-router", + "nym-metrics", + "nym-mixnet-client", + "nym-network-requester", + "nym-node-metrics", + "nym-node-requests 0.1.0", + "nym-nonexhaustive-delayqueue", + "nym-pemstore 0.3.0", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-types", + "nym-validator-client 0.1.0", + "nym-verloc", + "nym-wireguard", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.9", + "sysinfo", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-util", + "toml 0.8.23", + "tower-http 0.5.2", + "tracing", + "tracing-indicatif", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "zeroize", +] + +[[package]] +name = "nym-node-metrics" +version = "0.1.0" +dependencies = [ + "dashmap", + "futures", + "nym-metrics", + "nym-statistics-common", + "strum 0.26.3", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-node-requests" +version = "0.1.0" +dependencies = [ + "async-trait", + "celes", + "humantime", + "humantime-serde", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-exit-policy 0.1.0", + "nym-http-api-client", + "nym-wireguard-types 0.1.0", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "serde", + "serde_json", + "strum 0.26.3", + "thiserror 2.0.12", + "time", + "tokio", + "utoipa", +] + +[[package]] +name = "nym-node-requests" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "celes", + "humantime", + "humantime-serde", + "nym-bin-common 0.6.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-exit-policy 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-wireguard-types 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "schemars 0.8.22", + "serde", + "serde_json", + "strum 0.26.3", + "thiserror 2.0.12", + "time", + "utoipa", +] + +[[package]] +name = "nym-node-status-agent" +version = "1.0.0-rc.2" +dependencies = [ + "anyhow", + "clap", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-node-status-client", + "rand 0.8.5", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "nym-node-status-api" +version = "2.3.2" +dependencies = [ + "ammonia", + "anyhow", + "axum 0.7.9", + "bip39", + "chrono", + "clap", + "cosmwasm-std", + "envy", + "futures-util", + "itertools 0.14.0", + "moka", + "nym-bin-common 0.6.0", + "nym-contracts-common", + "nym-crypto 0.4.0", + "nym-http-api-client", + "nym-http-api-common", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-node-metrics", + "nym-node-requests 0.1.0", + "nym-node-status-client", + "nym-serde-helpers 0.1.0", + "nym-statistics-common", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "regex", + "reqwest 0.12.22", + "serde", + "serde_json", + "serde_json_path", + "sqlx", + "strum 0.26.3", + "strum_macros 0.26.4", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-log 0.2.0", + "tracing-subscriber", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nym-node-status-client" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "chrono", + "nym-crypto 0.4.0", + "nym-http-api-client", + "reqwest 0.12.22", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "nym-node-tester-utils" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "nym-crypto 0.4.0", + "nym-sphinx", + "nym-sphinx-params", + "nym-task", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "thiserror 2.0.12", + "tokio", + "wasm-utils", +] + +[[package]] +name = "nym-node-tester-wasm" +version = "1.3.0-rc.0" +dependencies = [ + "futures", + "js-sys", + "nym-node-tester-utils", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.12", + "tokio", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-client-core", + "wasm-utils", + "wasmtimer", +] + +[[package]] +name = "nym-nonexhaustive-delayqueue" +version = "0.1.0" +dependencies = [ + "tokio", + "tokio-stream", + "tokio-util", + "wasmtimer", +] + +[[package]] +name = "nym-nr-query" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "log", + "nym-bin-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-sdk", + "nym-service-providers-common", + "nym-socks5-requests", + "serde", + "tokio", +] + +[[package]] +name = "nym-offline-monitor" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "async-trait", + "debounced", + "dispatch2", + "futures", + "nym-apple-network", + "nym-common", + "nym-routing", + "nym-windows", + "thiserror 2.0.12", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-ordered-buffer" +version = "0.1.0" +dependencies = [ + "log", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-outfox" +version = "0.1.0" +dependencies = [ + "blake3", + "chacha20", + "chacha20poly1305", + "criterion", + "fastrand 2.3.0", + "getrandom 0.2.16", + "log", + "rand 0.8.5", + "rayon", + "sphinx-packet", + "thiserror 2.0.12", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-pemstore" +version = "0.3.0" +dependencies = [ + "pem", + "tracing", +] + +[[package]] +name = "nym-pemstore" +version = "0.3.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "pem", + "tracing", +] + +[[package]] +name = "nym-routing" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "bitflags 2.9.1", + "futures", + "ipnetwork", + "libc", + "netlink-packet-core", + "netlink-packet-route 0.24.0", + "netlink-sys", + "nix 0.30.1", + "nym-common", + "nym-windows", + "rtnetlink", + "system-configuration 0.6.1", + "thiserror 2.0.12", + "tokio", + "tracing", + "widestring", + "windows 0.59.0", +] + +[[package]] +name = "nym-sdk" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bip39", + "bytecodec", + "bytes", + "clap", + "dashmap", + "dirs", + "dotenvy", + "futures", + "hex", + "http 1.3.1", + "httpcodec", + "log", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credential-utils", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-directory", + "nym-gateway-requests", + "nym-ip-packet-requests", + "nym-network-defaults 0.1.0", + "nym-ordered-buffer", + "nym-service-providers-common", + "nym-socks5-client-core", + "nym-socks5-requests", + "nym-sphinx", + "nym-sphinx-addressing", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client 0.1.0", + "nym-vpn-api-client", + "parking_lot", + "pnet_packet", + "rand 0.8.5", + "reqwest 0.12.22", + "serde", + "tap", + "tempfile", + "thiserror 2.0.12", + "tokio", + "tokio-stream", + "tokio-util", + "toml 0.8.23", + "tracing", + "tracing-subscriber", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-serde-helpers" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bs58", + "hex", + "serde", + "time", +] + +[[package]] +name = "nym-serde-helpers" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "base64 0.22.1", + "bs58", + "hex", + "serde", + "time", +] + +[[package]] +name = "nym-service-provider-requests-common" +version = "0.1.0" +dependencies = [ + "bincode", + "serde", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-service-providers-common" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "log", + "nym-bin-common 0.6.0", + "nym-sdk", + "nym-socks5-requests", + "nym-sphinx-anonymous-replies", + "serde", + "serde_json", + "thiserror 2.0.12", + "tokio", +] + +[[package]] +name = "nym-socks5-client" +version = "1.1.57" +dependencies = [ + "bs58", + "clap", + "log", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-id", + "nym-network-defaults 0.1.0", + "nym-ordered-buffer", + "nym-pemstore 0.3.0", + "nym-socks5-client-core", + "nym-sphinx", + "nym-topology", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "thiserror 2.0.12", + "time", + "tokio", + "url", + "zeroize", +] + +[[package]] +name = "nym-socks5-client-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "dirs", + "futures", + "log", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credential-storage", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", + "nym-sphinx", + "nym-task", + "nym-validator-client 0.1.0", + "pin-project", + "rand 0.8.5", + "reqwest 0.12.22", + "schemars 0.8.22", + "serde", + "tap", + "thiserror 2.0.12", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "nym-socks5-proxy-helpers" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "log", + "nym-ordered-buffer", + "nym-socks5-requests", + "nym-task", + "tokio", + "tokio-test", + "tokio-util", +] + +[[package]] +name = "nym-socks5-requests" +version = "0.1.0" +dependencies = [ + "bincode", + "log", + "nym-exit-policy 0.1.0", + "nym-service-providers-common", + "nym-sphinx-addressing", + "serde", + "serde_json", + "tap", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-sphinx" +version = "0.1.0" +dependencies = [ + "bincode", + "log", + "nym-crypto 0.4.0", + "nym-metrics", + "nym-mixnet-contract-common 0.6.0", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-anonymous-replies", + "nym-sphinx-chunking", + "nym-sphinx-cover", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "serde", + "thiserror 2.0.12", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-sphinx-acknowledgements" +version = "0.1.0" +dependencies = [ + "generic-array 0.14.7", + "nym-crypto 0.4.0", + "nym-pemstore 0.3.0", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-topology", + "rand 0.8.5", + "serde", + "thiserror 2.0.12", + "zeroize", +] + +[[package]] +name = "nym-sphinx-addressing" +version = "0.1.0" +dependencies = [ + "nym-crypto 0.4.0", + "nym-sphinx-types 0.2.0", + "rand 0.8.5", + "serde", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-sphinx-anonymous-replies" +version = "0.1.0" +dependencies = [ + "bs58", + "nym-crypto 0.4.0", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "thiserror 2.0.12", + "tracing", + "wasm-bindgen", +] + +[[package]] +name = "nym-sphinx-chunking" +version = "0.1.0" +dependencies = [ + "dashmap", + "log", + "nym-crypto 0.4.0", + "nym-metrics", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-types 0.2.0", + "rand 0.8.5", + "serde", + "thiserror 2.0.12", + "utoipa", +] + +[[package]] +name = "nym-sphinx-cover" +version = "0.1.0" +dependencies = [ + "nym-crypto 0.4.0", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-chunking", + "nym-sphinx-forwarding", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-topology", + "rand 0.8.5", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-sphinx-forwarding" +version = "0.1.0" +dependencies = [ + "nym-outfox", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-types 0.2.0", + "serde", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-sphinx-framing" +version = "0.1.0" +dependencies = [ + "bytes", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-params", + "nym-sphinx-types 0.2.0", + "thiserror 2.0.12", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-sphinx-params" +version = "0.1.0" +dependencies = [ + "nym-crypto 0.4.0", + "nym-sphinx-types 0.2.0", + "serde", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-sphinx-routing" +version = "0.1.0" +dependencies = [ + "nym-sphinx-addressing", + "nym-sphinx-types 0.2.0", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-sphinx-types" +version = "0.2.0" +dependencies = [ + "nym-outfox", + "sphinx-packet", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-sphinx-types" +version = "0.2.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "thiserror 2.0.12", +] + +[[package]] +name = "nym-statistics-api" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum 0.7.9", + "axum-extra", + "celes", + "clap", + "nym-bin-common 0.6.0", + "nym-http-api-client", + "nym-http-api-common", + "nym-statistics-common", + "nym-task", + "nym-validator-client 0.1.0", + "serde", + "serde_json", + "sqlx", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nym-statistics-common" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-metrics", + "nym-sphinx", + "nym-task", + "serde", + "serde_json", + "sha2 0.10.9", + "si-scale", + "strum 0.26.3", + "sysinfo", + "thiserror 2.0.12", + "time", + "tokio", + "utoipa", + "wasmtimer", +] + +[[package]] +name = "nym-store-cipher" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "argon2", + "generic-array 0.14.7", + "getrandom 0.2.16", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.12", + "zeroize", +] + +[[package]] +name = "nym-task" +version = "0.1.0" +dependencies = [ + "cfg-if", + "futures", + "log", + "serde", + "thiserror 2.0.12", + "tokio", + "tokio-util", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasmtimer", +] + +[[package]] +name = "nym-ticketbooks-merkle" +version = "0.1.0" +dependencies = [ + "nym-credentials-interface 0.1.0", + "nym-serde-helpers 0.1.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rs_merkle", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "time", + "utoipa", +] + +[[package]] +name = "nym-ticketbooks-merkle" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "rs_merkle", + "schemars 0.8.22", + "serde", + "sha2 0.10.9", + "time", + "utoipa", +] + +[[package]] +name = "nym-topology" +version = "0.1.0" +dependencies = [ + "async-trait", + "nym-api-requests 0.1.0", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-mixnet-contract-common 0.6.0", + "nym-sphinx-addressing", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "rand 0.8.5", + "reqwest 0.12.22", + "serde", + "serde_json", + "thiserror 2.0.12", + "tracing", + "tsify", + "wasm-bindgen", + "wasm-utils", +] + +[[package]] +name = "nym-tun" +version = "0.1.0" +dependencies = [ + "etherparse", + "log", + "nym-wireguard-types 0.1.0", + "thiserror 2.0.12", + "tokio", + "tokio-tun", +] + +[[package]] +name = "nym-types" +version = "1.0.0" +dependencies = [ + "base64 0.22.1", + "cosmrs", + "cosmwasm-std", + "eyre", + "hmac", + "itertools 0.14.0", + "log", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-mixnet-contract-common 0.6.0", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "reqwest 0.12.22", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "strum 0.26.3", + "tempfile", + "thiserror 2.0.12", + "ts-rs", + "url", + "utoipa", + "x25519-dalek", +] + +[[package]] +name = "nym-validator-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bip32", + "bip39", + "colored", + "cosmrs", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "cw3", + "cw4", + "eyre", + "flate2", + "futures", + "itertools 0.14.0", + "nym-api-requests 0.1.0", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-ecash-contract-common 0.1.0", + "nym-group-contract-common 0.1.0", + "nym-http-api-client", + "nym-mixnet-contract-common 0.6.0", + "nym-multisig-contract-common 0.1.0", + "nym-network-defaults 0.1.0", + "nym-serde-helpers 0.1.0", + "nym-vesting-contract-common 0.7.0", + "prost 0.13.5", + "reqwest 0.12.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint-rpc", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", + "ts-rs", + "url", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-validator-client" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bip32", + "bip39", + "colored", + "cosmrs", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "cw3", + "cw4", + "eyre", + "flate2", + "futures", + "itertools 0.14.0", + "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-contracts-common", + "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-group-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-http-api-client", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-vesting-contract-common 0.7.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "prost 0.13.5", + "reqwest 0.12.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint-rpc", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", + "url", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-validator-rewarder" +version = "0.3.0" +dependencies = [ + "anyhow", + "bip39", + "clap", + "cosmwasm-std", + "futures", + "humantime", + "humantime-serde", + "nym-bin-common 0.6.0", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "nym-serde-helpers 0.1.0", + "nym-task", + "nym-ticketbooks-merkle 0.1.0", + "nym-validator-client 0.1.0", + "nyxd-scraper", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "serde_with", + "sha2 0.10.9", + "sqlx", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-verloc" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "humantime", + "nym-crypto 0.4.0", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-vesting-contract-common" +version = "0.7.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "nym-contracts-common", + "nym-mixnet-contract-common 0.6.0", + "serde", + "thiserror 2.0.12", + "ts-rs", +] + +[[package]] +name = "nym-vesting-contract-common" +version = "0.7.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "nym-contracts-common", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "serde", + "thiserror 2.0.12", +] + +[[package]] +name = "nym-vpn-api-client" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "backon", + "base64-url", + "bip39", + "bs58", + "chrono", + "itertools 0.13.0", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-contracts-common", + "nym-credential-proxy-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-http-api-client", + "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "serde", + "serde_json", + "sha2 0.10.9", + "strum 0.26.3", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nym-vpn-api-lib-wasm" +version = "0.1.0" +dependencies = [ + "bs58", + "getrandom 0.2.16", + "js-sys", + "nym-bin-common 0.6.0", + "nym-compact-ecash 0.1.0", + "nym-credential-proxy-requests 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_json", + "thiserror 2.0.12", + "time", + "tsify", + "wasm-bindgen", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "nym-wallet-types" +version = "1.0.0" +dependencies = [ + "cosmrs", + "cosmwasm-std", + "hex-literal", + "nym-config 0.1.0", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-types", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "serde", + "serde_json", + "strum 0.23.0", + "ts-rs", +] + +[[package]] +name = "nym-windows" +version = "1.11.0" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +dependencies = [ + "bitflags 2.9.1", + "futures", + "thiserror 2.0.12", + "tokio", + "tracing", + "windows 0.59.0", +] + +[[package]] +name = "nym-wireguard" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bincode", + "chrono", + "dashmap", + "defguard_wireguard_rs", + "futures", + "ip_network", + "log", + "nym-authenticator-requests", + "nym-credential-verification", + "nym-crypto 0.4.0", + "nym-gateway-storage", + "nym-network-defaults 0.1.0", + "nym-node-metrics", + "nym-task", + "nym-wireguard-types 0.1.0", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-stream", + "tracing", + "x25519-dalek", +] + +[[package]] +name = "nym-wireguard-types" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "log", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-network-defaults 0.1.0", + "rand 0.8.5", + "serde", + "thiserror 2.0.12", + "x25519-dalek", +] + +[[package]] +name = "nym-wireguard-types" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +dependencies = [ + "base64 0.22.1", + "log", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "serde", + "thiserror 2.0.12", + "x25519-dalek", +] + +[[package]] +name = "nymvisor" +version = "0.1.22" +dependencies = [ + "anyhow", + "bytes", + "clap", + "dotenvy", + "flate2", + "futures", + "hex", + "humantime", + "humantime-serde", + "nix 0.27.1", + "nym-async-file-watcher", + "nym-bin-common 0.6.0", + "nym-config 0.1.0", + "nym-task", + "reqwest 0.12.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tar", + "thiserror 2.0.12", + "time", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nyx-chain-watcher" +version = "0.1.14" +dependencies = [ + "anyhow", + "async-trait", + "axum 0.7.9", + "chrono", + "clap", + "nym-bin-common 0.6.0", + "nym-config 0.1.0", + "nym-network-defaults 0.1.0", + "nym-task", + "nym-validator-client 0.1.0", + "nyxd-scraper", + "reqwest 0.12.22", + "schemars 0.8.22", + "serde", + "sqlx", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nyxd-scraper" +version = "0.1.0" +dependencies = [ + "async-trait", + "const_format", + "cosmrs", + "eyre", + "futures", + "humantime", + "serde", + "sha2 0.10.9", + "sqlx", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.12", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "objc2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +dependencies = [ + "bitflags 2.9.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" +dependencies = [ + "bitflags 2.9.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "critical-section", + "portable-atomic", +] + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[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.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-http" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" +dependencies = [ + "async-trait", + "bytes", + "http 0.2.12", + "isahc", + "opentelemetry_api", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "http 0.2.12", + "isahc", + "once_cell", + "opentelemetry", + "opentelemetry-http", + "opentelemetry-semantic-conventions", + "thiserror 1.0.69", + "thrift", + "tokio", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "once_cell", + "pin-project-lite", + "thiserror 1.0.69", + "urlencoding", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand 0.8.5", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "peg" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477" +dependencies = [ + "peg-macros", + "peg-runtime", +] + +[[package]] +name = "peg-macros" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71" +dependencies = [ + "peg-runtime", + "proc-macro2", + "quote", +] + +[[package]] +name = "peg-runtime" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca" + +[[package]] +name = "pem" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +dependencies = [ + "base64 0.13.1", + "once_cell", + "regex", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +dependencies = [ + "memchr", + "thiserror 2.0.12", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "pest_meta" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +dependencies = [ + "pest", + "sha2 0.10.9", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.10.0", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "plotters" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" + +[[package]] +name = "plotters-svg" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "pnet_base" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" +dependencies = [ + "no-std-net", +] + +[[package]] +name = "pnet_macros" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.104", +] + +[[package]] +name = "pnet_macros_support" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" +dependencies = [ + "pnet_base", +] + +[[package]] +name = "pnet_packet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" +dependencies = [ + "glob", + "pnet_base", + "pnet_macros", + "pnet_macros_support", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[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 0.3.1", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes", + "fallible-iterator", + "hmac", + "md-5", + "memchr", + "rand 0.9.1", + "sha2 0.10.9", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" +dependencies = [ + "bytes", + "fallible-iterator", + "postgres-protocol", +] + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror 2.0.12", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive 0.13.5", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + +[[package]] +name = "protobuf" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" +dependencies = [ + "once_cell", + "protobuf-support", + "thiserror 1.0.69", +] + +[[package]] +name = "protobuf-support" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" +dependencies = [ + "thiserror 1.0.69", +] + +[[package]] +name = "psl" +version = "2.1.124" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "281f96193296bf4916d7a112df4cc578aaf7a4d71f1570667779bb07364ed837" +dependencies = [ + "psl-types", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quinn" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.29", + "socket2", + "thiserror 2.0.12", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +dependencies = [ + "bytes", + "getrandom 0.3.3", + "lru-slab", + "rand 0.9.1", + "ring", + "rustc-hash", + "rustls 0.23.29", + "rustls-pki-types", + "slab", + "thiserror 2.0.12", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +dependencies = [ + "async-compression", + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-rustls 0.27.7", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.29", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tokio-rustls 0.26.2", + "tokio-util", + "tower 0.5.2", + "tower-http 0.6.6", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots 1.0.2", +] + +[[package]] +name = "reserve-port" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" +dependencies = [ + "thiserror 2.0.12", +] + +[[package]] +name = "resolv-conf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle 2.6.1", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rs_merkle" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" +dependencies = [ + "sha2 0.10.9", +] + +[[package]] +name = "rsa" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rtnetlink" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe0a03f6b9b483c67d4b328fc5d66c8db0b6aa274e0fa2def71b5e442a69acf" +dependencies = [ + "futures", + "log", + "netlink-packet-core", + "netlink-packet-route 0.24.0", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix 0.29.0", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "rust-embed" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.104", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" +dependencies = [ + "sha2 0.10.9", + "walkdir", +] + +[[package]] +name = "rust-multipart-rfc7578_2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" +dependencies = [ + "bytes", + "futures-core", + "futures-util", + "http 0.2.12", + "mime", + "mime_guess", + "rand 0.8.5", + "thiserror 1.0.69", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.26", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +dependencies = [ + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys 0.9.4", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.103.4", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals 0.29.1", + "syn 2.0.104", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sealed" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "serdect 0.2.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" +dependencies = [ + "cc", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.9.1", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_bytes" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_derive_internals" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_json_path" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b992cea3194eea663ba99a042d61cea4bd1872da37021af56f6a37e0359b9d33" +dependencies = [ + "inventory", + "nom", + "regex", + "serde", + "serde_json", + "serde_json_path_core", + "serde_json_path_macros", + "thiserror 2.0.12", +] + +[[package]] +name = "serde_json_path_core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde67d8dfe7d4967b5a95e247d4148368ddd1e753e500adb34b3ffe40c6bc1bc" +dependencies = [ + "inventory", + "serde", + "serde_json", + "thiserror 2.0.12", +] + +[[package]] +name = "serde_json_path_macros" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "517acfa7f77ddaf5c43d5f119c44a683774e130b4247b7d3210f8924506cfac8" +dependencies = [ + "inventory", + "serde_json_path_core", + "serde_json_path_macros_internal", +] + +[[package]] +name = "serde_json_path_macros_internal" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.10.0", + "schemars 0.9.0", + "schemars 1.0.4", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.10.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "serdect" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "si-scale" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio 0.8.11", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "smolmix" +version = "0.1.0" +dependencies = [ + "bytes", + "dirs", + "nym-bin-common 0.6.0", + "nym-ip-packet-requests", + "nym-sdk", + "reqwest 0.12.22", + "rustls 0.23.29", + "serde_json", + "smoltcp", + "thiserror 2.0.12", + "tokio", + "tracing", + "tracing-subscriber", + "webpki-roots 1.0.2", +] + +[[package]] +name = "smoltcp" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "cfg-if", + "defmt 0.3.100", + "heapless", + "managed", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "sphinx-packet" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" +dependencies = [ + "aes", + "arrayref", + "blake2 0.8.1", + "bs58", + "byteorder", + "chacha 0.3.0", + "ctr", + "curve25519-dalek", + "digest 0.10.7", + "hkdf", + "hmac", + "lioness", + "rand 0.8.5", + "rand_distr", + "sha2 0.10.9", + "subtle 2.6.1", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlformat" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" +dependencies = [ + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +dependencies = [ + "ahash", + "atoi", + "byteorder", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 2.5.3", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashlink", + "hex", + "indexmap 2.10.0", + "log", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "sqlformat", + "thiserror 1.0.69", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "webpki-roots 0.25.4", +] + +[[package]] +name = "sqlx-macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +dependencies = [ + "dotenvy", + "either", + "heck 0.4.1", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 1.0.109", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +dependencies = [ + "atoi", + "base64 0.21.7", + "bitflags 2.9.1", + "byteorder", + "bytes", + "chrono", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array 0.14.7", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 1.0.69", + "time", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +dependencies = [ + "atoi", + "base64 0.21.7", + "bitflags 2.9.1", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 1.0.69", + "time", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "sqlx-core", + "time", + "tracing", + "url", + "urlencoding", +] + +[[package]] +name = "ssl-inject" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "hex", + "tokio", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb" +dependencies = [ + "strum_macros 0.23.1", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] + +[[package]] +name = "strum_macros" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38" +dependencies = [ + "heck 0.3.3", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.104", +] + +[[package]] +name = "subtle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "sysinfo" +version = "0.33.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" +dependencies = [ + "core-foundation-sys", + "libc", + "memchr", + "ntapi", + "rayon", + "windows 0.57.0", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.1", + "core-foundation", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand 2.3.0", + "getrandom 0.3.3", + "once_cell", + "rustix 1.0.7", + "windows-sys 0.59.0", +] + +[[package]] +name = "tendermint" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" +dependencies = [ + "bytes", + "digest 0.10.7", + "ed25519", + "ed25519-consensus", + "flex-error", + "futures", + "k256", + "num-traits", + "once_cell", + "prost 0.13.5", + "ripemd", + "serde", + "serde_bytes", + "serde_json", + "serde_repr", + "sha2 0.10.9", + "signature", + "subtle 2.6.1", + "subtle-encoding", + "tendermint-proto", + "time", + "zeroize", +] + +[[package]] +name = "tendermint-config" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" +dependencies = [ + "flex-error", + "serde", + "serde_json", + "tendermint", + "toml 0.8.23", + "url", +] + +[[package]] +name = "tendermint-proto" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" +dependencies = [ + "bytes", + "flex-error", + "prost 0.13.5", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "tendermint-rpc" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" +dependencies = [ + "async-trait", + "async-tungstenite", + "bytes", + "flex-error", + "futures", + "getrandom 0.2.16", + "peg", + "pin-project", + "rand 0.8.5", + "reqwest 0.11.27", + "semver 1.0.26", + "serde", + "serde_bytes", + "serde_json", + "subtle 2.6.1", + "subtle-encoding", + "tendermint", + "tendermint-config", + "tendermint-proto", + "thiserror 1.0.69", + "time", + "tokio", + "tracing", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "testnet-manager" +version = "0.1.0" +dependencies = [ + "anyhow", + "bip39", + "bs58", + "clap", + "console 0.15.11", + "cw-utils", + "dkg-bypass-contract", + "indicatif 0.17.11", + "nym-bin-common 0.6.0", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-group-contract-common 0.1.0", + "nym-mixnet-contract-common 0.6.0", + "nym-multisig-contract-common 0.1.0", + "nym-pemstore 0.3.0", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "rand 0.8.5", + "serde", + "serde_json", + "sqlx", + "tempfile", + "thiserror 2.0.12", + "time", + "tokio", + "toml 0.8.23", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "textwrap" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" +dependencies = [ + "smawk", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "itoa", + "js-sys", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +dependencies = [ + "backtrace", + "bytes", + "io-uring", + "libc", + "mio 1.0.4", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "slab", + "socket2", + "tokio-macros", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "rand 0.9.1", + "socket2", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls 0.23.29", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-tun" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5381752d5832fc811f89d54fc334951aa435022f494190ba7151661f206df" +dependencies = [ + "libc", + "nix 0.29.0", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", + "webpki-roots 0.25.4", +] + +[[package]] +name = "tokio-util" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "futures-util", + "hashbrown 0.15.4", + "pin-project-lite", + "slab", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap 2.10.0", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tonic" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +dependencies = [ + "async-trait", + "axum 0.6.20", + "base64 0.21.7", + "bytes", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost 0.11.9", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "async-compression", + "bitflags 2.9.1", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.1", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "iri-string", + "pin-project-lite", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-indicatif" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c714cc8fc46db04fcfddbd274c6ef59bebb1b435155984e7c6e89c3ce66f200" +dependencies = [ + "indicatif 0.18.0", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote", + "syn 2.0.104", +] + +[[package]] +name = "tracing-tree" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" +dependencies = [ + "nu-ansi-term", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "trackable" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" +dependencies = [ + "trackable 1.3.0", + "trackable_derive", +] + +[[package]] +name = "trackable" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" +dependencies = [ + "trackable_derive", +] + +[[package]] +name = "trackable_derive" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "ts-rs" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" +dependencies = [ + "lazy_static", + "thiserror 2.0.12", + "ts-rs-macros", +] + +[[package]] +name = "ts-rs-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "nym-api-requests 0.1.0", + "nym-mixnet-contract-common 0.6.0", + "nym-types", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "nym-wallet-types", + "ts-rs", + "walkdir", +] + +[[package]] +name = "ts-rs-macros" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "termcolor", +] + +[[package]] +name = "tsify" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" +dependencies = [ + "gloo-utils 0.1.7", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_json", + "tsify-macros", + "wasm-bindgen", +] + +[[package]] +name = "tsify-macros" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals 0.28.0", + "syn 2.0.104", +] + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.21.12", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", + "webpki-roots 0.24.0", +] + +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.3.1", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.22.4", + "rustls-pki-types", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "uniffi" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b334fd69b3cf198b63616c096aabf9820ab21ed9b2aa1367ddd4b411068bf520" +dependencies = [ + "anyhow", + "camino", + "cargo_metadata 0.19.2", + "clap", + "uniffi_bindgen", + "uniffi_build", + "uniffi_core", + "uniffi_macros", + "uniffi_pipeline", +] + +[[package]] +name = "uniffi_bindgen" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ff0132b533483cf19abb30bba5c72c24d9f3e4d9a2ff71cb3e22e73899fd46e" +dependencies = [ + "anyhow", + "askama", + "camino", + "cargo_metadata 0.19.2", + "fs-err", + "glob", + "goblin", + "heck 0.5.0", + "indexmap 2.10.0", + "once_cell", + "serde", + "tempfile", + "textwrap", + "toml 0.5.11", + "uniffi_internal_macros", + "uniffi_meta", + "uniffi_pipeline", + "uniffi_udl", +] + +[[package]] +name = "uniffi_build" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d84d607076008df3c32dd2100ee4e727269f11d3faa35691af70d144598f666" +dependencies = [ + "anyhow", + "camino", + "uniffi_bindgen", +] + +[[package]] +name = "uniffi_core" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e3b997192dc15ef1778c842001811ec7f241a093a693ac864e1fc938e64fa9" +dependencies = [ + "anyhow", + "bytes", + "once_cell", + "static_assertions", +] + +[[package]] +name = "uniffi_internal_macros" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64bec2f3a33f2f08df8150e67fa45ba59a2ca740bf20c1beb010d4d791f9a1b" +dependencies = [ + "anyhow", + "indexmap 2.10.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "uniffi_macros" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8708716d2582e4f3d7e9f320290b5966eb951ca421d7630571183615453efc" +dependencies = [ + "camino", + "fs-err", + "once_cell", + "proc-macro2", + "quote", + "serde", + "syn 2.0.104", + "toml 0.5.11", + "uniffi_meta", +] + +[[package]] +name = "uniffi_meta" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d226fc167754ce548c5ece9828c8a06f03bf1eea525d2659ba6bd648bd8e2f3" +dependencies = [ + "anyhow", + "siphasher 0.3.11", + "uniffi_internal_macros", + "uniffi_pipeline", +] + +[[package]] +name = "uniffi_pipeline" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b925b6421df15cf4bedee27714022cd9626fb4d7eee0923522a608b274ba4371" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.10.0", + "tempfile", + "uniffi_internal_macros", +] + +[[package]] +name = "uniffi_udl" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c42649b721df759d9d4692a376b82b62ce3028ec9fc466f4780fb8cdf728996" +dependencies = [ + "anyhow", + "textwrap", + "uniffi_meta", + "weedle2", +] + +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "utoipa" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" +dependencies = [ + "indexmap 2.10.0", + "serde", + "serde_json", + "utoipa-gen", +] + +[[package]] +name = "utoipa-gen" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.104", + "uuid", +] + +[[package]] +name = "utoipa-swagger-ui" +version = "8.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" +dependencies = [ + "axum 0.7.9", + "base64 0.22.1", + "mime_guess", + "regex", + "rust-embed", + "serde", + "serde_json", + "url", + "utoipa", + "zip", +] + +[[package]] +name = "utoipauto" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cba36db2c397c614110554a60fbb4bb97d5f8c6823775c766e6f455e37377047" +dependencies = [ + "utoipauto-macro", +] + +[[package]] +name = "utoipauto-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "utoipauto-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "utoipauto-core", +] + +[[package]] +name = "uuid" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +dependencies = [ + "getrandom 0.3.3", + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "validator-status-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "comfy-table", + "nym-bin-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "serde", + "serde_json", + "strum 0.26.3", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +dependencies = [ + "anyhow", + "cargo_metadata 0.18.1", + "cfg-if", + "regex", + "rustc_version 0.4.1", + "rustversion", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vt100" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" +dependencies = [ + "itoa", + "log", + "unicode-width 0.1.14", + "vte", +] + +[[package]] +name = "vte" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" +dependencies = [ + "arrayvec", + "utf8parse", + "vte_generate_state_changes", +] + +[[package]] +name = "vte_generate_state_changes" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" +dependencies = [ + "js-sys", + "minicov", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "wasm-client-core" +version = "0.1.0" +dependencies = [ + "async-trait", + "console_error_panic_hook", + "js-sys", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-crypto 0.4.0", + "nym-gateway-client", + "nym-sphinx", + "nym-sphinx-acknowledgements", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.12", + "time", + "tsify", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-storage", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "wasm-storage" +version = "0.1.0" +dependencies = [ + "async-trait", + "getrandom 0.2.16", + "indexed_db_futures", + "js-sys", + "nym-store-cipher", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.12", + "wasm-bindgen", + "wasm-utils", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm-utils" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "futures", + "getrandom 0.2.16", + "gloo-net", + "gloo-utils 0.2.0", + "js-sys", + "tungstenite 0.20.1", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmtimer" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "slab", + "wasm-bindgen", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webpki-roots" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +dependencies = [ + "rustls-webpki 0.101.7", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.2", +] + +[[package]] +name = "webpki-roots" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "weedle2" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" +dependencies = [ + "nom", +] + +[[package]] +name = "whoami" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +dependencies = [ + "redox_syscall", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" +dependencies = [ + "windows-core 0.59.0", + "windows-targets 0.53.2", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link", + "windows-numerics", +] + +[[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", +] + +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" +dependencies = [ + "windows-implement 0.59.0", + "windows-interface 0.59.1", + "windows-result 0.3.4", + "windows-strings 0.3.1", + "windows-targets 0.53.2", +] + +[[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.0", + "windows-interface 0.59.1", + "windows-link", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[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", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-implement" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[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", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "winnow" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "xattr" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +dependencies = [ + "libc", + "rustix 1.0.7", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zip" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", + "flate2", + "indexmap 2.10.0", + "memchr", + "thiserror 2.0.12", + "zopfli", +] + +[[package]] +name = "zknym-lib" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bs58", + "getrandom 0.2.16", + "js-sys", + "nym-bin-common 0.6.0", + "nym-compact-ecash 0.1.0", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-http-api-client", + "rand 0.8.5", + "reqwest 0.12.22", + "serde", + "thiserror 2.0.12", + "tokio", + "tsify", + "uuid", + "wasm-bindgen", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "zopfli" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.15+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 514ed620e68..af156714fff 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -569,7 +569,7 @@ mod tests { #[tokio::test] async fn connect_to_ipr() -> Result<(), Box> { - // init_logging(); + init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; @@ -593,7 +593,7 @@ mod tests { #[tokio::test] async fn dns_ping_checks() -> Result<(), Box> { - // init_logging(); + init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; @@ -705,7 +705,7 @@ mod tests { #[tokio::test] async fn split_dns_ping_checks() -> Result<(), Box> { - // init_logging(); + init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; diff --git a/smolmix/Cargo.toml b/smolmix/Cargo.toml index 4e0ef9a026f..4a4f2e12402 100644 --- a/smolmix/Cargo.toml +++ b/smolmix/Cargo.toml @@ -24,3 +24,4 @@ reqwest.workspace = true dirs.workspace = true rustls = { version = "0.23", default-features = false, features = ["std"] } webpki-roots = "1.0.2" +serde_json.workspace = true diff --git a/smolmix/README.md b/smolmix/README.md index 21e4d603bbe..ed5b5f1a402 100644 --- a/smolmix/README.md +++ b/smolmix/README.md @@ -1,3 +1,3 @@ # smolmix poc -Test TLS conn + smol HTTPS req/res with `cargo test`. More to come. +Test TLS conn + smolmix device HTTPS req/res via IPRs with `cargo test`. More to come. diff --git a/smolmix/src/reqwest_client.rs b/smolmix/src/reqwest_client.rs index 6ac7ed1cb2f..daa9c815a33 100644 --- a/smolmix/src/reqwest_client.rs +++ b/smolmix/src/reqwest_client.rs @@ -1,5 +1,4 @@ -use crate::{create_device, IpMixStream, SmolmixError}; -use bytes::Bytes; +use crate::{create_device, IpMixStream, NymIprDevice, SmolmixError}; use reqwest::StatusCode; use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; use smoltcp::{ @@ -75,29 +74,15 @@ impl TlsOverTcp { } } -/// Minimal reqwest-compatible client - just GET -pub struct SmolmixReqwestClient; +/// Reqwest-ish client right now, just GET +pub struct SmolmixReqwestClient { + device: Arc>, + bridge: tokio::task::JoinHandle<()>, + allocated_ip: Ipv4Address, +} impl SmolmixReqwestClient { pub async fn new() -> Result { - // TODO need to move the creation of the device + running of bridge into here, instead of on request - Ok(Self) - } - - pub async fn get(&self, url: &str) -> Result { - let parsed_url = reqwest::Url::parse(url).map_err(|_| SmolmixError::InvalidUrl)?; - let host = parsed_url.host_str().ok_or(SmolmixError::InvalidUrl)?; - let path = parsed_url.path(); - - // Get raw response and parse with reqwest helpers - let response_bytes = self.simple_get_request(host, path).await?; - let (status, body) = self.parse_simple_response(&response_bytes)?; - - Ok(SmolmixResponse { status, body }) - } - - /// Simple GET request - logic copied from tls.rs - async fn simple_get_request(&self, domain: &str, path: &str) -> Result, SmolmixError> { let ipr_stream = IpMixStream::new() .await .map_err(|_| SmolmixError::MixnetConnectionFailed)?; @@ -105,7 +90,7 @@ impl SmolmixReqwestClient { let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; info!("Allocated IP: {}", allocated_ips.ipv4); - tokio::spawn(async move { + let bridge_handle = tokio::spawn(async move { if let Err(e) = bridge.run().await { tracing::error!("Bridge error: {}", e); } @@ -123,6 +108,27 @@ impl SmolmixReqwestClient { .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) .unwrap(); + let device = Arc::new(tokio::sync::Mutex::new((iface, device))); + + Ok(Self { + device, + bridge: bridge_handle, + allocated_ip: allocated_ips.ipv4, + }) + } + + pub async fn get(&self, url: &str) -> Result { + let parsed_url = reqwest::Url::parse(url).map_err(|_| SmolmixError::InvalidUrl)?; + let host = parsed_url.host_str().ok_or(SmolmixError::InvalidUrl)?; + let path = parsed_url.path(); + + let response_bytes = self.simple_get_request(host, path).await?; + let (status, body) = self.parse_simple_response(&response_bytes)?; + + Ok(SmolmixResponse { status, body }) + } + + async fn simple_get_request(&self, domain: &str, path: &str) -> Result, SmolmixError> { let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); @@ -140,12 +146,15 @@ impl SmolmixReqwestClient { let mut request_sent = false; let mut response_data = Vec::new(); + let mut device_guard = self.device.lock().await; + let (ref mut iface, ref mut device) = &mut *device_guard; + loop { if start.elapsed() > Duration::from_secs(60) { return Err(SmolmixError::Timeout); } - iface.poll(timestamp, &mut device, &mut sockets); + iface.poll(timestamp, device, &mut sockets); timestamp += smoltcp::time::Duration::from_millis(1); let socket = sockets.get_mut::(tcp_handle); @@ -210,7 +219,7 @@ impl SmolmixReqwestClient { info!("Read error: {}", e); return Err(SmolmixError::ResponseReadFailed); } - Ok(1_usize..) => todo!(), + Ok(_) => continue, } } } @@ -220,10 +229,10 @@ impl SmolmixReqwestClient { Err(SmolmixError::NoResponseReceived) } + /// Simple response - just extract status and body fn parse_simple_response(&self, response_bytes: &[u8]) -> Result<(u16, String), SmolmixError> { let response_str = String::from_utf8_lossy(response_bytes); - // Extract status code let status_line = response_str .lines() .next() @@ -235,7 +244,6 @@ impl SmolmixReqwestClient { .and_then(|s| s.parse().ok()) .unwrap_or(200); - // Find body (after headers) if let Some(body_start) = response_str.find("\r\n\r\n") { let body = response_str[body_start + 4..].to_string(); Ok((status, body)) @@ -263,6 +271,7 @@ impl SmolmixResponse { #[cfg(test)] mod tests { use super::*; + use serde_json; use std::sync::Once; static INIT: Once = Once::new(); @@ -275,14 +284,12 @@ mod tests { nym_bin_common::logging::setup_tracing_logger(); }); } - #[tokio::test] async fn mixnet_vs_plain_reqwest() -> Result<(), Box> { init_logging(); let test_url = "https://cloudflare.com/cdn-cgi/trace"; - // Plain reqwest - direct connection info!("Fetching with plain reqwest..."); let start = tokio::time::Instant::now(); let plain_response = reqwest::get(test_url).await?; @@ -290,32 +297,22 @@ mod tests { let plain_text = plain_response.text().await?; let plain_duration = start.elapsed(); - // info!( - // "Plain reqwest - Status: {}, Time: {:?}", - // plain_status, plain_duration - // ); - info!("Plain response: {} chars", plain_text.len()); info!( - "Plain first 200 chars: {}", - &plain_text[..plain_text.len().min(200)] + "Plain reqwest - Status: {}, Time: {:?}", + plain_status, plain_duration ); - info!("\nFetching through mixnet..."); - let start = tokio::time::Instant::now(); + info!("Setting up mixnet client..."); let client = SmolmixReqwestClient::new().await?; + let start = tokio::time::Instant::now(); let mixnet_response = client.get(test_url).await?; let mixnet_status = mixnet_response.status(); let mixnet_text = mixnet_response.text().await?; let mixnet_duration = start.elapsed(); - // info!( - // "Mixnet reqwest - Status: {}, Time: {:?}", - // mixnet_status, mixnet_duration - // ); - info!("Mixnet response: {} chars", mixnet_text.len()); info!( - "Mixnet first 200 chars: {}", - &mixnet_text[..mixnet_text.len().min(200)] + "Mixnet reqwest - Status: {}, Time: {:?}", + mixnet_status, mixnet_duration ); info!("Status codes match: {}", plain_status == mixnet_status); @@ -324,7 +321,6 @@ mod tests { plain_text.len() == mixnet_text.len() ); - // Both should contain the same key fields let key_fields = ["fl=", "ip=", "ts=", "visit_scheme="]; for field in key_fields { let plain_has = plain_text.contains(field); @@ -336,11 +332,31 @@ mod tests { assert_eq!(plain_has, mixnet_has, "Field '{}' mismatch", field); } - // Performance comparison - TODO introduce this when we're not init-ing a mixnet client on each req - // info!("Plain reqwest time: {:?}", plain_duration); - // info!("Mixnet reqwest time: {:?}", mixnet_duration); - // let slowdown = mixnet_duration.as_millis() as f64 / plain_duration.as_millis() as f64; - // info!("Mixnet slowdown: {:.1}x", slowdown); + info!("Plain reqwest time: {:?}", plain_duration); + info!("Mixnet reqwest time: {:?}", mixnet_duration); + let slowdown = mixnet_duration.as_millis() as f64 / plain_duration.as_millis() as f64; + info!("Mixnet slowdown: {:.1}x", slowdown); + info!("Both responses match"); + Ok(()) + } + + #[tokio::test] + async fn compare_exit_ip() -> Result<(), Box> { + init_logging(); + let plain: serde_json::Value = reqwest::get("https://api.ipify.org?format=json") + .await? + .json() + .await?; + let plain_ip = plain["ip"].as_str().expect("no ip field"); + let client = SmolmixReqwestClient::new().await?; + // MAX: this returns 403, looks like they detect we're some sort of proxy + // let resp = client.get("https://api.ipify.org?format=json").await?; + // info!("{:?}", client.allocated_ip); + assert_ne!( + plain_ip, + client.allocated_ip.to_string(), + "IPs should not be the same" + ); Ok(()) } } From 4bea5094a53d27abef8b4b88db5e70657abf986d Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 3 Oct 2025 15:29:43 +0100 Subject: [PATCH 054/139] Fix inverted buffer slice logic --- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index e9a9609edb9..dfa10d9f25c 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -335,7 +335,7 @@ impl MixnetClient { Poll::Ready(Ok(())) } else { let written = buf.capacity(); - buf.put_slice(&self._read.buffer.split_off(written)); + buf.put_slice(&self._read.buffer[..written]); self._read.buffer.advance(written); cx.waker().wake_by_ref(); Poll::Ready(Ok(())) From da65c25da6d7003dd251941bb502142784a6a0d4 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 7 Oct 2025 17:09:04 +0100 Subject: [PATCH 055/139] framing > byte buffer --- .../mixnet_stream_wrapper_ipr.rs | 190 ++++++++---------- 1 file changed, 79 insertions(+), 111 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index af156714fff..f08ac07d741 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -22,13 +22,14 @@ use nym_ip_packet_requests::{ }; use nym_sphinx::receiver::ReconstructedMessageCodec; +use futures::StreamExt; use std::io; use std::pin::Pin; use std::task::{Context, Poll}; use std::time::Duration; use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, ReadBuf}; use tokio::sync::oneshot; -use tokio_util::codec::{Decoder /*, FramedRead */}; // TODO will need FramedRead later when u switch from bytebuffers +use tokio_util::codec::{Decoder, FramedRead}; use tracing::{debug, error, info}; const IPR_CONNECT_TIMEOUT: Duration = Duration::from_secs(60); @@ -180,42 +181,34 @@ impl IpMixStream { let timeout = tokio::time::sleep(IPR_CONNECT_TIMEOUT); tokio::pin!(timeout); - // TODO framing - let mut buffer = vec![0u8; 65536]; + let mut framed = FramedRead::new(&mut self.stream, ReconstructedMessageCodec {}); loop { tokio::select! { _ = &mut timeout => { - return Err(Error::new_unsupported("Timeout waiting for connect response".to_string())); + return Err(Error::new_unsupported( + "Timeout waiting for connect response".to_string(), + )); } - result = self.stream.read(&mut buffer) => { - match result { - Ok(0) => { - debug!("Stream closed"); + frame = framed.next() => { + match frame { + None => { return Err(Error::new_unsupported("Stream closed".to_string())); } - Ok(n) => { - debug!("Received {} bytes", n); - - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..n]); - - if let Ok(Some(reconstructed)) = codec.decode(&mut buf) { - if let Err(e) = check_ipr_message_version(&reconstructed) { - debug!("Version check failed: {}", e); - continue; - } - if let Ok(response) = IpPacketResponse::from_reconstructed_message(&reconstructed) { - if response.id() == Some(request_id) { - return self.handle_connect_response(response).await; - } + Some(Err(e)) => { + return Err(Error::new_unsupported(format!("Read error: {}", e))); + } + Some(Ok(reconstructed)) => { + if let Err(e) = check_ipr_message_version(&reconstructed) { + error!("Version check failed: {}", e); + continue; + } + if let Ok(response) = IpPacketResponse::from_reconstructed_message(&reconstructed) { + if response.id() == Some(request_id) { + return self.handle_connect_response(response).await; } } } - Err(e) => { - error!("Read error: {}", e); - return Err(Error::new_unsupported(format!("Read error: {}", e))); - } } } } @@ -256,44 +249,34 @@ impl IpMixStream { } pub async fn handle_incoming(&mut self) -> Result, Error> { - // TODO framing - let mut buffer = vec![0u8; 65536]; - - match tokio::time::timeout(Duration::from_secs(10), self.stream.read(&mut buffer)).await { - Ok(Ok(n)) if n > 0 => { - debug!("Read {} bytes", n); - - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..n]); - - if let Ok(Some(reconstructed)) = codec.decode(&mut buf) { - match self - .listener - .handle_reconstructed_message(reconstructed) - .await - { - Ok(Some(MixnetMessageOutcome::IpPackets(packets))) => { - info!("Extracted {} IP packets", packets.len()); - Ok(packets) - } - Ok(Some(MixnetMessageOutcome::Disconnect)) => { - info!("Received disconnect"); - self.connection_state = ConnectionState::Disconnected; - self.allocated_ips = None; - Ok(Vec::new()) - } - Ok(Some(MixnetMessageOutcome::MixnetSelfPing)) => { - debug!("Received mixnet self ping"); - Ok(Vec::new()) - } - Ok(None) => Ok(Vec::new()), - Err(e) => { - debug!("Failed to handle message: {}", e); - Ok(Vec::new()) - } + let mut framed = FramedRead::new(&mut self.stream, ReconstructedMessageCodec {}); + + match tokio::time::timeout(Duration::from_secs(10), framed.next()).await { + Ok(Some(reconstructed)) => { + match self + .listener + .handle_reconstructed_message(reconstructed?) + .await + { + Ok(Some(MixnetMessageOutcome::IpPackets(packets))) => { + info!("Extracted {} IP packets", packets.len()); + Ok(packets) + } + Ok(Some(MixnetMessageOutcome::Disconnect)) => { + info!("Received disconnect"); + self.connection_state = ConnectionState::Disconnected; + self.allocated_ips = None; + Ok(Vec::new()) + } + Ok(Some(MixnetMessageOutcome::MixnetSelfPing)) => { + debug!("Received mixnet self ping"); + Ok(Vec::new()) + } + Ok(None) => Ok(Vec::new()), + Err(e) => { + error!("Failed to handle message: {}", e); + Ok(Vec::new()) } - } else { - Ok(Vec::new()) } } _ => Ok(Vec::new()), @@ -398,56 +381,41 @@ impl IpMixStreamReader { } pub async fn handle_incoming(&mut self) -> Result, Error> { - // TODO framing - let mut buffer = vec![0u8; 65536]; - - match tokio::time::timeout( - Duration::from_secs(10), - self.stream_reader.read(&mut buffer), - ) - .await - { - Ok(Ok(n)) if n > 0 => { - debug!("Read {} bytes", n); - - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..n]); - - if let Ok(Some(reconstructed)) = codec.decode(&mut buf) { - match self - .listener - .handle_reconstructed_message(reconstructed) - .await - { - Ok(Some(MixnetMessageOutcome::IpPackets(packets))) => { - info!("Extracted {} IP packets", packets.len()); - Ok(packets) - } - Ok(Some(MixnetMessageOutcome::Disconnect)) => { - info!("Received disconnect"); - self.connection_state = ConnectionState::Disconnected; - self.allocated_ips = None; - // Send state update to writer - if let Some(tx) = self.state_tx.take() { - let _ = tx.send(ConnectionState::Disconnected); - } - if let Some(tx) = self.ips_tx.take() { - let _ = tx.send(None); - } - Ok(Vec::new()) - } - Ok(Some(MixnetMessageOutcome::MixnetSelfPing)) => { - debug!("Received mixnet self ping"); - Ok(Vec::new()) + let mut framed = FramedRead::new(&mut self.stream_reader, ReconstructedMessageCodec {}); + + match tokio::time::timeout(Duration::from_secs(10), framed.next()).await { + Ok(Some(reconstructed)) => { + match self + .listener + .handle_reconstructed_message(reconstructed?) + .await + { + Ok(Some(MixnetMessageOutcome::IpPackets(packets))) => { + info!("Extracted {} IP packets", packets.len()); + Ok(packets) + } + Ok(Some(MixnetMessageOutcome::Disconnect)) => { + info!("Received disconnect"); + self.connection_state = ConnectionState::Disconnected; + self.allocated_ips = None; + // Send state update to writer + if let Some(tx) = self.state_tx.take() { + let _ = tx.send(ConnectionState::Disconnected); } - Ok(None) => Ok(Vec::new()), - Err(e) => { - debug!("Failed to handle message: {}", e); - Ok(Vec::new()) + if let Some(tx) = self.ips_tx.take() { + let _ = tx.send(None); } + Ok(Vec::new()) + } + Ok(Some(MixnetMessageOutcome::MixnetSelfPing)) => { + debug!("Received mixnet self ping"); + Ok(Vec::new()) + } + Ok(None) => Ok(Vec::new()), + Err(e) => { + error!("Failed to handle message: {}", e); + Ok(Vec::new()) } - } else { - Ok(Vec::new()) } } _ => Ok(Vec::new()), From 5ba729faaaf89c768cf4af5074781d2e959c0972 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 7 Oct 2025 17:09:21 +0100 Subject: [PATCH 056/139] Fix logging in tests --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index d5edb576f69..83b7911b4f3 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -337,6 +337,9 @@ mod tests { static INIT: Once = Once::new(); fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; + } INIT.call_once(|| { nym_bin_common::logging::setup_tracing_logger(); }); @@ -344,7 +347,7 @@ mod tests { #[tokio::test] async fn simple_surb_reply_stream() -> Result<(), Box> { - // init_logging(); + init_logging(); let receiver_socket = MixSocket::new_test().await?; let receiver_address = receiver_socket.nym_address().clone(); @@ -397,7 +400,7 @@ mod tests { #[tokio::test] async fn concurrent_surb_reply_split() -> Result<(), Box> { - // init_logging(); + init_logging(); let sender_socket = MixSocket::new_test().await?; let sender_address = sender_socket.nym_address().clone(); From 836cfb63c9e6c32598d111a991e7844315ac314d Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 7 Oct 2025 17:48:23 +0100 Subject: [PATCH 057/139] Made explicit error types --- sdk/rust/nym-sdk/src/error.rs | 24 +++++++++++++ .../mixnet_stream_wrapper_ipr.rs | 34 ++++++------------- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index af7706ec925..ee14cd11a35 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -1,6 +1,10 @@ use nym_validator_client::nyxd::error::NyxdError; use std::path::PathBuf; +use crate::error; + +use nym_ip_packet_requests::v8::response::{ConnectFailureReason, IpPacketResponseData}; + /// Top-level Error enum for the mixnet client and its relevant types. #[derive(Debug, thiserror::Error)] pub enum Error { @@ -99,6 +103,26 @@ pub enum Error { #[error("Failed to get shutdown tracker from the task runtime registry: {0}")] RegistryAccess(#[from] nym_task::RegistryAccessError), + #[error("nymsphinx receiver error: {0}")] + MessageRecovery(#[from] nym_sphinx::receiver::MessageRecoveryError), + + #[error("client not connected")] + IprStreamClientNotConnected, + + #[error("client already connected or connecting")] + IprStreamClientAlreadyConnectedOrConnecting, + + #[error("listening for connection response timed out")] + IPRConnectResponseTimeout, + + #[error("no next frame: assuming stream is closed")] + IPRClientStreamClosed, + + #[error("expected control response, got {0:?}")] + UnexpectedResponseType(IpPacketResponseData), + + #[error("connect denied: {0:?}")] + ConnectDenied(ConnectFailureReason), } impl Error { diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index f08ac07d741..117fbc21bc3 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -143,9 +143,7 @@ impl IpMixStream { pub async fn connect_tunnel(&mut self) -> Result { if self.connection_state != ConnectionState::Disconnected { - return Err(Error::new_unsupported( - "Already connected or connecting".to_string(), - )); + return Err(Error::IprStreamClientAlreadyConnectedOrConnecting); } self.connection_state = ConnectionState::Connecting; @@ -186,17 +184,15 @@ impl IpMixStream { loop { tokio::select! { _ = &mut timeout => { - return Err(Error::new_unsupported( - "Timeout waiting for connect response".to_string(), - )); + return Err(Error::IPRConnectResponseTimeout); } frame = framed.next() => { match frame { None => { - return Err(Error::new_unsupported("Stream closed".to_string())); + return Err(Error::IPRClientStreamClosed); } Some(Err(e)) => { - return Err(Error::new_unsupported(format!("Read error: {}", e))); + return Err(Error::MessageRecovery(e)); } Some(Ok(reconstructed)) => { if let Err(e) = check_ipr_message_version(&reconstructed) { @@ -217,33 +213,25 @@ impl IpMixStream { async fn handle_connect_response(&self, response: IpPacketResponse) -> Result { let control_response = match response.data { - IpPacketResponseData::Control(control) => control, - _ => { - return Err(Error::new_unsupported( - "Expected control response".to_string(), - )) - } + IpPacketResponseData::Control(c) => c, + other => return Err(Error::UnexpectedResponseType(other)), }; match *control_response { ControlResponse::Connect(connect_resp) => match connect_resp.reply { ConnectResponseReply::Success(success) => Ok(success.ips), - ConnectResponseReply::Failure(reason) => Err(Error::new_unsupported(format!( - "Connect denied: {:?}", - reason - ))), + ConnectResponseReply::Failure(reason) => Err(Error::ConnectDenied(reason)), }, - _ => Err(Error::new_unsupported( - "Unexpected control response type".to_string(), + _ => Err(Error::UnexpectedResponseType( + IpPacketResponseData::Control(control_response.clone()), )), } } pub async fn send_ip_packet(&mut self, packet: &[u8]) -> Result<(), Error> { if self.connection_state != ConnectionState::Connected { - return Err(Error::new_unsupported("Not connected".to_string())); + return Err(Error::IprStreamClientNotConnected); } - let request = IpPacketRequest::new_data_request(packet.to_vec().into()); self.send_ipr_request(request).await } @@ -480,7 +468,7 @@ impl IpMixStreamWriter { } if self.connection_state != ConnectionState::Connected { - return Err(Error::new_unsupported("Not connected".to_string())); + return Err(Error::IprStreamClientNotConnected); } let request = IpPacketRequest::new_data_request(packet.to_vec().into()); From 9b51ad6c505edc8a848acba103e06ec45dceb249 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 16 Oct 2025 15:10:18 +0100 Subject: [PATCH 058/139] add missed stuff from rebase --- Cargo.lock | 3421 +++++++++++++++----------- Cargo.toml | 2 +- nym-gateway-directory/Cargo.toml | 6 +- nym-ip-packet-client/Cargo.toml | 2 +- nym-ip-packet-client/src/lib.rs | 14 + nym-ip-packet-client/src/listener.rs | 121 + sdk/rust/nym-sdk/Cargo.toml | 2 +- 7 files changed, 2068 insertions(+), 1500 deletions(-) create mode 100644 nym-ip-packet-client/src/lib.rs create mode 100644 nym-ip-packet-client/src/listener.rs diff --git a/Cargo.lock b/Cargo.lock index 5404355908c..d75b5e0a96f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,7 +11,7 @@ dependencies = [ "macroific", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -24,15 +24,6 @@ dependencies = [ "psl-types", ] -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -46,7 +37,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -96,7 +87,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.3", "once_cell", "version_check", "zerocopy", @@ -134,9 +124,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "ammonia" -version = "4.1.1" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b346764dd0814805de8abf899fe03065bcee69bb1a4771c785817e39f3978f" +checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" dependencies = [ "cssparser", "html5ever", @@ -145,12 +135,6 @@ dependencies = [ "url", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -168,9 +152,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -183,9 +167,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -198,35 +182,35 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" dependencies = [ "derive_arbitrary", ] @@ -409,7 +393,7 @@ dependencies = [ "rustc-hash", "serde", "serde_derive", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -447,27 +431,24 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.25" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40f6024f3f856663b45fd0c9b6f2024034a702f453549449e0d84a305900dad4" +checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" dependencies = [ - "brotli", - "flate2", + "compression-codecs", + "compression-core", "futures-core", - "memchr", "pin-project-lite", "tokio", - "zstd", - "zstd-safe", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] @@ -491,18 +472,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -557,34 +538,6 @@ dependencies = [ "log", ] -[[package]] -name = "axum" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" -dependencies = [ - "async-trait", - "axum-core 0.3.4", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper 0.1.2", - "tower 0.4.13", - "tower-layer", - "tower-service", -] - [[package]] name = "axum" version = "0.7.9" @@ -592,14 +545,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", - "axum-core 0.4.5", + "axum-core", "axum-macros", "bytes", "futures-util", "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "itoa", "matchit", @@ -626,28 +579,11 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" dependencies = [ - "axum 0.7.9", + "axum", "forwarded-header-value", "serde", ] -[[package]] -name = "axum-core" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - [[package]] name = "axum-core" version = "0.4.5" @@ -675,8 +611,8 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" dependencies = [ - "axum 0.7.9", - "axum-core 0.4.5", + "axum", + "axum-core", "bytes", "fastrand 2.3.0", "futures-util", @@ -701,7 +637,7 @@ checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -713,13 +649,13 @@ dependencies = [ "anyhow", "assert-json-diff", "auto-future", - "axum 0.7.9", + "axum", "bytes", "bytesize", "cookie", "http 1.3.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "mime", "pretty_assertions", @@ -736,30 +672,15 @@ dependencies = [ [[package]] name = "backon" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302eaff5357a264a2c42f127ecb8bac761cf99749fc3dc95677e2743991f99e7" +checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d" dependencies = [ "fastrand 2.3.0", "gloo-timers", "tokio", ] -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base16ct" version = "0.2.0" @@ -829,6 +750,12 @@ dependencies = [ "serde", ] +[[package]] +name = "binstring" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" + [[package]] name = "bip32" version = "0.5.3" @@ -884,9 +811,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ "serde", ] @@ -924,6 +851,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + [[package]] name = "blake3" version = "1.8.2" @@ -944,7 +882,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -953,7 +891,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -962,14 +900,14 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] name = "block2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" dependencies = [ "objc2", ] @@ -1008,9 +946,9 @@ checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" [[package]] name = "brotli" -version = "8.0.1" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1082,11 +1020,11 @@ checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" [[package]] name = "camino" -version = "1.1.10" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -1106,7 +1044,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", "thiserror 1.0.69", @@ -1120,10 +1058,10 @@ checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -1140,10 +1078,11 @@ checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" [[package]] name = "cc" -version = "1.2.29" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -1155,15 +1094,15 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" dependencies = [ - "phf", + "phf 0.11.3", "serde", ] [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -1181,15 +1120,6 @@ dependencies = [ "keystream", ] -[[package]] -name = "chacha" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a4d0c4741f6b1d67dc11a9926348a2bbe4fcdb9693dd56ff9bd1f9bf8a13c30" -dependencies = [ - "keystream", -] - [[package]] name = "chacha20" version = "0.9.1" @@ -1216,17 +1146,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -1269,9 +1198,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.41" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" dependencies = [ "clap_builder", "clap_derive", @@ -1279,9 +1208,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" dependencies = [ "anstream", "anstyle", @@ -1291,9 +1220,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.55" +version = "4.5.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5abde44486daf70c5be8b8f8f1b66c49f86236edf6fa2abadb4d961c4c6229a" +checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" dependencies = [ "clap", ] @@ -1310,21 +1239,32 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" + +[[package]] +name = "coarsetime" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] [[package]] name = "colorchoice" @@ -1344,57 +1284,65 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.1.4" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" dependencies = [ - "crossterm 0.28.1", + "crossterm 0.29.0", "unicode-segmentation", - "unicode-width 0.2.1", + "unicode-width 0.2.2", ] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "compression-codecs" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" dependencies = [ - "crossbeam-utils", + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", ] [[package]] -name = "console" -version = "0.15.11" +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width 0.2.1", - "windows-sys 0.59.0", + "crossbeam-utils", ] [[package]] name = "console" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" +checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" dependencies = [ "encode_unicode", "libc", "once_cell", - "unicode-width 0.2.1", - "windows-sys 0.60.2", + "unicode-width 0.2.2", + "windows-sys 0.61.2", ] [[package]] name = "console-api" -version = "0.5.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2895653b4d9f1538a83970077cb01dfc77a4810524e51a110944688e916b18e" +checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" dependencies = [ - "prost 0.11.9", + "futures-core", + "prost", "prost-types", "tonic", "tracing-core", @@ -1402,16 +1350,18 @@ dependencies = [ [[package]] name = "console-subscriber" -version = "0.1.10" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4cf42660ac07fcebed809cfe561dd8730bcd35b075215e6479c516bcd0d11cb" +checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" dependencies = [ "console-api", "crossbeam-channel", "crossbeam-utils", - "futures", + "futures-task", "hdrhistogram", "humantime", + "hyper-util", + "prost", "prost-types", "serde", "serde_json", @@ -1448,9 +1398,9 @@ checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" [[package]] name = "const_format" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ "const_format_proc_macros", ] @@ -1504,7 +1454,7 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "462e1f6a8e005acc8835d32d60cbd7973ed65ea2a8d8473830e675f050956427" dependencies = [ - "prost 0.13.5", + "prost", "tendermint-proto", ] @@ -1567,7 +1517,7 @@ checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1591,7 +1541,7 @@ checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1644,9 +1594,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -1756,14 +1706,15 @@ dependencies = [ [[package]] name = "crossterm" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "crossterm_winapi", + "document-features", "parking_lot", - "rustix 0.38.44", + "rustix", "winapi", ] @@ -1788,7 +1739,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "rand_core 0.6.4", "subtle 2.6.1", "zeroize", @@ -1800,7 +1751,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "rand_core 0.6.4", "typenum", ] @@ -1824,7 +1775,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf", + "phf 0.11.3", "smallvec", ] @@ -1835,7 +1786,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1859,6 +1810,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "ct-codecs" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8" + [[package]] name = "ctr" version = "0.9.2" @@ -1880,24 +1837,24 @@ dependencies = [ [[package]] name = "curl" -version = "0.4.48" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2d5c8f48d9c0c23250e52b55e82a6ab4fdba6650c931f5a0a57a43abda812b" +checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" dependencies = [ "curl-sys", "libc", "openssl-probe", "openssl-sys", "schannel", - "socket2", + "socket2 0.6.1", "windows-sys 0.59.0", ] [[package]] name = "curl-sys" -version = "0.4.82+curl-8.14.1" +version = "0.4.83+curl-8.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d63638b5ec65f1a4ae945287b3fd035be4554bbaf211901159c9a2a74fb5be" +checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" dependencies = [ "cc", "libc", @@ -1933,7 +1890,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1964,6 +1921,26 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "cw-multi-test" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" +dependencies = [ + "anyhow", + "bech32", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "itertools 0.14.0", + "prost", + "schemars 0.8.22", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", +] + [[package]] name = "cw-storage-plus" version = "2.0.0" @@ -1998,7 +1975,7 @@ dependencies = [ "cosmwasm-std", "cw-storage-plus", "schemars 0.8.22", - "semver 1.0.26", + "semver 1.0.27", "serde", "thiserror 1.0.69", ] @@ -2046,9 +2023,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.11" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ "darling_core", "darling_macro", @@ -2056,27 +2033,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.11" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "darling_macro" -version = "0.20.11" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2117,7 +2094,7 @@ dependencies = [ "base64 0.22.1", "libc", "log", - "netlink-packet-core", + "netlink-packet-core 0.7.0", "netlink-packet-generic", "netlink-packet-route 0.20.1", "netlink-packet-utils", @@ -2157,7 +2134,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2166,7 +2143,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -2180,7 +2157,7 @@ dependencies = [ "macroific", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2196,12 +2173,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -2217,13 +2194,13 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2252,7 +2229,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "unicode-xid", ] @@ -2264,7 +2241,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "unicode-xid", ] @@ -2289,7 +2266,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -2331,7 +2308,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2", "libc", "objc2", @@ -2345,7 +2322,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2366,10 +2343,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] -name = "dotenv" -version = "0.15.0" +name = "document-features" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] [[package]] name = "dotenvy" @@ -2394,9 +2374,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "easy-addr" @@ -2404,7 +2384,7 @@ version = "0.1.0" dependencies = [ "cosmwasm-std", "quote", - "syn 1.0.109", + "syn 2.0.106", ] [[package]] @@ -2458,6 +2438,16 @@ dependencies = [ "signature", ] +[[package]] +name = "ed25519-compact" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" +dependencies = [ + "ct-codecs", + "getrandom 0.2.16", +] + [[package]] name = "ed25519-consensus" version = "2.1.0" @@ -2520,8 +2510,10 @@ dependencies = [ "crypto-bigint", "digest 0.10.7", "ff", - "generic-array 0.14.7", + "generic-array 0.14.9", "group", + "hkdf", + "pem-rfc7468", "pkcs8", "rand_core 0.6.4", "sec1", @@ -2554,14 +2546,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "env_filter" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", @@ -2580,15 +2572,6 @@ dependencies = [ "log", ] -[[package]] -name = "envy" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" -dependencies = [ - "serde", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -2597,12 +2580,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -2633,9 +2616,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -2648,19 +2631,19 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "pin-project-lite", ] [[package]] name = "extension-storage" -version = "1.3.0-rc.0" +version = "1.4.0-rc.0" dependencies = [ "bip39", "console_error_panic_hook", "js-sys", "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.12", + "thiserror 2.0.17", "wasm-bindgen", "wasm-bindgen-futures", "wasm-storage", @@ -2693,7 +2676,7 @@ dependencies = [ "macroific", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2729,16 +2712,22 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + [[package]] name = "fixedbitset" version = "0.4.2" @@ -2747,9 +2736,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" dependencies = [ "crc32fast", "miniz_oxide", @@ -2782,11 +2771,17 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -2917,7 +2912,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2962,20 +2957,6 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" -[[package]] -name = "generator" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows 0.61.3", -] - [[package]] name = "generic-array" version = "0.12.4" @@ -2987,9 +2968,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "serde", "typenum", @@ -3006,36 +2987,24 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] -[[package]] -name = "getset" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "ghash" version = "0.5.1" @@ -3046,17 +3015,11 @@ dependencies = [ "polyval", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gloo-net" @@ -3141,9 +3104,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes", "fnv", @@ -3151,7 +3114,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.10.0", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -3160,9 +3123,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -3170,7 +3133,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.10.0", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -3179,12 +3142,13 @@ dependencies = [ [[package]] name = "half" -version = "2.6.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "zerocopy", ] [[package]] @@ -3237,17 +3201,28 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "hashlink" -version = "0.8.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.5", ] [[package]] @@ -3299,21 +3274,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "heck" @@ -3359,18 +3322,18 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "h2 0.4.11", + "h2 0.4.12", "http 1.3.1", "idna", "ipnet", "once_cell", - "rand 0.9.1", + "rand 0.9.2", "ring", - "rustls 0.23.29", - "thiserror 2.0.12", + "rustls 0.23.32", + "thiserror 2.0.17", "tinyvec", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tracing", "url", "webpki-roots 0.26.11", @@ -3389,13 +3352,13 @@ dependencies = [ "moka", "once_cell", "parking_lot", - "rand 0.9.1", + "rand 0.9.2", "resolv-conf", - "rustls 0.23.29", + "rustls 0.23.32", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tracing", "webpki-roots 0.26.11", ] @@ -3430,6 +3393,30 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "hmac-sha1-compact" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" + +[[package]] +name = "hmac-sha256" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha512" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "home" version = "0.5.11" @@ -3542,9 +3529,9 @@ checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "humantime-serde" @@ -3566,14 +3553,14 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -3582,19 +3569,22 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -3621,33 +3611,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", - "rustls 0.23.29", + "rustls 0.23.32", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] name = "hyper-timeout" -version = "0.4.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 0.14.32", + "hyper 1.7.0", + "hyper-util", "pin-project-lite", "tokio", - "tokio-io-timeout", + "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64 0.22.1", "bytes", @@ -3656,12 +3647,12 @@ dependencies = [ "futures-util", "http 1.3.1", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.7.0", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.1", "tokio", "tower-service", "tracing", @@ -3669,9 +3660,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3679,7 +3670,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -3785,9 +3776,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -3812,7 +3803,7 @@ checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3846,9 +3837,9 @@ dependencies = [ [[package]] name = "indenter" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexed_db_futures" @@ -3865,7 +3856,7 @@ dependencies = [ "js-sys", "sealed", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "wasm-bindgen", "wasm-bindgen-futures", @@ -3881,7 +3872,7 @@ dependencies = [ "macroific", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3897,26 +3888,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.16.0", "serde", -] - -[[package]] -name = "indicatif" -version = "0.17.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" -dependencies = [ - "console 0.15.11", - "number_prefix", - "portable-atomic", - "unicode-width 0.2.1", - "web-time", + "serde_core", ] [[package]] @@ -3925,9 +3904,9 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" dependencies = [ - "console 0.16.0", + "console", "portable-atomic", - "unicode-width 0.2.1", + "unicode-width 0.2.2", "unit-prefix", "vt100", "web-time", @@ -3960,7 +3939,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "block-padding", - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -3996,24 +3975,13 @@ checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] name = "inventory" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" dependencies = [ "rustversion", ] -[[package]] -name = "io-uring" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "libc", -] - [[package]] name = "ip_network" version = "0.4.1" @@ -4026,7 +3994,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.10", "widestring", "windows-sys 0.48.0", "winreg", @@ -4047,6 +4015,12 @@ dependencies = [ "serde", ] +[[package]] +name = "ipnetwork" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf370abdafd54d13e54a620e8c3e1145f28e46cc9d704bc6d94414559df41763" + [[package]] name = "iri-string" version = "0.7.8" @@ -4153,29 +4127,55 @@ checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", ] +[[package]] +name = "jwt-simple" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "731011e9647a71ff4f8474176ff6ce6e0d2de87a0173f15613af3a84c3e3401a" +dependencies = [ + "anyhow", + "binstring", + "blake2b_simd", + "coarsetime", + "ct-codecs", + "ed25519-compact", + "hmac-sha1-compact", + "hmac-sha256", + "hmac-sha512", + "k256", + "p256", + "p384", + "rand 0.8.5", + "serde", + "serde_json", + "superboring", + "thiserror 2.0.17", + "zeroize", +] + [[package]] name = "k256" version = "0.13.4" @@ -4264,9 +4264,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.174" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libm" @@ -4276,20 +4276,20 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.4" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "libc", "redox_syscall", ] [[package]] name = "libsqlite3-sys" -version = "0.27.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ "cc", "pkg-config", @@ -4310,15 +4310,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "lioness" @@ -4328,7 +4322,7 @@ checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" dependencies = [ "arrayref", "blake2 0.8.1", - "chacha 0.3.0", + "chacha", "keystream", ] @@ -4338,34 +4332,26 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "loom" -version = "0.7.2" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru-slab" @@ -4399,7 +4385,7 @@ dependencies = [ "proc-macro2", "quote", "sealed", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4411,7 +4397,7 @@ dependencies = [ "proc-macro2", "quote", "sealed", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4424,7 +4410,7 @@ dependencies = [ "macroific_core", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4458,16 +4444,16 @@ checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -4488,9 +4474,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memoffset" @@ -4540,6 +4526,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -4550,7 +4537,7 @@ checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.48.0", ] @@ -4561,7 +4548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.59.0", ] @@ -4580,7 +4567,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tsify", "url", @@ -4607,29 +4594,28 @@ dependencies = [ [[package]] name = "mock_instant" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e1d4c44418358edcac6e1d9ce59cea7fb38052429c7704033f1196f0c179e6a" +checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" [[package]] name = "moka" -version = "0.12.10" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" dependencies = [ "async-lock", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", - "event-listener 5.4.0", + "equivalent", + "event-listener 5.4.1", "futures-util", - "loom", "parking_lot", "portable-atomic", "rustc_version 0.4.1", "smallvec", "tagptr", - "thiserror 1.0.69", "uuid", ] @@ -4661,6 +4647,15 @@ dependencies = [ "netlink-packet-utils", ] +[[package]] +name = "netlink-packet-core" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" +dependencies = [ + "paste", +] + [[package]] name = "netlink-packet-generic" version = "0.3.3" @@ -4669,7 +4664,7 @@ checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" dependencies = [ "anyhow", "byteorder", - "netlink-packet-core", + "netlink-packet-core 0.7.0", "netlink-packet-utils", ] @@ -4680,27 +4675,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" dependencies = [ "anyhow", - "bitflags 2.9.1", + "bitflags 2.9.4", "byteorder", "libc", "log", - "netlink-packet-core", + "netlink-packet-core 0.7.0", "netlink-packet-utils", ] [[package]] name = "netlink-packet-route" -version = "0.24.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d83370a96813d7c977f8b63054f1162df6e5784f1c598d689236564fb5a6f2" +checksum = "3ec2f5b6839be2a19d7fa5aab5bc444380f6311c2b693551cb80f45caaa7b5ef" dependencies = [ - "anyhow", - "bitflags 2.9.1", - "byteorder", + "bitflags 2.9.4", "libc", "log", - "netlink-packet-core", - "netlink-packet-utils", + "netlink-packet-core 0.8.1", ] [[package]] @@ -4731,16 +4723,16 @@ dependencies = [ [[package]] name = "netlink-proto" -version = "0.11.5" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" +checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" dependencies = [ "bytes", "futures", "log", - "netlink-packet-core", + "netlink-packet-core 0.8.1", "netlink-sys", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -4777,7 +4769,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "libc", ] @@ -4788,7 +4780,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", @@ -4801,7 +4793,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", @@ -4873,6 +4865,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -4955,26 +4956,18 @@ dependencies = [ "libc", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "nym-api" -version = "1.1.60" +version = "1.1.67" dependencies = [ "anyhow", "async-trait", - "axum 0.7.9", - "axum-extra", + "axum", "axum-test", "bincode", "bip39", "bs58", "cfg-if", - "chrono", "clap", "console-subscriber", "cosmwasm-std", @@ -4983,17 +4976,14 @@ dependencies = [ "cw3", "cw4", "dashmap", - "dirs", - "dotenv", + "dotenvy", "futures", - "getset", "humantime-serde", - "itertools 0.14.0", - "k256", "moka", "nym-api-requests 0.1.0", "nym-bandwidth-controller", "nym-bin-common 0.6.0", + "nym-cache", "nym-coconut-dkg-common 0.1.0", "nym-compact-ecash 0.1.0", "nym-config 0.1.0", @@ -5004,12 +4994,12 @@ dependencies = [ "nym-crypto 0.4.0", "nym-dkg", "nym-ecash-contract-common 0.1.0", + "nym-ecash-signer-check", "nym-ecash-time 0.1.0", "nym-gateway-client", + "nym-http-api-client", "nym-http-api-common", - "nym-inclusion-probability", "nym-mixnet-contract-common 0.6.0", - "nym-multisig-contract-common 0.1.0", "nym-node-requests 0.1.0", "nym-node-tester-utils", "nym-pemstore 0.3.0", @@ -5021,20 +5011,20 @@ dependencies = [ "nym-topology", "nym-types", "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", "pin-project", "rand 0.8.5", "rand_chacha 0.3.1", - "reqwest 0.12.22", + "reqwest 0.12.24", "schemars 0.8.22", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", "sha2 0.10.9", "sqlx", "tempfile", "tendermint", - "thiserror 2.0.12", + "test-with", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -5057,18 +5047,20 @@ dependencies = [ "cosmrs", "cosmwasm-std", "ecdsa", - "getset", "hex", "humantime-serde", + "nym-coconut-dkg-common 0.1.0", "nym-compact-ecash 0.1.0", "nym-config 0.1.0", "nym-contracts-common", "nym-credentials-interface 0.1.0", "nym-crypto 0.4.0", + "nym-ecash-signer-check-types 0.1.0", "nym-ecash-time 0.1.0", "nym-mixnet-contract-common 0.6.0", "nym-network-defaults 0.1.0", "nym-node-requests 0.1.0", + "nym-noise-keys 0.1.0", "nym-serde-helpers 0.1.0", "nym-ticketbooks-merkle 0.1.0", "rand_chacha 0.3.1", @@ -5078,8 +5070,9 @@ dependencies = [ "sha2 0.10.9", "tendermint", "tendermint-rpc", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", + "tracing", "ts-rs", "utoipa", ] @@ -5087,48 +5080,51 @@ dependencies = [ [[package]] name = "nym-api-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "bs58", "cosmrs", "cosmwasm-std", "ecdsa", - "getset", "hex", "humantime-serde", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-contracts-common", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-node-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-ticketbooks-merkle 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-signer-check-types 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-node-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-noise-keys 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ticketbooks-merkle 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "schemars 0.8.22", "serde", "serde_json", "sha2 0.10.9", "tendermint", "tendermint-rpc", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", + "tracing", "utoipa", ] [[package]] name = "nym-apple-network" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" dependencies = [ "block2", "dispatch2", "nix 0.30.1", "objc2", "objc2-foundation", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -5142,47 +5138,25 @@ dependencies = [ ] [[package]] -name = "nym-authenticator" +name = "nym-authenticator-client" version = "0.1.0" dependencies = [ - "anyhow", "bincode", - "bs58", - "bytes", - "clap", - "defguard_wireguard_rs", - "fastrand 2.3.0", "futures", - "ipnetwork", - "log", - "mock_instant", "nym-authenticator-requests", - "nym-bin-common 0.6.0", - "nym-client-core", - "nym-config 0.1.0", - "nym-credential-verification", + "nym-bandwidth-controller", "nym-credentials-interface 0.1.0", "nym-crypto 0.4.0", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-id", - "nym-network-defaults 0.1.0", + "nym-registration-common", "nym-sdk", "nym-service-provider-requests-common", - "nym-service-providers-common", - "nym-sphinx", - "nym-task", - "nym-types", - "nym-wireguard", + "nym-validator-client 0.1.0", "nym-wireguard-types 0.1.0", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.12", + "semver 1.0.27", + "thiserror 2.0.17", "tokio", - "tokio-stream", "tokio-util", - "url", + "tracing", ] [[package]] @@ -5199,9 +5173,11 @@ dependencies = [ "nym-sphinx", "nym-wireguard-types 0.1.0", "rand 0.8.5", + "semver 1.0.27", "serde", "sha2 0.10.9", - "thiserror 2.0.12", + "strum_macros 0.27.2", + "thiserror 2.0.17", "x25519-dalek", ] @@ -5209,6 +5185,7 @@ dependencies = [ name = "nym-bandwidth-controller" version = "0.1.0" dependencies = [ + "async-trait", "bip39", "log", "nym-credential-storage", @@ -5221,7 +5198,7 @@ dependencies = [ "nym-task", "nym-validator-client 0.1.0", "rand 0.8.5", - "thiserror 2.0.12", + "thiserror 2.0.17", "url", "zeroize", ] @@ -5251,7 +5228,7 @@ dependencies = [ [[package]] name = "nym-bin-common" version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "const-str", "log", @@ -5262,23 +5239,15 @@ dependencies = [ ] [[package]] -name = "nym-bity-integration" +name = "nym-cache" version = "0.1.0" dependencies = [ - "anyhow", - "cosmrs", - "eyre", - "k256", - "nym-cli-commands", - "nym-validator-client 0.1.0", - "serde", - "serde_json", - "thiserror 2.0.12", + "tokio", ] [[package]] name = "nym-cli" -version = "1.1.57" +version = "1.1.64" dependencies = [ "anyhow", "base64 0.22.1", @@ -5336,6 +5305,7 @@ dependencies = [ "nym-crypto 0.4.0", "nym-ecash-contract-common 0.1.0", "nym-ecash-time 0.1.0", + "nym-http-api-client", "nym-id", "nym-mixnet-contract-common 0.6.0", "nym-multisig-contract-common 0.1.0", @@ -5350,7 +5320,7 @@ dependencies = [ "serde_json", "tap", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "toml 0.8.23", @@ -5360,7 +5330,7 @@ dependencies = [ [[package]] name = "nym-client" -version = "1.1.57" +version = "1.1.64" dependencies = [ "bs58", "clap", @@ -5387,7 +5357,7 @@ dependencies = [ "serde", "serde_json", "tap", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-tungstenite", @@ -5403,20 +5373,19 @@ dependencies = [ "base64 0.21.7", "bincode", "bs58", + "cfg-if", "clap", "comfy-table", "futures", "gloo-timers", "http-body-util", - "humantime-serde", - "hyper 1.6.0", + "humantime", + "hyper 1.7.0", "hyper-util", - "log", "nym-bandwidth-controller", "nym-client-core-config-types", "nym-client-core-gateways-storage", "nym-client-core-surb-storage", - "nym-config 0.1.0", "nym-credential-storage", "nym-credentials-interface 0.1.0", "nym-crypto 0.4.0", @@ -5425,8 +5394,8 @@ dependencies = [ "nym-gateway-requests", "nym-http-api-client", "nym-id", - "nym-metrics", "nym-mixnet-client", + "nym-mixnet-contract-common 0.6.0", "nym-network-defaults 0.1.0", "nym-nonexhaustive-delayqueue", "nym-pemstore 0.3.0", @@ -5442,7 +5411,7 @@ dependencies = [ "sha2 0.10.9", "si-scale", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -5469,7 +5438,7 @@ dependencies = [ "nym-sphinx-params", "nym-statistics-common", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "url", ] @@ -5477,16 +5446,17 @@ dependencies = [ name = "nym-client-core-gateways-storage" version = "0.1.0" dependencies = [ + "anyhow", "async-trait", "cosmrs", - "log", "nym-crypto 0.4.0", "nym-gateway-requests", "serde", "sqlx", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", + "tracing", "url", "zeroize", ] @@ -5495,16 +5465,18 @@ dependencies = [ name = "nym-client-core-surb-storage" version = "0.1.0" dependencies = [ + "anyhow", "async-trait", "dashmap", - "log", "nym-crypto 0.4.0", "nym-sphinx", "nym-task", "sqlx", - "thiserror 2.0.12", + "sqlx-pool-guard", + "thiserror 2.0.17", "time", "tokio", + "tracing", ] [[package]] @@ -5521,7 +5493,7 @@ dependencies = [ "serde", "serde-wasm-bindgen 0.6.5", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tsify", "wasm-bindgen", @@ -5556,7 +5528,7 @@ dependencies = [ [[package]] name = "nym-coconut-dkg-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -5564,13 +5536,13 @@ dependencies = [ "cw2", "cw4", "nym-contracts-common", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", ] [[package]] name = "nym-common" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" dependencies = [ "tracing", "tracing-test", @@ -5596,14 +5568,14 @@ dependencies = [ "serde", "sha2 0.10.9", "subtle 2.6.1", - "thiserror 2.0.12", + "thiserror 2.0.17", "zeroize", ] [[package]] name = "nym-compact-ecash" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "bincode", "bls12_381", @@ -5613,13 +5585,13 @@ dependencies = [ "ff", "group", "itertools 0.14.0", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=develop)", "rand 0.8.5", "serde", "sha2 0.10.9", "subtle 2.6.1", - "thiserror 2.0.12", + "thiserror 2.0.17", "zeroize", ] @@ -5632,7 +5604,7 @@ dependencies = [ "log", "nym-network-defaults 0.1.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "toml 0.8.23", "url", ] @@ -5640,14 +5612,14 @@ dependencies = [ [[package]] name = "nym-config" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "dirs", "handlebars", "log", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "toml 0.8.23", "url", ] @@ -5656,6 +5628,7 @@ dependencies = [ name = "nym-contracts-common" version = "0.5.0" dependencies = [ + "anyhow", "bs58", "cosmwasm-schema", "cosmwasm-std", @@ -5663,11 +5636,25 @@ dependencies = [ "schemars 0.8.22", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "utoipa", "vergen", ] +[[package]] +name = "nym-contracts-common-testing" +version = "0.1.0" +dependencies = [ + "anyhow", + "cosmwasm-std", + "cw-multi-test", + "cw-storage-plus", + "nym-contracts-common", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", +] + [[package]] name = "nym-cpp-ffi" version = "0.1.2" @@ -5684,43 +5671,41 @@ dependencies = [ [[package]] name = "nym-credential-proxy" -version = "0.1.7" +version = "0.3.0" dependencies = [ "anyhow", - "async-trait", - "axum 0.7.9", + "axum", "bip39", "bs58", "cfg-if", "clap", - "colored", - "dotenvy", "futures", "humantime", "nym-bin-common 0.6.0", "nym-compact-ecash 0.1.0", "nym-config 0.1.0", + "nym-credential-proxy-lib", "nym-credential-proxy-requests 0.1.0", "nym-credentials 0.1.0", "nym-credentials-interface 0.1.0", "nym-crypto 0.4.0", "nym-ecash-contract-common 0.1.0", + "nym-ecash-signer-check", "nym-http-api-common", "nym-network-defaults 0.1.0", "nym-validator-client 0.1.0", "rand 0.8.5", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", "sqlx", - "strum 0.26.3", - "strum_macros 0.26.4", + "strum", + "strum_macros 0.27.2", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-util", - "tower 0.5.2", "tower-http 0.5.2", "tracing", "url", @@ -5730,6 +5715,44 @@ dependencies = [ "zeroize", ] +[[package]] +name = "nym-credential-proxy-lib" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "bip39", + "bs58", + "futures", + "humantime", + "nym-cache", + "nym-compact-ecash 0.1.0", + "nym-credential-proxy-requests 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-signer-check", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "strum", + "strum_macros 0.27.2", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tracing", + "url", + "uuid", + "zeroize", +] + [[package]] name = "nym-credential-proxy-requests" version = "0.1.0" @@ -5740,7 +5763,7 @@ dependencies = [ "nym-http-api-client", "nym-http-api-common", "nym-serde-helpers 0.1.0", - "reqwest 0.12.22", + "reqwest 0.12.24", "schemars 0.8.22", "serde", "serde_json", @@ -5755,14 +5778,14 @@ dependencies = [ [[package]] name = "nym-credential-proxy-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "async-trait", - "nym-credentials 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-credentials 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-http-api-client", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "reqwest 0.12.22", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "reqwest 0.12.24", "schemars 0.8.22", "serde", "serde_json", @@ -5775,15 +5798,20 @@ dependencies = [ name = "nym-credential-storage" version = "0.1.0" dependencies = [ + "anyhow", "async-trait", "bincode", "log", "nym-compact-ecash 0.1.0", "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", "nym-ecash-time 0.1.0", + "nym-test-utils", "serde", "sqlx", - "thiserror 2.0.12", + "sqlx-pool-guard", + "thiserror 2.0.17", "tokio", "zeroize", ] @@ -5801,7 +5829,7 @@ dependencies = [ "nym-credentials-interface 0.1.0", "nym-ecash-time 0.1.0", "nym-validator-client 0.1.0", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", ] @@ -5810,9 +5838,11 @@ dependencies = [ name = "nym-credential-verification" version = "0.1.0" dependencies = [ + "async-trait", "bs58", "cosmwasm-std", "cw-utils", + "dyn-clone", "futures", "nym-api-requests 0.1.0", "nym-credentials 0.1.0", @@ -5824,7 +5854,7 @@ dependencies = [ "nym-validator-client 0.1.0", "rand 0.8.5", "si-scale", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tracing", @@ -5843,12 +5873,13 @@ dependencies = [ "nym-crypto 0.4.0", "nym-ecash-contract-common 0.1.0", "nym-ecash-time 0.1.0", + "nym-http-api-client", "nym-network-defaults 0.1.0", "nym-serde-helpers 0.1.0", "nym-validator-client 0.1.0", "rand 0.8.5", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "zeroize", ] @@ -5856,22 +5887,23 @@ dependencies = [ [[package]] name = "nym-credentials" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "bincode", "bls12_381", "cosmrs", "log", - "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "serde", - "thiserror 2.0.12", + "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-http-api-client", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "serde", + "thiserror 2.0.17", "time", "zeroize", ] @@ -5886,8 +5918,9 @@ dependencies = [ "nym-network-defaults 0.1.0", "rand 0.8.5", "serde", - "strum 0.26.3", - "thiserror 2.0.12", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", "time", "utoipa", ] @@ -5895,16 +5928,17 @@ dependencies = [ [[package]] name = "nym-credentials-interface" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "bls12_381", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "rand 0.8.5", "serde", - "strum 0.26.3", - "thiserror 2.0.12", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", "time", "utoipa", ] @@ -5916,15 +5950,17 @@ dependencies = [ "aead", "aes", "aes-gcm-siv", + "base64 0.22.1", "blake3", "bs58", "cipher", "ctr", "digest 0.10.7", "ed25519-dalek", - "generic-array 0.14.7", + "generic-array 0.14.9", "hkdf", "hmac", + "jwt-simple", "nym-pemstore 0.3.0", "nym-sphinx-types 0.2.0", "rand 0.8.5", @@ -5933,7 +5969,7 @@ dependencies = [ "serde_bytes", "sha2 0.10.9", "subtle-encoding", - "thiserror 2.0.12", + "thiserror 2.0.17", "x25519-dalek", "zeroize", ] @@ -5941,20 +5977,21 @@ dependencies = [ [[package]] name = "nym-crypto" version = "0.4.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "aes", + "base64 0.22.1", "bs58", "cipher", "ctr", "ed25519-dalek", - "generic-array 0.14.7", - "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-sphinx-types 0.2.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "generic-array 0.14.9", + "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-sphinx-types 0.2.0 (git+https://github.com/nymtech/nym?branch=develop)", "serde", "serde_bytes", "subtle-encoding", - "thiserror 2.0.12", + "thiserror 2.0.17", "x25519-dalek", "zeroize", ] @@ -5978,7 +6015,7 @@ dependencies = [ "serde", "serde_derive", "sha2 0.10.9", - "thiserror 2.0.12", + "thiserror 2.0.17", "zeroize", ] @@ -5993,56 +6030,95 @@ dependencies = [ "cw-utils", "cw2", "nym-multisig-contract-common 0.1.0", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "nym-ecash-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "bs58", "cosmwasm-schema", "cosmwasm-std", "cw-controllers", "cw-utils", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "thiserror 2.0.12", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "thiserror 2.0.17", ] [[package]] -name = "nym-ecash-time" +name = "nym-ecash-signer-check" version = "0.1.0" dependencies = [ - "nym-compact-ecash 0.1.0", + "futures", + "nym-ecash-signer-check-types 0.1.0", + "nym-http-api-client", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "semver 1.0.27", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nym-ecash-signer-check-types" +version = "0.1.0" +dependencies = [ + "nym-coconut-dkg-common 0.1.0", + "nym-crypto 0.4.0", + "semver 1.0.27", + "serde", + "thiserror 2.0.17", "time", + "tracing", + "url", + "utoipa", +] + +[[package]] +name = "nym-ecash-signer-check-types" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +dependencies = [ + "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "semver 1.0.27", + "serde", + "thiserror 2.0.17", + "time", + "tracing", + "url", + "utoipa", ] [[package]] name = "nym-ecash-time" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" dependencies = [ - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-compact-ecash 0.1.0", "time", ] [[package]] -name = "nym-execute" +name = "nym-ecash-time" version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ - "quote", - "syn 1.0.109", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "time", ] [[package]] name = "nym-exit-policy" version = "0.1.0" dependencies = [ - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "utoipa", ] @@ -6050,11 +6126,11 @@ dependencies = [ [[package]] name = "nym-exit-policy" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "utoipa", ] @@ -6081,14 +6157,18 @@ version = "1.1.36" dependencies = [ "anyhow", "async-trait", + "bincode", "bip39", "bs58", "dashmap", "defguard_wireguard_rs", + "fastrand 2.3.0", "futures", - "ipnetwork", + "ipnetwork 0.20.0", + "mock_instant", "nym-api-requests 0.1.0", - "nym-authenticator", + "nym-authenticator-requests", + "nym-client-core", "nym-credential-verification", "nym-credentials 0.1.0", "nym-credentials-interface 0.1.0", @@ -6096,6 +6176,7 @@ dependencies = [ "nym-gateway-requests", "nym-gateway-stats-storage", "nym-gateway-storage", + "nym-id", "nym-ip-packet-router", "nym-mixnet-client", "nym-mixnode-common", @@ -6103,6 +6184,7 @@ dependencies = [ "nym-network-requester", "nym-node-metrics", "nym-sdk", + "nym-service-provider-requests-common", "nym-sphinx", "nym-statistics-common", "nym-task", @@ -6110,11 +6192,12 @@ dependencies = [ "nym-types", "nym-validator-client 0.1.0", "nym-wireguard", + "nym-wireguard-private-metadata-server", "nym-wireguard-types 0.1.0", "rand 0.8.5", + "serde", "sha2 0.10.9", - "sqlx", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -6148,7 +6231,7 @@ dependencies = [ "rand 0.8.5", "serde", "si-scale", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -6180,8 +6263,8 @@ dependencies = [ "nym-vpn-api-client", "rand 0.8.5", "serde", - "strum 0.26.3", - "thiserror 2.0.12", + "strum", + "thiserror 2.0.17", "tokio", "tracing", "url", @@ -6191,9 +6274,10 @@ dependencies = [ name = "nym-gateway-requests" version = "0.1.0" dependencies = [ + "anyhow", "bs58", "futures", - "generic-array 0.14.7", + "generic-array 0.14.9", "nym-compact-ecash 0.1.0", "nym-credentials 0.1.0", "nym-credentials-interface 0.1.0", @@ -6203,12 +6287,13 @@ dependencies = [ "nym-sphinx", "nym-statistics-common", "nym-task", + "nym-test-utils", "rand 0.8.5", "serde", "serde_json", - "strum 0.26.3", + "strum", "subtle 2.6.1", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tracing", @@ -6221,12 +6306,13 @@ dependencies = [ name = "nym-gateway-stats-storage" version = "0.1.0" dependencies = [ + "anyhow", "nym-node-metrics", "nym-sphinx", "nym-statistics-common", "sqlx", - "strum 0.26.3", - "thiserror 2.0.12", + "strum", + "thiserror 2.0.17", "time", "tokio", "tracing", @@ -6236,13 +6322,16 @@ dependencies = [ name = "nym-gateway-storage" version = "0.1.0" dependencies = [ + "anyhow", + "async-trait", "bincode", "defguard_wireguard_rs", + "dyn-clone", "nym-credentials-interface 0.1.0", "nym-gateway-requests", "nym-sphinx", "sqlx", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tracing", @@ -6259,7 +6348,7 @@ dependencies = [ "nym-ffi-shared", "nym-sdk", "nym-sphinx-anonymous-replies", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "uniffi", "uniffi_build", @@ -6279,7 +6368,7 @@ dependencies = [ [[package]] name = "nym-group-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "cosmwasm-schema", "cw-controllers", @@ -6295,28 +6384,48 @@ dependencies = [ "async-trait", "bincode", "bytes", + "cfg-if", "encoding_rs", "hickory-resolver", "http 1.3.1", + "inventory", + "itertools 0.14.0", "mime", "nym-bin-common 0.6.0", + "nym-http-api-client-macro", "nym-http-api-common", + "nym-network-defaults 0.1.0", "once_cell", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", - "thiserror 2.0.12", + "serde_plain", + "serde_yaml", + "thiserror 2.0.17", "tokio", "tracing", "url", "wasmtimer", ] +[[package]] +name = "nym-http-api-client-macro" +version = "0.1.0" +dependencies = [ + "nym-http-api-client", + "proc-macro-crate", + "proc-macro2", + "quote", + "reqwest 0.12.24", + "syn 2.0.106", + "uuid", +] + [[package]] name = "nym-http-api-common" version = "0.1.0" dependencies = [ - "axum 0.7.9", + "axum", "axum-client-ip", "bincode", "bytes", @@ -6324,6 +6433,7 @@ dependencies = [ "futures", "mime", "serde", + "serde_json", "serde_yaml", "subtle 2.6.1", "time", @@ -6339,7 +6449,7 @@ version = "0.1.0" dependencies = [ "nym-credential-storage", "nym-credentials 0.1.0", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tracing", "zeroize", @@ -6365,7 +6475,22 @@ version = "0.1.0" dependencies = [ "log", "rand 0.8.5", - "thiserror 2.0.12", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-ip-packet-client" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "futures", + "nym-ip-packet-requests", + "nym-sdk", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", ] [[package]] @@ -6380,7 +6505,7 @@ dependencies = [ "nym-sphinx", "rand 0.8.5", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-util", @@ -6418,10 +6543,10 @@ dependencies = [ "nym-wireguard", "nym-wireguard-types 0.1.0", "rand 0.8.5", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-tun", @@ -6437,7 +6562,7 @@ dependencies = [ "k256", "ledger-transport", "ledger-transport-hid", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -6456,8 +6581,11 @@ version = "0.1.0" dependencies = [ "dashmap", "futures", + "nym-crypto 0.4.0", + "nym-noise", "nym-sphinx", "nym-task", + "rand 0.8.5", "tokio", "tokio-stream", "tokio-util", @@ -6478,11 +6606,10 @@ dependencies = [ "nym-contracts-common", "rand_chacha 0.3.1", "schemars 0.8.22", - "semver 1.0.26", + "semver 1.0.27", "serde", - "serde-json-wasm", "serde_repr", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "ts-rs", "utoipa", @@ -6491,7 +6618,7 @@ dependencies = [ [[package]] name = "nym-mixnet-contract-common" version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "bs58", "cosmwasm-schema", @@ -6501,11 +6628,10 @@ dependencies = [ "humantime-serde", "nym-contracts-common", "schemars 0.8.22", - "semver 1.0.26", + "semver 1.0.27", "serde", - "serde-json-wasm", "serde_repr", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "utoipa", ] @@ -6530,7 +6656,7 @@ dependencies = [ "nym-task", "rand 0.8.5", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-util", @@ -6549,13 +6675,13 @@ dependencies = [ "cw4", "schemars 0.8.22", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "nym-multisig-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -6565,14 +6691,14 @@ dependencies = [ "cw4", "schemars 0.8.22", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "nym-network-defaults" version = "0.1.0" dependencies = [ - "cargo_metadata 0.18.1", + "cargo_metadata 0.19.2", "dotenvy", "log", "regex", @@ -6585,9 +6711,9 @@ dependencies = [ [[package]] name = "nym-network-defaults" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ - "cargo_metadata 0.18.1", + "cargo_metadata 0.19.2", "dotenvy", "log", "regex", @@ -6602,7 +6728,7 @@ name = "nym-network-monitor" version = "1.0.2" dependencies = [ "anyhow", - "axum 0.7.9", + "axum", "clap", "dashmap", "futures", @@ -6611,6 +6737,8 @@ dependencies = [ "nym-client-core", "nym-crypto 0.4.0", "nym-gateway-requests", + "nym-http-api-client", + "nym-mixnet-contract-common 0.6.0", "nym-network-defaults 0.1.0", "nym-sdk", "nym-sphinx", @@ -6620,7 +6748,7 @@ dependencies = [ "petgraph", "rand 0.8.5", "rand_chacha 0.3.1", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", "tokio", @@ -6632,7 +6760,7 @@ dependencies = [ [[package]] name = "nym-network-requester" -version = "1.1.58" +version = "1.1.65" dependencies = [ "addr", "anyhow", @@ -6642,7 +6770,7 @@ dependencies = [ "dirs", "futures", "humantime-serde", - "ipnetwork", + "ipnetwork 0.20.0", "log", "nym-async-file-watcher", "nym-bin-common 0.6.0", @@ -6666,13 +6794,13 @@ dependencies = [ "publicsuffix", "rand 0.8.5", "regex", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", "sqlx", "tap", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-tungstenite", @@ -6683,22 +6811,24 @@ dependencies = [ [[package]] name = "nym-node" -version = "1.13.0" +version = "1.19.0" dependencies = [ "anyhow", "arc-swap", "arrayref", "async-trait", - "axum 0.7.9", + "axum", "bip39", "blake2 0.8.1", "bloomfilter", "bs58", - "cargo_metadata 0.18.1", + "cargo_metadata 0.19.2", "celes", - "chacha 0.4.0", + "cfg-if", + "chacha", "clap", "colored", + "console-subscriber", "criterion", "csv", "cupid", @@ -6706,10 +6836,9 @@ dependencies = [ "hkdf", "human-repr", "humantime-serde", - "indicatif 0.17.11", - "ipnetwork", + "indicatif", + "ipnetwork 0.20.0", "lioness", - "nym-authenticator", "nym-bin-common 0.6.0", "nym-client-core-config-types", "nym-config 0.1.0", @@ -6724,6 +6853,8 @@ dependencies = [ "nym-network-requester", "nym-node-metrics", "nym-node-requests 0.1.0", + "nym-noise", + "nym-noise-keys 0.1.0", "nym-nonexhaustive-delayqueue", "nym-pemstore 0.3.0", "nym-sphinx-acknowledgements", @@ -6742,13 +6873,15 @@ dependencies = [ "nym-wireguard", "nym-wireguard-types 0.1.0", "rand 0.8.5", + "rand_chacha 0.3.1", "serde", "serde_json", "sha2 0.10.9", "sysinfo", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", + "tokio-stream", "tokio-util", "toml 0.8.23", "tower-http 0.5.2", @@ -6769,7 +6902,7 @@ dependencies = [ "futures", "nym-metrics", "nym-statistics-common", - "strum 0.26.3", + "strum", "time", "tokio", "tracing", @@ -6787,13 +6920,15 @@ dependencies = [ "nym-crypto 0.4.0", "nym-exit-policy 0.1.0", "nym-http-api-client", + "nym-noise-keys 0.1.0", "nym-wireguard-types 0.1.0", "rand_chacha 0.3.1", "schemars 0.8.22", "serde", "serde_json", - "strum 0.26.3", - "thiserror 2.0.12", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", "time", "tokio", "utoipa", @@ -6802,30 +6937,33 @@ dependencies = [ [[package]] name = "nym-node-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "celes", "humantime", "humantime-serde", - "nym-bin-common 0.6.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-exit-policy 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-wireguard-types 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-bin-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-exit-policy 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-noise-keys 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-wireguard-types 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "schemars 0.8.22", "serde", "serde_json", - "strum 0.26.3", - "thiserror 2.0.12", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", "time", "utoipa", ] [[package]] name = "nym-node-status-agent" -version = "1.0.0-rc.2" +version = "1.0.7" dependencies = [ "anyhow", "clap", + "futures", "nym-bin-common 0.6.0", "nym-crypto 0.4.0", "nym-node-status-client", @@ -6838,22 +6976,27 @@ dependencies = [ [[package]] name = "nym-node-status-api" -version = "2.3.2" +version = "4.0.5" dependencies = [ "ammonia", "anyhow", - "axum 0.7.9", + "axum", + "axum-test", "bip39", - "chrono", + "bs58", + "celes", "clap", "cosmwasm-std", - "envy", "futures-util", + "humantime", "itertools 0.14.0", "moka", "nym-bin-common 0.6.0", "nym-contracts-common", + "nym-credential-proxy-lib", + "nym-credentials 0.1.0", "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", "nym-http-api-client", "nym-http-api-common", "nym-mixnet-contract-common 0.6.0", @@ -6868,16 +7011,18 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "regex", - "reqwest 0.12.22", + "reqwest 0.12.24", + "semver 1.0.27", "serde", "serde_json", "serde_json_path", "sqlx", - "strum 0.26.3", - "strum_macros 0.26.4", - "thiserror 2.0.12", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", "time", "tokio", + "tokio-stream", "tokio-util", "tower-http 0.5.2", "tracing", @@ -6886,20 +7031,22 @@ dependencies = [ "utoipa", "utoipa-swagger-ui", "utoipauto", + "zeroize", ] [[package]] name = "nym-node-status-client" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", "bincode", - "chrono", + "bs58", + "nym-credentials 0.1.0", "nym-crypto 0.4.0", - "nym-http-api-client", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", + "time", "tracing", ] @@ -6918,7 +7065,7 @@ dependencies = [ "rand_chacha 0.3.1", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "wasm-utils", ] @@ -6933,7 +7080,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tsify", "wasm-bindgen", @@ -6943,6 +7090,50 @@ dependencies = [ "wasmtimer", ] +[[package]] +name = "nym-noise" +version = "0.1.0" +dependencies = [ + "anyhow", + "arc-swap", + "bytes", + "futures", + "nym-crypto 0.4.0", + "nym-noise-keys 0.1.0", + "nym-test-utils", + "pin-project", + "rand_chacha 0.3.1", + "sha2 0.10.9", + "snow", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-noise-keys" +version = "0.1.0" +dependencies = [ + "nym-crypto 0.4.0", + "schemars 0.8.22", + "serde", + "utoipa", +] + +[[package]] +name = "nym-noise-keys" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +dependencies = [ + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "schemars 0.8.22", + "serde", + "utoipa", +] + [[package]] name = "nym-nonexhaustive-delayqueue" version = "0.1.0" @@ -6971,8 +7162,8 @@ dependencies = [ [[package]] name = "nym-offline-monitor" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" dependencies = [ "async-trait", "debounced", @@ -6982,7 +7173,7 @@ dependencies = [ "nym-common", "nym-routing", "nym-windows", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -6994,7 +7185,7 @@ name = "nym-ordered-buffer" version = "0.1.0" dependencies = [ "log", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7011,7 +7202,7 @@ dependencies = [ "rand 0.8.5", "rayon", "sphinx-packet", - "thiserror 2.0.12", + "thiserror 2.0.17", "x25519-dalek", "zeroize", ] @@ -7022,39 +7213,111 @@ version = "0.3.0" dependencies = [ "pem", "tracing", + "zeroize", ] [[package]] name = "nym-pemstore" version = "0.3.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "pem", "tracing", + "zeroize", +] + +[[package]] +name = "nym-performance-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "nym-contracts-common", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-performance-contract-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "nym-contracts-common", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-pool-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", + "time", +] + +[[package]] +name = "nym-registration-client" +version = "0.1.0" +dependencies = [ + "nym-authenticator-client", + "nym-bandwidth-controller", + "nym-credential-storage", + "nym-credentials-interface 0.1.0", + "nym-ip-packet-client", + "nym-registration-common", + "nym-sdk", + "nym-validator-client 0.1.0", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-registration-common" +version = "0.1.0" +dependencies = [ + "nym-authenticator-requests", + "nym-crypto 0.4.0", + "nym-ip-packet-requests", + "nym-sphinx", + "tokio-util", ] [[package]] name = "nym-routing" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "futures", - "ipnetwork", + "ipnetwork 0.21.1", "libc", - "netlink-packet-core", - "netlink-packet-route 0.24.0", + "netlink-packet-core 0.8.1", + "netlink-packet-route 0.25.1", "netlink-sys", "nix 0.30.1", "nym-common", "nym-windows", "rtnetlink", "system-configuration 0.6.1", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", "widestring", - "windows 0.59.0", + "windows", ] [[package]] @@ -7087,6 +7350,7 @@ dependencies = [ "nym-crypto 0.4.0", "nym-gateway-directory", "nym-gateway-requests", + "nym-http-api-client", "nym-ip-packet-requests", "nym-network-defaults 0.1.0", "nym-ordered-buffer", @@ -7103,11 +7367,12 @@ dependencies = [ "parking_lot", "pnet_packet", "rand 0.8.5", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "tap", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", + "time", "tokio", "tokio-stream", "tokio-util", @@ -7133,7 +7398,7 @@ dependencies = [ [[package]] name = "nym-serde-helpers" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "base64 0.22.1", "bs58", @@ -7148,7 +7413,7 @@ version = "0.1.0" dependencies = [ "bincode", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7164,13 +7429,33 @@ dependencies = [ "nym-sphinx-anonymous-replies", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", + "tokio", +] + +[[package]] +name = "nym-signers-monitor" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "humantime", + "itertools 0.14.0", + "nym-bin-common 0.6.0", + "nym-ecash-signer-check", + "nym-network-defaults 0.1.0", + "nym-task", + "nym-validator-client 0.1.0", + "time", "tokio", + "tracing", + "url", + "zulip-client", ] [[package]] name = "nym-socks5-client" -version = "1.1.57" +version = "1.1.64" dependencies = [ "bs58", "clap", @@ -7194,7 +7479,7 @@ dependencies = [ "serde", "serde_json", "tap", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "url", @@ -7224,11 +7509,11 @@ dependencies = [ "nym-validator-client 0.1.0", "pin-project", "rand 0.8.5", - "reqwest 0.12.22", + "reqwest 0.12.24", "schemars 0.8.22", "serde", "tap", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-util", "url", @@ -7261,7 +7546,7 @@ dependencies = [ "serde", "serde_json", "tap", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7288,7 +7573,7 @@ dependencies = [ "rand_chacha 0.3.1", "rand_distr", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-util", "tracing", @@ -7298,7 +7583,7 @@ dependencies = [ name = "nym-sphinx-acknowledgements" version = "0.1.0" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "nym-crypto 0.4.0", "nym-pemstore 0.3.0", "nym-sphinx-addressing", @@ -7308,7 +7593,7 @@ dependencies = [ "nym-topology", "rand 0.8.5", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "zeroize", ] @@ -7316,11 +7601,13 @@ dependencies = [ name = "nym-sphinx-addressing" version = "0.1.0" dependencies = [ + "bincode", "nym-crypto 0.4.0", "nym-sphinx-types 0.2.0", "rand 0.8.5", "serde", - "thiserror 2.0.12", + "serde_json", + "thiserror 2.0.17", ] [[package]] @@ -7337,7 +7624,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "wasm-bindgen", ] @@ -7355,7 +7642,7 @@ dependencies = [ "nym-sphinx-types 0.2.0", "rand 0.8.5", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "utoipa", ] @@ -7373,19 +7660,19 @@ dependencies = [ "nym-sphinx-types 0.2.0", "nym-topology", "rand 0.8.5", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "nym-sphinx-forwarding" version = "0.1.0" dependencies = [ - "nym-outfox", "nym-sphinx-addressing", + "nym-sphinx-anonymous-replies", "nym-sphinx-params", "nym-sphinx-types 0.2.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7398,7 +7685,7 @@ dependencies = [ "nym-sphinx-forwarding", "nym-sphinx-params", "nym-sphinx-types 0.2.0", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-util", "tracing", @@ -7411,7 +7698,7 @@ dependencies = [ "nym-crypto 0.4.0", "nym-sphinx-types 0.2.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7420,7 +7707,7 @@ version = "0.1.0" dependencies = [ "nym-sphinx-addressing", "nym-sphinx-types 0.2.0", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7429,23 +7716,24 @@ version = "0.2.0" dependencies = [ "nym-outfox", "sphinx-packet", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "nym-sphinx-types" version = "0.2.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "nym-statistics-api" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", - "axum 0.7.9", + "axum", + "axum-client-ip", "axum-extra", "celes", "clap", @@ -7485,9 +7773,10 @@ dependencies = [ "serde_json", "sha2 0.10.9", "si-scale", - "strum 0.26.3", + "strum", + "strum_macros 0.27.2", "sysinfo", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "utoipa", @@ -7500,12 +7789,12 @@ version = "0.1.0" dependencies = [ "aes-gcm", "argon2", - "generic-array 0.14.7", + "generic-array 0.14.9", "getrandom 0.2.16", "rand 0.8.5", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "zeroize", ] @@ -7513,11 +7802,13 @@ dependencies = [ name = "nym-task" version = "0.1.0" dependencies = [ + "anyhow", "cfg-if", "futures", "log", + "nym-test-utils", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-util", "tracing", @@ -7526,6 +7817,16 @@ dependencies = [ "wasmtimer", ] +[[package]] +name = "nym-test-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "futures", + "rand_chacha 0.3.1", + "tokio", +] + [[package]] name = "nym-ticketbooks-merkle" version = "0.1.0" @@ -7546,10 +7847,10 @@ dependencies = [ [[package]] name = "nym-ticketbooks-merkle" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "rs_merkle", "schemars 0.8.22", "serde", @@ -7564,17 +7865,16 @@ version = "0.1.0" dependencies = [ "async-trait", "nym-api-requests 0.1.0", - "nym-config 0.1.0", "nym-crypto 0.4.0", "nym-mixnet-contract-common 0.6.0", "nym-sphinx-addressing", - "nym-sphinx-routing", "nym-sphinx-types 0.2.0", "rand 0.8.5", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", + "time", "tracing", "tsify", "wasm-bindgen", @@ -7588,7 +7888,7 @@ dependencies = [ "etherparse", "log", "nym-wireguard-types 0.1.0", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-tun", ] @@ -7609,20 +7909,37 @@ dependencies = [ "nym-mixnet-contract-common 0.6.0", "nym-validator-client 0.1.0", "nym-vesting-contract-common 0.7.0", - "reqwest 0.12.22", + "reqwest 0.12.24", "schemars 0.8.22", "serde", "serde_json", "sha2 0.10.9", - "strum 0.26.3", + "strum", + "strum_macros 0.27.2", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "ts-rs", "url", "utoipa", "x25519-dalek", ] +[[package]] +name = "nym-upgrade-mode-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "jwt-simple", + "nym-crypto 0.4.0", + "nym-http-api-client", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tracing", +] + [[package]] name = "nym-validator-client" version = "0.1.0" @@ -7654,15 +7971,16 @@ dependencies = [ "nym-mixnet-contract-common 0.6.0", "nym-multisig-contract-common 0.1.0", "nym-network-defaults 0.1.0", + "nym-performance-contract-common 0.1.0", "nym-serde-helpers 0.1.0", "nym-vesting-contract-common 0.7.0", - "prost 0.13.5", - "reqwest 0.12.22", + "prost", + "reqwest 0.12.24", "serde", "serde_json", "sha2 0.10.9", "tendermint-rpc", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tracing", @@ -7675,7 +7993,7 @@ dependencies = [ [[package]] name = "nym-validator-client" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "async-trait", "base64 0.22.1", @@ -7693,26 +8011,27 @@ dependencies = [ "flate2", "futures", "itertools 0.14.0", - "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-contracts-common", - "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-group-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-group-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-vesting-contract-common 0.7.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "prost 0.13.5", - "reqwest 0.12.22", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-performance-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-vesting-contract-common 0.7.0 (git+https://github.com/nymtech/nym?branch=develop)", + "prost", + "reqwest 0.12.24", "serde", "serde_json", "sha2 0.10.9", "tendermint-rpc", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tracing", @@ -7741,6 +8060,7 @@ dependencies = [ "nym-credentials-interface 0.1.0", "nym-crypto 0.4.0", "nym-ecash-time 0.1.0", + "nym-http-api-client", "nym-network-defaults 0.1.0", "nym-pemstore 0.3.0", "nym-serde-helpers 0.1.0", @@ -7755,7 +8075,7 @@ dependencies = [ "serde_with", "sha2 0.10.9", "sqlx", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tracing", @@ -7770,11 +8090,13 @@ dependencies = [ "bytes", "futures", "humantime", + "nym-api-requests 0.1.0", "nym-crypto 0.4.0", + "nym-http-api-client", "nym-task", "nym-validator-client 0.1.0", "rand 0.8.5", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-util", @@ -7792,27 +8114,27 @@ dependencies = [ "nym-contracts-common", "nym-mixnet-contract-common 0.6.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "ts-rs", ] [[package]] name = "nym-vesting-contract-common" version = "0.7.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "cosmwasm-schema", "cosmwasm-std", "nym-contracts-common", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "nym-vpn-api-client" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" dependencies = [ "backon", "base64-url", @@ -7820,22 +8142,24 @@ dependencies = [ "bs58", "chrono", "itertools 0.13.0", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-contracts-common", - "nym-credential-proxy-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-credential-proxy-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-http-api-client", - "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "serde", "serde_json", "sha2 0.10.9", - "strum 0.26.3", - "thiserror 2.0.12", + "strum", + "strum_macros 0.26.4", + "thiserror 2.0.17", "time", - "tokio", "tracing", "url", + "zeroize", ] [[package]] @@ -7855,7 +8179,7 @@ dependencies = [ "serde", "serde-wasm-bindgen 0.6.5", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tsify", "wasm-bindgen", @@ -7878,44 +8202,49 @@ dependencies = [ "nym-vesting-contract-common 0.7.0", "serde", "serde_json", - "strum 0.23.0", + "strum", + "strum_macros 0.27.2", "ts-rs", ] [[package]] name = "nym-windows" -version = "1.11.0" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=c7e38aae038748f7d577a8b1ae02931fff97e868#c7e38aae038748f7d577a8b1ae02931fff97e868" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "futures", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", - "windows 0.59.0", + "windows", ] [[package]] name = "nym-wireguard" version = "0.1.0" dependencies = [ + "async-trait", "base64 0.22.1", "bincode", "chrono", "dashmap", "defguard_wireguard_rs", + "dyn-clone", "futures", "ip_network", "log", "nym-authenticator-requests", "nym-credential-verification", + "nym-credentials-interface 0.1.0", "nym-crypto 0.4.0", + "nym-gateway-requests", "nym-gateway-storage", "nym-network-defaults 0.1.0", "nym-node-metrics", "nym-task", "nym-wireguard-types 0.1.0", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -7923,6 +8252,68 @@ dependencies = [ "x25519-dalek", ] +[[package]] +name = "nym-wireguard-private-metadata-client" +version = "1.0.0" +dependencies = [ + "async-trait", + "nym-http-api-client", + "nym-wireguard-private-metadata-shared", + "tracing", +] + +[[package]] +name = "nym-wireguard-private-metadata-server" +version = "1.0.0" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "futures", + "nym-credential-verification", + "nym-credentials-interface 0.1.0", + "nym-http-api-common", + "nym-wireguard", + "nym-wireguard-private-metadata-shared", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "utoipa", + "utoipa-swagger-ui", +] + +[[package]] +name = "nym-wireguard-private-metadata-shared" +version = "1.0.0" +dependencies = [ + "axum", + "bincode", + "nym-credentials-interface 0.1.0", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", + "utoipa", +] + +[[package]] +name = "nym-wireguard-private-metadata-tests" +version = "1.0.0" +dependencies = [ + "async-trait", + "axum", + "nym-credential-verification", + "nym-credentials-interface 0.1.0", + "nym-http-api-client", + "nym-http-api-common", + "nym-wireguard", + "nym-wireguard-private-metadata-client", + "nym-wireguard-private-metadata-server", + "nym-wireguard-private-metadata-shared", + "tokio", + "tower-http 0.5.2", + "utoipa", +] + [[package]] name = "nym-wireguard-types" version = "0.1.0" @@ -7934,27 +8325,27 @@ dependencies = [ "nym-network-defaults 0.1.0", "rand 0.8.5", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "x25519-dalek", ] [[package]] name = "nym-wireguard-types" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie#aeb3c775a07109f0e6c0fdfa02ff5c7a8cc8fb84" +source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" dependencies = [ "base64 0.22.1", "log", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=am/backport-close-sqlite-pool-brie)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "x25519-dalek", ] [[package]] name = "nymvisor" -version = "0.1.22" +version = "0.1.29" dependencies = [ "anyhow", "bytes", @@ -7970,12 +8361,12 @@ dependencies = [ "nym-bin-common 0.6.0", "nym-config 0.1.0", "nym-task", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", "serde_json", "sha2 0.10.9", "tar", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tracing", @@ -7988,7 +8379,7 @@ version = "0.1.14" dependencies = [ "anyhow", "async-trait", - "axum 0.7.9", + "axum", "chrono", "clap", "nym-bin-common 0.6.0", @@ -7997,11 +8388,11 @@ dependencies = [ "nym-task", "nym-validator-client 0.1.0", "nyxd-scraper", - "reqwest 0.12.22", + "reqwest 0.12.24", "schemars 0.8.22", "serde", "sqlx", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-util", @@ -8017,6 +8408,7 @@ dependencies = [ name = "nyxd-scraper" version = "0.1.0" dependencies = [ + "anyhow", "async-trait", "const_format", "cosmrs", @@ -8028,7 +8420,7 @@ dependencies = [ "sqlx", "tendermint", "tendermint-rpc", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -8039,20 +8431,20 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" dependencies = [ "objc2-encode", ] [[package]] name = "objc2-core-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "dispatch2", "objc2", ] @@ -8065,11 +8457,11 @@ checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] name = "objc2-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2", "libc", "objc2", @@ -8077,12 +8469,13 @@ dependencies = [ ] [[package]] -name = "object" -version = "0.36.7" +name = "objc2-io-kit" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" dependencies = [ - "memchr", + "libc", + "objc2-core-foundation", ] [[package]] @@ -8127,9 +8520,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", @@ -8260,6 +8653,18 @@ dependencies = [ "sha2 0.10.9", ] +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + [[package]] name = "pairing" version = "0.23.0" @@ -8277,9 +8682,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -8287,15 +8692,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -8364,26 +8769,25 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.12", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" dependencies = [ "pest", "pest_generator", @@ -8391,22 +8795,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" dependencies = [ "pest", "sha2 0.10.9", @@ -8419,7 +8823,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.10.0", + "indexmap 2.11.4", ] [[package]] @@ -8429,7 +8833,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_macros", - "phf_shared", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_shared 0.13.1", + "serde", ] [[package]] @@ -8439,7 +8853,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ "phf_generator", - "phf_shared", + "phf_shared 0.11.3", ] [[package]] @@ -8448,7 +8862,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared", + "phf_shared 0.11.3", "rand 0.8.5", ] @@ -8459,10 +8873,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ "phf_generator", - "phf_shared", + "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8474,6 +8888,15 @@ dependencies = [ "siphasher 1.0.1", ] +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.1", +] + [[package]] name = "pin-project" version = "1.1.10" @@ -8491,7 +8914,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8585,7 +9008,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8665,9 +9088,9 @@ dependencies = [ [[package]] name = "postgres-protocol" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54" +checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" dependencies = [ "base64 0.22.1", "byteorder", @@ -8676,16 +9099,16 @@ dependencies = [ "hmac", "md-5", "memchr", - "rand 0.9.1", + "rand 0.9.2", "sha2 0.10.9", "stringprep", ] [[package]] name = "postgres-types" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" +checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" dependencies = [ "bytes", "fallible-iterator", @@ -8694,9 +9117,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -8741,6 +9164,15 @@ dependencies = [ "elliptic-curve", ] +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -8760,18 +9192,27 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] +[[package]] +name = "proc_pidinfo" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" +dependencies = [ + "libc", +] + [[package]] name = "prometheus" version = "0.14.0" @@ -8784,17 +9225,7 @@ dependencies = [ "memchr", "parking_lot", "protobuf", - "thiserror 2.0.12", -] - -[[package]] -name = "prost" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" -dependencies = [ - "bytes", - "prost-derive 0.11.9", + "thiserror 2.0.17", ] [[package]] @@ -8804,20 +9235,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ "bytes", - "prost-derive 0.13.5", -] - -[[package]] -name = "prost-derive" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" -dependencies = [ - "anyhow", - "itertools 0.10.5", - "proc-macro2", - "quote", - "syn 1.0.109", + "prost-derive", ] [[package]] @@ -8830,16 +9248,16 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "prost-types" -version = "0.11.9" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" dependencies = [ - "prost 0.11.9", + "prost", ] [[package]] @@ -8864,9 +9282,9 @@ dependencies = [ [[package]] name = "psl" -version = "2.1.124" +version = "2.1.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "281f96193296bf4916d7a112df4cc578aaf7a4d71f1570667779bb07364ed837" +checksum = "1c569a9577fe28cc82ac9969ec31778511f1912b3468fe236c24393bebf8a571" dependencies = [ "psl-types", ] @@ -8895,9 +9313,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -8905,9 +9323,9 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.29", - "socket2", - "thiserror 2.0.12", + "rustls 0.23.32", + "socket2 0.6.1", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -8915,20 +9333,20 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring", "rustc-hash", - "rustls 0.23.29", + "rustls 0.23.32", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -8936,23 +9354,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.6.1", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -8982,9 +9400,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -9025,7 +9443,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -9040,9 +9458,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -9050,9 +9468,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -9060,11 +9478,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -9080,67 +9498,52 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" @@ -9153,7 +9556,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "hyper 0.14.32", @@ -9185,9 +9588,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.22" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "async-compression", "base64 0.22.1", @@ -9197,7 +9600,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls 0.27.7", "hyper-util", "js-sys", @@ -9205,14 +9608,14 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.29", + "rustls 0.23.32", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 1.0.2", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tokio-util", "tower 0.5.2", "tower-http 0.6.6", @@ -9222,7 +9625,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] @@ -9231,14 +9634,14 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" dependencies = [ - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "rfc6979" @@ -9318,6 +9721,7 @@ dependencies = [ "pkcs1", "pkcs8", "rand_core 0.6.4", + "sha2 0.10.9", "signature", "spki", "subtle 2.6.1", @@ -9326,15 +9730,14 @@ dependencies = [ [[package]] name = "rtnetlink" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe0a03f6b9b483c67d4b328fc5d66c8db0b6aa274e0fa2def71b5e442a69acf" +checksum = "08fd15aa4c64c34d0b3178e45ec6dad313a9f02b193376d501668a7950264bb7" dependencies = [ "futures", "log", - "netlink-packet-core", - "netlink-packet-route 0.24.0", - "netlink-packet-utils", + "netlink-packet-core 0.8.1", + "netlink-packet-route 0.25.1", "netlink-proto", "netlink-sys", "nix 0.29.0", @@ -9362,7 +9765,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.104", + "syn 2.0.106", "walkdir", ] @@ -9392,12 +9795,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "rustc-demangle" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" - [[package]] name = "rustc-hash" version = "2.1.1" @@ -9419,33 +9816,20 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.26", -] - -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.9.1", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", + "semver 1.0.27", ] [[package]] name = "rustix" -version = "1.0.7" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "linux-raw-sys", + "windows-sys 0.61.2", ] [[package]] @@ -9476,15 +9860,15 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.29" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.7", "subtle 2.6.1", "zeroize", ] @@ -9565,9 +9949,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "ring", "rustls-pki-types", @@ -9576,9 +9960,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -9597,11 +9981,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -9651,15 +10035,9 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.29.1", - "syn 2.0.104", + "syn 2.0.106", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -9683,7 +10061,7 @@ checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9704,7 +10082,7 @@ checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9715,7 +10093,7 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array 0.14.7", + "generic-array 0.14.9", "pkcs8", "serdect 0.2.0", "subtle 2.6.1", @@ -9746,7 +10124,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation", "core-foundation-sys", "libc", @@ -9755,9 +10133,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -9774,11 +10152,12 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -9789,10 +10168,11 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -9829,22 +10209,32 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.17" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9855,7 +10245,7 @@ checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9866,19 +10256,20 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -9894,7 +10285,7 @@ dependencies = [ "serde_json", "serde_json_path_core", "serde_json_path_macros", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -9906,7 +10297,7 @@ dependencies = [ "inventory", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -9928,17 +10319,27 @@ checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", +] + +[[package]] +name = "serde_plain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" +dependencies = [ + "serde", ] [[package]] @@ -9949,7 +10350,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9975,19 +10376,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.10.0", + "indexmap 2.11.4", "schemars 0.9.0", "schemars 1.0.4", - "serde", - "serde_derive", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -9995,14 +10395,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10011,7 +10411,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "itoa", "ryu", "serde", @@ -10117,9 +10517,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -10154,9 +10554,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "sluice" @@ -10174,6 +10574,9 @@ name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] [[package]] name = "smawk" @@ -10190,15 +10593,15 @@ dependencies = [ "nym-bin-common 0.6.0", "nym-ip-packet-requests", "nym-sdk", - "reqwest 0.12.22", - "rustls 0.23.29", + "reqwest 0.12.24", + "rustls 0.23.32", "serde_json", "smoltcp", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", "tracing-subscriber", - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] @@ -10237,6 +10640,22 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2 0.10.6", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "rustc_version 0.4.1", + "sha2 0.10.9", + "subtle 2.6.1", +] + [[package]] name = "socket2" version = "0.5.10" @@ -10247,6 +10666,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "sphinx-packet" version = "0.6.0" @@ -10258,7 +10687,7 @@ dependencies = [ "blake2 0.8.1", "bs58", "byteorder", - "chacha 0.3.0", + "chacha", "ctr", "curve25519-dalek", "digest 0.10.7", @@ -10292,21 +10721,11 @@ dependencies = [ "der", ] -[[package]] -name = "sqlformat" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" -dependencies = [ - "nom", - "unicode_categories", -] - [[package]] name = "sqlx" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" dependencies = [ "sqlx-core", "sqlx-macros", @@ -10317,70 +10736,64 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" dependencies = [ - "ahash", - "atoi", - "byteorder", + "base64 0.22.1", "bytes", "chrono", "crc", "crossbeam-queue", "either", - "event-listener 2.5.3", - "futures-channel", + "event-listener 5.4.1", "futures-core", "futures-intrusive", "futures-io", "futures-util", + "hashbrown 0.15.5", "hashlink", - "hex", - "indexmap 2.10.0", + "indexmap 2.11.4", "log", "memchr", "once_cell", - "paste", "percent-encoding", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls 0.23.32", "serde", "serde_json", "sha2 0.10.9", "smallvec", - "sqlformat", - "thiserror 1.0.69", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", "tracing", "url", - "webpki-roots 0.25.4", + "webpki-roots 0.26.11", ] [[package]] name = "sqlx-macros" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn 1.0.109", + "syn 2.0.106", ] [[package]] name = "sqlx-macros-core" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" dependencies = [ "dotenvy", "either", - "heck 0.4.1", + "heck 0.5.0", "hex", "once_cell", "proc-macro2", @@ -10392,21 +10805,20 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 1.0.109", - "tempfile", + "syn 2.0.106", "tokio", "url", ] [[package]] name = "sqlx-mysql" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", - "base64 0.21.7", - "bitflags 2.9.1", + "base64 0.22.1", + "bitflags 2.9.4", "byteorder", "bytes", "chrono", @@ -10418,7 +10830,7 @@ dependencies = [ "futures-core", "futures-io", "futures-util", - "generic-array 0.14.7", + "generic-array 0.14.9", "hex", "hkdf", "hmac", @@ -10436,21 +10848,34 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 1.0.69", + "thiserror 2.0.17", "time", "tracing", "whoami", ] +[[package]] +name = "sqlx-pool-guard" +version = "0.1.0" +dependencies = [ + "proc_pidinfo", + "sqlx", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", + "windows", +] + [[package]] name = "sqlx-postgres" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", - "base64 0.21.7", - "bitflags 2.9.1", + "base64 0.22.1", + "bitflags 2.9.4", "byteorder", "chrono", "crc", @@ -10458,7 +10883,6 @@ dependencies = [ "etcetera", "futures-channel", "futures-core", - "futures-io", "futures-util", "hex", "hkdf", @@ -10476,7 +10900,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 1.0.69", + "thiserror 2.0.17", "time", "tracing", "whoami", @@ -10484,9 +10908,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" dependencies = [ "atoi", "chrono", @@ -10500,11 +10924,12 @@ dependencies = [ "log", "percent-encoding", "serde", + "serde_urlencoded", "sqlx-core", + "thiserror 2.0.17", "time", "tracing", "url", - "urlencoding", ] [[package]] @@ -10519,9 +10944,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -10537,7 +10962,7 @@ checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", "parking_lot", - "phf_shared", + "phf_shared 0.11.3", "precomputed-hash", "serde", ] @@ -10549,7 +10974,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" dependencies = [ "phf_generator", - "phf_shared", + "phf_shared 0.11.3", "proc-macro2", "quote", ] @@ -10573,46 +10998,36 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb" -dependencies = [ - "strum_macros 0.23.1", -] - -[[package]] -name = "strum" -version = "0.26.3" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "strum_macros 0.26.4", + "strum_macros 0.27.2", ] [[package]] name = "strum_macros" -version = "0.23.1" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.3.3", + "heck 0.5.0", "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn 2.0.106", ] [[package]] name = "strum_macros" -version = "0.26.4" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "rustversion", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10642,6 +11057,19 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" +[[package]] +name = "superboring" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "515cce34a781d7250b8a65706e0f2a5b99236ea605cb235d4baed6685820478f" +dependencies = [ + "getrandom 0.2.16", + "hmac-sha256", + "hmac-sha512", + "rand 0.8.5", + "rsa", +] + [[package]] name = "syn" version = "1.0.109" @@ -10655,9 +11083,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -10687,21 +11115,21 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "sysinfo" -version = "0.33.1" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" +checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" dependencies = [ - "core-foundation-sys", "libc", "memchr", "ntapi", - "rayon", - "windows 0.57.0", + "objc2-core-foundation", + "objc2-io-kit", + "windows", ] [[package]] @@ -10721,7 +11149,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation", "system-configuration-sys 0.6.0", ] @@ -10771,15 +11199,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.20.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand 2.3.0", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", - "rustix 1.0.7", - "windows-sys 0.59.0", + "rustix", + "windows-sys 0.61.2", ] [[package]] @@ -10797,7 +11225,7 @@ dependencies = [ "k256", "num-traits", "once_cell", - "prost 0.13.5", + "prost", "ripemd", "serde", "serde_bytes", @@ -10834,7 +11262,7 @@ checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" dependencies = [ "bytes", "flex-error", - "prost 0.13.5", + "prost", "serde", "serde_bytes", "subtle-encoding", @@ -10857,7 +11285,7 @@ dependencies = [ "pin-project", "rand 0.8.5", "reqwest 0.11.27", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_bytes", "serde_json", @@ -10895,6 +11323,19 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "test-with" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f370b9efbfbbc5f057cbce9888373eaeb146a3095bb8cc869b199c94d15559" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "regex", + "syn 2.0.106", +] + [[package]] name = "testnet-manager" version = "0.1.0" @@ -10903,10 +11344,11 @@ dependencies = [ "bip39", "bs58", "clap", - "console 0.15.11", + "console", "cw-utils", "dkg-bypass-contract", - "indicatif 0.17.11", + "humantime", + "indicatif", "nym-bin-common 0.6.0", "nym-coconut-dkg-common 0.1.0", "nym-compact-ecash 0.1.0", @@ -10915,9 +11357,11 @@ dependencies = [ "nym-crypto 0.4.0", "nym-ecash-contract-common 0.1.0", "nym-group-contract-common 0.1.0", + "nym-http-api-client", "nym-mixnet-contract-common 0.6.0", "nym-multisig-contract-common 0.1.0", "nym-pemstore 0.3.0", + "nym-performance-contract-common 0.1.0", "nym-validator-client 0.1.0", "nym-vesting-contract-common 0.7.0", "rand 0.8.5", @@ -10925,7 +11369,7 @@ dependencies = [ "serde_json", "sqlx", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "toml 0.8.23", @@ -10954,11 +11398,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.17", ] [[package]] @@ -10969,18 +11413,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11016,9 +11460,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -11034,15 +11478,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -11070,9 +11514,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -11085,51 +11529,38 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.46.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio 1.0.4", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2", + "socket2 0.6.1", "tokio-macros", "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "tokio-postgres" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0" +checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" dependencies = [ "async-trait", "byteorder", @@ -11140,12 +11571,12 @@ dependencies = [ "log", "parking_lot", "percent-encoding", - "phf", + "phf 0.13.1", "pin-project-lite", "postgres-protocol", "postgres-types", - "rand 0.9.1", - "socket2", + "rand 0.9.2", + "socket2 0.6.1", "tokio", "tokio-util", "whoami", @@ -11174,11 +11605,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.29", + "rustls 0.23.32", "tokio", ] @@ -11236,15 +11667,14 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", "futures-sink", "futures-util", - "hashbrown 0.15.4", "pin-project-lite", "slab", "tokio", @@ -11267,8 +11697,8 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", - "toml_edit", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] @@ -11280,20 +11710,50 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.11.4", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" @@ -11302,24 +11762,26 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tonic" -version = "0.9.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ + "async-stream", "async-trait", - "axum 0.6.20", - "base64 0.21.7", + "axum", + "base64 0.22.1", "bytes", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", "hyper-timeout", + "hyper-util", "percent-encoding", "pin-project", - "prost 0.11.9", + "prost", + "socket2 0.5.10", "tokio", "tokio-stream", "tower 0.4.13", @@ -11371,7 +11833,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "async-compression", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes", "futures-core", "futures-util", @@ -11397,7 +11859,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes", "futures-util", "http 1.3.1", @@ -11441,7 +11903,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11466,11 +11928,11 @@ dependencies = [ [[package]] name = "tracing-indicatif" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c714cc8fc46db04fcfddbd274c6ef59bebb1b435155984e7c6e89c3ce66f200" +checksum = "04d4e11e0e27acef25a47f27e9435355fecdc488867fa2bc90e75b0700d2823d" dependencies = [ - "indicatif 0.18.0", + "indicatif", "tracing", "tracing-core", "tracing-subscriber", @@ -11514,14 +11976,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", - "nu-ansi-term", + "nu-ansi-term 0.50.3", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -11548,7 +12010,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11557,7 +12019,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" dependencies = [ - "nu-ansi-term", + "nu-ansi-term 0.46.0", "tracing-core", "tracing-log 0.1.4", "tracing-subscriber", @@ -11605,7 +12067,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" dependencies = [ "lazy_static", - "thiserror 2.0.12", + "thiserror 2.0.17", "ts-rs-macros", ] @@ -11632,7 +12094,7 @@ checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "termcolor", ] @@ -11659,7 +12121,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.28.0", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11706,9 +12168,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -11730,9 +12192,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-normalization" @@ -11763,9 +12225,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unicode-xid" @@ -11773,17 +12235,11 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - [[package]] name = "uniffi" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b334fd69b3cf198b63616c096aabf9820ab21ed9b2aa1367ddd4b411068bf520" +checksum = "c6d968cb62160c11f2573e6be724ef8b1b18a277aededd17033f8a912d73e2b4" dependencies = [ "anyhow", "camino", @@ -11798,9 +12254,9 @@ dependencies = [ [[package]] name = "uniffi_bindgen" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ff0132b533483cf19abb30bba5c72c24d9f3e4d9a2ff71cb3e22e73899fd46e" +checksum = "f6b39ef1acbe1467d5d210f274fae344cb6f8766339330cb4c9688752899bf6b" dependencies = [ "anyhow", "askama", @@ -11810,7 +12266,7 @@ dependencies = [ "glob", "goblin", "heck 0.5.0", - "indexmap 2.10.0", + "indexmap 2.11.4", "once_cell", "serde", "tempfile", @@ -11824,9 +12280,9 @@ dependencies = [ [[package]] name = "uniffi_build" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d84d607076008df3c32dd2100ee4e727269f11d3faa35691af70d144598f666" +checksum = "6683e6b665423cddeacd89a3f97312cf400b2fb245a26f197adaf65c45d505b2" dependencies = [ "anyhow", "camino", @@ -11835,9 +12291,9 @@ dependencies = [ [[package]] name = "uniffi_core" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e3b997192dc15ef1778c842001811ec7f241a093a693ac864e1fc938e64fa9" +checksum = "c2d990b553d6b9a7ee9c3ae71134674739913d52350b56152b0e613595bb5a6f" dependencies = [ "anyhow", "bytes", @@ -11847,22 +12303,22 @@ dependencies = [ [[package]] name = "uniffi_internal_macros" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64bec2f3a33f2f08df8150e67fa45ba59a2ca740bf20c1beb010d4d791f9a1b" +checksum = "04f4f224becf14885c10e6e400b95cc4d1985738140cb194ccc2044563f8a56b" dependencies = [ "anyhow", - "indexmap 2.10.0", + "indexmap 2.11.4", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "uniffi_macros" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8708716d2582e4f3d7e9f320290b5966eb951ca421d7630571183615453efc" +checksum = "b481d385af334871d70904e6a5f129be7cd38c18fcf8dd8fd1f646b426a56d58" dependencies = [ "camino", "fs-err", @@ -11870,16 +12326,16 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.104", + "syn 2.0.106", "toml 0.5.11", "uniffi_meta", ] [[package]] name = "uniffi_meta" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d226fc167754ce548c5ece9828c8a06f03bf1eea525d2659ba6bd648bd8e2f3" +checksum = "10f817868a3b171bb7bf259e882138d104deafde65684689b4694c846d322491" dependencies = [ "anyhow", "siphasher 0.3.11", @@ -11889,22 +12345,22 @@ dependencies = [ [[package]] name = "uniffi_pipeline" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b925b6421df15cf4bedee27714022cd9626fb4d7eee0923522a608b274ba4371" +checksum = "4b147e133ad7824e32426b90bc41fda584363563f2ba747f590eca1fd6fd14e6" dependencies = [ "anyhow", "heck 0.5.0", - "indexmap 2.10.0", + "indexmap 2.11.4", "tempfile", "uniffi_internal_macros", ] [[package]] name = "uniffi_udl" -version = "0.29.3" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c42649b721df759d9d4692a376b82b62ce3028ec9fc466f4780fb8cdf728996" +checksum = "caed654fb73da5abbc7a7e9c741532284532ba4762d6fe5071372df22a41730a" dependencies = [ "anyhow", "textwrap", @@ -11942,9 +12398,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -11982,7 +12438,7 @@ version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "serde", "serde_json", "utoipa-gen", @@ -11997,7 +12453,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.104", + "syn 2.0.106", "uuid", ] @@ -12007,7 +12463,7 @@ version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" dependencies = [ - "axum 0.7.9", + "axum", "base64 0.22.1", "mime_guess", "regex", @@ -12036,7 +12492,7 @@ checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12047,17 +12503,17 @@ checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "utoipauto-core", ] [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "serde", "wasm-bindgen", @@ -12071,11 +12527,12 @@ dependencies = [ "clap", "comfy-table", "nym-bin-common 0.6.0", + "nym-http-api-client", "nym-network-defaults 0.1.0", "nym-validator-client 0.1.0", "serde", "serde_json", - "strum 0.26.3", + "strum", "time", "tokio", "tracing", @@ -12179,12 +12636,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -12193,37 +12650,47 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi", +] + [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -12234,9 +12701,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -12244,31 +12711,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.50" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" +checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" dependencies = [ "js-sys", "minicov", @@ -12279,13 +12746,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.50" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" +checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12301,6 +12768,7 @@ dependencies = [ "nym-credential-storage", "nym-crypto 0.4.0", "nym-gateway-client", + "nym-http-api-client", "nym-sphinx", "nym-sphinx-acknowledgements", "nym-statistics-common", @@ -12310,7 +12778,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tsify", "url", @@ -12332,7 +12800,7 @@ dependencies = [ "nym-store-cipher", "serde", "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.12", + "thiserror 2.0.17", "wasm-bindgen", "wasm-utils", ] @@ -12368,9 +12836,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" dependencies = [ "futures", "js-sys", @@ -12382,9 +12850,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -12406,7 +12874,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" dependencies = [ - "phf", + "phf 0.11.3", "phf_codegen", "string_cache", "string_cache_codegen", @@ -12433,14 +12901,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] name = "webpki-roots" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] @@ -12456,20 +12924,20 @@ dependencies = [ [[package]] name = "whoami" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" dependencies = [ - "redox_syscall", + "libredox", "wasite", "web-sys", ] [[package]] name = "widestring" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -12489,11 +12957,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -12502,26 +12970,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" -dependencies = [ - "windows-core 0.57.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" -dependencies = [ - "windows-core 0.59.0", - "windows-targets 0.53.2", -] - [[package]] name = "windows" version = "0.61.3" @@ -12531,7 +12979,7 @@ dependencies = [ "windows-collections", "windows-core 0.61.2", "windows-future", - "windows-link", + "windows-link 0.1.3", "windows-numerics", ] @@ -12546,40 +12994,28 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" -dependencies = [ - "windows-implement 0.57.0", - "windows-interface 0.57.0", - "windows-result 0.1.2", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.59.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.59.0", - "windows-interface 0.59.1", + "windows-implement", + "windows-interface", + "windows-link 0.1.3", "windows-result 0.3.4", - "windows-strings 0.3.1", - "windows-targets 0.53.2", + "windows-strings 0.4.2", ] [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", - "windows-link", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -12589,70 +13025,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", "windows-threading", ] [[package]] name = "windows-implement" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "windows-implement" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "windows-interface" -version = "0.57.0" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] -name = "windows-interface" -version = "0.59.1" +name = "windows-link" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-numerics" @@ -12661,43 +13070,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", ] [[package]] name = "windows-result" -version = "0.1.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.52.6", + "windows-link 0.1.3", ] [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] name = "windows-strings" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -12742,7 +13151,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -12793,18 +13211,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -12813,7 +13232,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -12836,9 +13255,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -12860,9 +13279,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -12884,9 +13303,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -12896,9 +13315,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -12920,9 +13339,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -12944,9 +13363,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -12968,9 +13387,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -12992,15 +13411,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -13016,13 +13435,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" @@ -13053,12 +13469,12 @@ dependencies = [ [[package]] name = "xattr" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.0.7", + "rustix", ] [[package]] @@ -13087,28 +13503,28 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13128,15 +13544,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -13149,7 +13565,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13165,9 +13581,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -13182,7 +13598,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13196,9 +13612,9 @@ dependencies = [ "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.10.0", + "indexmap 2.11.4", "memchr", - "thiserror 2.0.12", + "thiserror 2.0.17", "zopfli", ] @@ -13217,9 +13633,9 @@ dependencies = [ "nym-crypto 0.4.0", "nym-http-api-client", "rand 0.8.5", - "reqwest 0.12.22", + "reqwest 0.12.24", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tsify", "uuid", @@ -13261,10 +13677,27 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", ] + +[[package]] +name = "zulip-client" +version = "0.1.0" +dependencies = [ + "itertools 0.14.0", + "nym-bin-common 0.6.0", + "nym-http-api-client", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", + "zeroize", +] diff --git a/Cargo.toml b/Cargo.toml index 91261675584..2f5dfc18b81 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -146,7 +146,7 @@ members = [ "sdk/ffi/shared", "sdk/rust/nym-sdk", "smolmix", - "service-providers/authenticator", + # "service-providers/authenticator", "service-providers/common", "service-providers/ip-packet-router", "service-providers/network-requester", diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index fb4ccf68c1b..440221235c4 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -11,10 +11,10 @@ license.workspace = true futures.workspace = true itertools.workspace = true nym-client-core = { path = "../common/client-core" } -nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 +nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } nym-http-api-client = { path = "../common/http-api-client" } -nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 -nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 +nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } +nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo nym-validator-client = { path = "../common/client-libs/validator-client" } diff --git a/nym-ip-packet-client/Cargo.toml b/nym-ip-packet-client/Cargo.toml index 69bc8333b87..f79bf112066 100644 --- a/nym-ip-packet-client/Cargo.toml +++ b/nym-ip-packet-client/Cargo.toml @@ -15,7 +15,7 @@ workspace = true bincode.workspace = true bytes.workspace = true futures.workspace = true -nym-gateway-directory = { path = "../nym-gateway-directory" } +# nym-gateway-directory = { path = "../nym-gateway-directory" } nym-ip-packet-requests = { path = "../common/ip-packet-requests" } nym-sdk = {path = "../sdk/rust/nym-sdk" } thiserror.workspace = true diff --git a/nym-ip-packet-client/src/lib.rs b/nym-ip-packet-client/src/lib.rs new file mode 100644 index 00000000000..8aa5ffdf427 --- /dev/null +++ b/nym-ip-packet-client/src/lib.rs @@ -0,0 +1,14 @@ +// Copyright 2023-2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +mod connect; +mod error; +mod helpers; +mod listener; + +pub use connect::IprClientConnect; +pub use error::Error; +pub use listener::{IprListener, MixnetMessageOutcome}; + +// Re-export the currently used version +pub use nym_ip_packet_requests::v8 as current; diff --git a/nym-ip-packet-client/src/listener.rs b/nym-ip-packet-client/src/listener.rs new file mode 100644 index 00000000000..73803001754 --- /dev/null +++ b/nym-ip-packet-client/src/listener.rs @@ -0,0 +1,121 @@ +// Copyright 2024 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use bytes::Bytes; +use futures::StreamExt; +use nym_ip_packet_requests::{codec::MultiIpPacketCodec, v8::response::ControlResponse}; +use nym_sdk::mixnet::ReconstructedMessage; +use tokio_util::codec::FramedRead; +use tracing::{debug, error, info, warn}; + +use crate::{ + current::{ + request::{ControlRequest, IpPacketRequest, IpPacketRequestData}, + response::{InfoLevel, IpPacketResponse, IpPacketResponseData}, + }, + helpers::check_ipr_message_version, +}; + +pub enum MixnetMessageOutcome { + IpPackets(Vec), + MixnetSelfPing, + Disconnect, +} + +pub struct IprListener {} + +#[derive(Debug, thiserror::Error)] +pub enum IprListenerError { + #[error(transparent)] + IprClientError(#[from] crate::Error), +} + +impl IprListener { + pub fn new() -> Self { + Self {} + } + + fn is_mix_ping(&self, request: &IpPacketRequest) -> bool { + match request.data { + IpPacketRequestData::Control(ref control) => { + matches!(**control, ControlRequest::Ping(_)) + } + _ => { + debug!("Received unexpected request: {request:?}"); + false + } + } + } + + pub async fn handle_reconstructed_message( + &mut self, + message: ReconstructedMessage, + ) -> Result, IprListenerError> { + check_ipr_message_version(&message)?; + + match IpPacketResponse::from_reconstructed_message(&message) { + Ok(response) => { + match response.data { + IpPacketResponseData::Data(data_response) => { + // Un-bundle the mixnet message and send the individual IP packets + // to the tun device + let framed_reader = FramedRead::new( + data_response.ip_packet.as_ref(), + MultiIpPacketCodec::new(), + ); + let responses: Vec = framed_reader + .filter_map(|res| async { res.ok().map(|packet| packet.into_bytes()) }) + .collect() + .await; + return Ok(Some(MixnetMessageOutcome::IpPackets(responses))); + } + IpPacketResponseData::Control(control_response) => match *control_response { + ControlResponse::Connect(_) => { + info!("Received connect response when already connected - ignoring"); + } + ControlResponse::Disconnect(_) => { + info!("Received disconnect response"); + return Ok(Some(MixnetMessageOutcome::Disconnect)); + } + ControlResponse::UnrequestedDisconnect(_) => { + info!("Received unrequested disconnect response, ignoring for now"); + } + ControlResponse::Pong(_) => { + info!("Received pong response, ignoring for now"); + } + ControlResponse::Health(_) => { + info!("Received health response, ignoring for now"); + } + ControlResponse::Info(info) => { + let msg = + format!("Received info response from the mixnet: {}", info.reply); + match info.level { + InfoLevel::Info => info!("{msg}"), + InfoLevel::Warn => warn!("{msg}"), + InfoLevel::Error => error!("{msg}"), + } + } + }, + } + } + Err(err) => { + // The exception to when we are not expecting a response, is when we + // are sending a ping to ourselves. + if let Ok(request) = IpPacketRequest::from_reconstructed_message(&message) { + if self.is_mix_ping(&request) { + return Ok(Some(MixnetMessageOutcome::MixnetSelfPing)); + } + } else { + warn!("Failed to deserialize reconstructed message: {err}"); + } + } + } + Ok(None) + } +} + +impl Default for IprListener { + fn default() -> Self { + Self::new() + } +} diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index ed0a1380c67..371dc61df04 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -49,7 +49,7 @@ nym-bin-common = { path = "../../../common/bin-common", features = [ ] } nym-gateway-directory = { path = "../../../nym-gateway-directory" } -nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "c7e38aae038748f7d577a8b1ae02931fff97e868" } # nym-vpn-core 1.11.0 +nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } bytecodec = { workspace = true } httpcodec = { workspace = true } From 7d3026c119dcc5e9f39ec9e75bcba1a58caa54e7 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 16 Oct 2025 15:11:06 +0100 Subject: [PATCH 059/139] linting --- nym-gateway-directory/src/error.rs | 2 +- nym-gateway-directory/src/helpers.rs | 2 +- sdk/rust/nym-sdk/src/ip_packet_client/connect.rs | 3 +-- sdk/rust/nym-sdk/src/ip_packet_client/listener.rs | 11 +++++------ sdk/rust/nym-sdk/src/mixnet/native_client.rs | 2 +- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/nym-gateway-directory/src/error.rs b/nym-gateway-directory/src/error.rs index a2b4cd9dc3e..a796d1539ab 100644 --- a/nym-gateway-directory/src/error.rs +++ b/nym-gateway-directory/src/error.rs @@ -6,7 +6,7 @@ pub enum Error { #[error("identity not formatted correctly: {identity}")] NodeIdentityFormattingError { identity: String, - source: nym_crypto::asymmetric::ed25519::Ed25519RecoveryError + source: nym_crypto::asymmetric::ed25519::Ed25519RecoveryError, }, #[error("recipient is not formatted correctly: {address}")] diff --git a/nym-gateway-directory/src/helpers.rs b/nym-gateway-directory/src/helpers.rs index e11a1f7e0be..b869a2c3947 100644 --- a/nym-gateway-directory/src/helpers.rs +++ b/nym-gateway-directory/src/helpers.rs @@ -6,7 +6,7 @@ use std::net::{IpAddr, SocketAddr}; use nym_common::trace_err_chain; use nym_http_api_client::HickoryDnsResolver; -use crate::{Config, Error, error::Result, gateway_client::ResolvedConfig}; +use crate::{error::Result, gateway_client::ResolvedConfig, Config, Error}; async fn try_resolve_hostname(hostname: &str) -> Result> { tracing::debug!("Trying to resolve hostname: {hostname}"); diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs index 88e9f83c9ce..a7491fe9d77 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs @@ -13,6 +13,7 @@ use tokio::time::sleep; use tokio_util::sync::CancellationToken; use tracing::{debug, error}; +use super::error::{Error, Result}; use crate::{ ip_packet_client::current::{ request::IpPacketRequest, @@ -23,8 +24,6 @@ use crate::{ }, ip_packet_client::helpers::check_ipr_message_version, }; -use super::error::{Error, Result}; - pub type SharedMixnetClient = Arc>>; diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs b/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs index d038710b040..20be529e8b9 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/listener.rs @@ -33,12 +33,11 @@ pub enum IprListenerError { impl From for IprListenerError { fn from(err: super::error::Error) -> Self { match err { - super::error::Error::SdkError(sdk_err) => { - IprListenerError::IprClientError(*sdk_err) - } - other => IprListenerError::IprClientError( - crate::Error::new_unsupported(format!("IP packet error: {}", other)) - ) + super::error::Error::SdkError(sdk_err) => IprListenerError::IprClientError(*sdk_err), + other => IprListenerError::IprClientError(crate::Error::new_unsupported(format!( + "IP packet error: {}", + other + ))), } } } diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index dfa10d9f25c..4796c06ea34 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -28,8 +28,8 @@ use std::sync::Arc; use std::task::{Context, Poll}; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::sync::RwLockReadGuard; -use tokio_util::sync::CancellationToken; use tokio_util::codec::{Encoder, FramedRead, FramedWrite}; +use tokio_util::sync::CancellationToken; /// Client connected to the Nym mixnet. pub struct MixnetClient { From fd3ddc62e9b71fedc396b8b34f6178a842fbd52d Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 16 Oct 2025 17:55:34 +0100 Subject: [PATCH 060/139] almost sorted new version gw dir --- Cargo.lock | 4 +- nym-gateway-directory/Cargo.toml | 30 +- nym-gateway-directory/src/caching_client.rs | 330 --------- .../src/entries/auth_addresses.rs | 46 +- .../src/entries/entry_point.rs | 93 ++- .../src/entries/exit_point.rs | 98 ++- nym-gateway-directory/src/entries/gateway.rs | 659 ++++++++++++++---- .../src/entries/ipr_addresses.rs | 4 +- nym-gateway-directory/src/entries/score.rs | 2 +- nym-gateway-directory/src/error.rs | 32 +- nym-gateway-directory/src/gateway_cache.rs | 312 +++++++++ nym-gateway-directory/src/gateway_client.rs | 214 +++--- nym-gateway-directory/src/helpers.rs | 48 +- nym-gateway-directory/src/lib.rs | 14 +- 14 files changed, 1189 insertions(+), 697 deletions(-) delete mode 100644 nym-gateway-directory/src/caching_client.rs create mode 100644 nym-gateway-directory/src/gateway_cache.rs diff --git a/Cargo.lock b/Cargo.lock index d75b5e0a96f..06daa94d751 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6250,14 +6250,15 @@ dependencies = [ name = "nym-gateway-directory" version = "0.0.0" dependencies = [ - "futures", "itertools 0.14.0", "nym-client-core", "nym-common", "nym-crypto 0.4.0", "nym-http-api-client", + "nym-network-defaults 0.1.0", "nym-offline-monitor", "nym-sphinx", + "nym-sphinx-addressing", "nym-topology", "nym-validator-client 0.1.0", "nym-vpn-api-client", @@ -6266,6 +6267,7 @@ dependencies = [ "strum", "thiserror 2.0.17", "tokio", + "tokio-util", "tracing", "url", ] diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 440221235c4..7884d648156 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -3,33 +3,41 @@ name = "nym-gateway-directory" authors.workspace = true repository.workspace = true homepage.workspace = true -documentation.workspace = true -edition.workspace = true license.workspace = true +edition = "2024" + +[lints] +workspace = true [dependencies] -futures.workspace = true itertools.workspace = true +# nym-client-core.workspace = true nym-client-core = { path = "../common/client-core" } +# nym-common.workspace = true nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } +# nym-http-api-client.workspace = true nym-http-api-client = { path = "../common/http-api-client" } +# nym-offline-monitor.workspace = true nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } -nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } +# nym-sdk.workspace = true - removing due to circular dep, replaced with below nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo +# nym-topology.workspace = true nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo +# nym-validator-client.workspace = true nym-validator-client = { path = "../common/client-libs/validator-client" } -nym-crypto = { path = "../common/crypto", features = [ - "rand", - "asymmetric", - "stream_cipher", - "aes", - "hashing", -] } # TODO probably dont need all these features, cut down +# nym-vpn-api-client = { workspace = true } +nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } +nym-crypto = { path = "../common/crypto" } +nym-sphinx-addressing = { path = "../common/nymsphinx/addressing" } + +nym-network-defaults = { path = "../common/network-defaults" } + rand.workspace = true serde.workspace = true strum.workspace = true thiserror.workspace = true tokio.workspace = true +tokio-util.workspace = true tracing.workspace = true url.workspace = true diff --git a/nym-gateway-directory/src/caching_client.rs b/nym-gateway-directory/src/caching_client.rs deleted file mode 100644 index e57df88e9d5..00000000000 --- a/nym-gateway-directory/src/caching_client.rs +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright 2025 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::{ - collections::HashMap, - net::IpAddr, - sync::Arc, - time::{Duration, Instant}, -}; - -use futures::{stream::FuturesUnordered, FutureExt, StreamExt}; -use nym_offline_monitor::ConnectivityHandle; -use nym_sphinx::addressing::clients::Recipient; -use nym_sphinx::addressing::nodes::NodeIdentity; -use strum::IntoEnumIterator; -use tokio::sync::Mutex; - -use crate::{ - error::Result, Config, Country, Error, Gateway, GatewayClient, GatewayList, GatewayType, -}; - -#[derive(Clone)] -pub struct CachingGatewayClient { - inner: Arc>, -} - -impl CachingGatewayClient { - pub fn new( - gateway_client: GatewayClient, - connectivity_handle: Option, - ) -> Self { - Self { - inner: Arc::new(Mutex::new(CachingGatewayClientInner { - gateway_client, - connectivity_handle, - cached_gateways: Default::default(), - cached_countries: Default::default(), - })), - } - } - - pub async fn new_from_existing(existing_client: &CachingGatewayClient) -> Self { - let inner = existing_client.inner.lock().await; - Self { - inner: Arc::new(Mutex::new(CachingGatewayClientInner { - gateway_client: inner.gateway_client.clone(), - connectivity_handle: inner.connectivity_handle.clone(), - cached_gateways: inner.cached_gateways.clone(), - cached_countries: inner.cached_countries.clone(), - })), - } - } - - pub async fn update_client(&self, new_client: GatewayClient) { - self.inner.lock().await.gateway_client = new_client; - } - - pub async fn set_connectivity_handle(&self, connectivity_handle: ConnectivityHandle) { - self.inner.lock().await.connectivity_handle = Some(connectivity_handle); - } - - pub async fn get_config(&self) -> Config { - self.inner.lock().await.gateway_client.get_config() - } - - pub async fn refresh_all(&self) { - self.inner.lock().await.refresh_all().await - } - - pub async fn force_refresh_all(&self) { - self.inner.lock().await.force_refresh_all().await - } - - pub async fn lookup_gateways(&self, gw_type: GatewayType) -> Result { - self.inner.lock().await.lookup_gateways(gw_type).await - } - - pub async fn lookup_countries(&self, gw_type: GatewayType) -> Result> { - self.inner.lock().await.lookup_countries(gw_type).await - } - - pub async fn lookup_gateway_ip(&self, gateway_identity: &str) -> Result { - self.inner - .lock() - .await - .lookup_gateway_ip(gateway_identity) - .await - } -} - -/// A caching client that wraps around the `GatewayClient` and caches the results of -/// `lookup_gateways` and `lookup_countries` calls. -struct CachingGatewayClientInner { - // The underlying client that actually does the work - gateway_client: GatewayClient, - - // The connectivity handle to check if we are online - connectivity_handle: Option, - - // The cached gateways and their last updated time - cached_gateways: HashMap, - - // The cached countries and their last updated time - cached_countries: HashMap, Instant)>, -} - -enum LookupResult { - Gateways(Result), - Countries(Result>), -} - -impl CachingGatewayClientInner { - /// The maximum age of the cache before it is considered stale. - const MAX_CACHE_AGE: Duration = Duration::from_secs(5 * 60); - - async fn check_offline(&self) -> bool { - if let Some(connectivity_handle) = &self.connectivity_handle { - if connectivity_handle.connectivity().await.is_offline() { - return true; - } - } - false - } - - pub async fn refresh_all(&mut self) { - tracing::info!("Refreshing all gateways and countries"); - self.refresh( - self.get_stale_gateway_list_types(), - self.get_stale_country_list_types(), - ) - .await; - } - - pub async fn force_refresh_all(&mut self) { - tracing::info!("Forcing refresh of all gateways and countries"); - self.refresh(GatewayType::iter().collect(), GatewayType::iter().collect()) - .await; - } - - fn get_stale_gateway_list_types(&self) -> Vec { - let mut stale_gw_types = Vec::new(); - for gw_type in GatewayType::iter() { - if !self.is_gateways_current(&gw_type) { - stale_gw_types.push(gw_type.clone()); - } - } - stale_gw_types - } - - fn get_stale_country_list_types(&self) -> Vec { - let mut stale_gw_types = Vec::new(); - for gw_type in GatewayType::iter() { - if !self.is_countries_current(&gw_type) { - stale_gw_types.push(gw_type.clone()); - } - } - stale_gw_types - } - - async fn refresh(&mut self, gw_list_types: Vec, country_types: Vec) { - if self.check_offline().await { - tracing::warn!("Not refreshing gateways and countries because we are not connected"); - return; - } - - tracing::info!( - "Refreshing gateway lists: {gw_list_types:?}, country lists: {country_types:?}" - ); - let mut tasks = FuturesUnordered::new(); - - for gw_type in country_types { - let client = self.gateway_client.clone(); - tasks.push( - async move { - let res = client.lookup_countries(gw_type.clone()).await; - (gw_type, LookupResult::Countries(res)) - } - .boxed(), - ); - } - for gw_type in gw_list_types { - let client = self.gateway_client.clone(); - tasks.push( - async move { - let res = client.lookup_gateways(gw_type.clone()).await; - (gw_type, LookupResult::Gateways(res)) - } - .boxed(), - ); - } - - while let Some((gw_type, res)) = tasks.next().await { - match res { - LookupResult::Gateways(r) => match r { - Ok(ref refreshed_gateways) => { - tracing::info!("Refreshed gateways for {gw_type:?}"); - self.cached_gateways.insert( - gw_type.clone(), - (refreshed_gateways.clone(), Instant::now()), - ); - } - Err(err) => { - tracing::warn!("Failed to refresh gateways for {gw_type:?}: {err}"); - } - }, - LookupResult::Countries(r) => match r { - Ok(ref refreshed_countries) => { - tracing::info!("Refreshed countries for {gw_type:?}"); - self.cached_countries.insert( - gw_type.clone(), - (refreshed_countries.clone(), Instant::now()), - ); - } - Err(err) => { - tracing::warn!("Failed to refresh countries for {gw_type:?}: {err}"); - } - }, - } - } - } - - fn is_countries_current(&self, gw_type: &GatewayType) -> bool { - if let Some((_, last_updated)) = self.cached_countries.get(gw_type) { - last_updated.elapsed() < Self::MAX_CACHE_AGE - } else { - false - } - } - - fn is_gateways_current(&self, gw_type: &GatewayType) -> bool { - if let Some((_, last_updated)) = self.cached_gateways.get(gw_type) { - last_updated.elapsed() < Self::MAX_CACHE_AGE - } else { - false - } - } - - async fn refresh_countries(&mut self, gw_type: GatewayType) -> Result> { - if let Some((countries, last_updated)) = self.cached_countries.get(&gw_type) { - if last_updated.elapsed() < Self::MAX_CACHE_AGE { - return Ok(countries.clone()); - } - } - self.force_refresh_countries(gw_type).await - } - - async fn force_refresh_countries(&mut self, gw_type: GatewayType) -> Result> { - if self.check_offline().await { - tracing::warn!("Not refreshing countries because we are not connected"); - return Err(Error::Offline); - } - let refreshed_countries = self - .gateway_client - .lookup_countries(gw_type.clone()) - .await?; - self.cached_countries.insert( - gw_type.clone(), - (refreshed_countries.clone(), Instant::now()), - ); - Ok(refreshed_countries) - } - - async fn refresh_gateways(&mut self, gw_type: GatewayType) -> Result { - if let Some((gw_list, last_updated)) = self.cached_gateways.get(&gw_type) { - if last_updated.elapsed() < Self::MAX_CACHE_AGE { - return Ok(gw_list.clone()); - } - } - self.force_refresh_gateways(gw_type).await - } - - async fn force_refresh_gateways(&mut self, gw_type: GatewayType) -> Result { - if self.check_offline().await { - tracing::warn!("Not refreshing countries because we are not connected"); - return Err(Error::Offline); - } - let refreshed_gateways = self.gateway_client.lookup_gateways(gw_type.clone()).await?; - self.cached_gateways.insert( - gw_type.clone(), - (refreshed_gateways.clone(), Instant::now()), - ); - Ok(refreshed_gateways) - } - - async fn lookup_gateways(&mut self, gw_type: GatewayType) -> Result { - let refresh_result = self.refresh_gateways(gw_type.clone()).await; - - // Regardless of if we managed to refresh the cache, we return the cached gateways if they - // exist. They should be the most recent one we can muster - if let Some((gateways, _)) = self.cached_gateways.get(&gw_type) { - Ok(gateways.clone()) - } else { - refresh_result - } - } - - async fn lookup_countries(&mut self, gw_type: GatewayType) -> Result> { - let refresh_result = self.refresh_countries(gw_type.clone()).await; - - // Regardless of if we managed to refresh the cache, we return the cached countries if they - // exist. They should be the most recent one we can muster - if let Some((countries, _)) = self.cached_countries.get(&gw_type) { - Ok(countries.clone()) - } else { - refresh_result - } - } - - async fn lookup_gateway_ip(&mut self, gateway_identity: &str) -> Result { - // If we have a populated list of gateways, we should always be able to find the IP there. - if let Ok(identity) = NodeIdentity::from_base58_string(gateway_identity) { - for (_, (gateways, _)) in self.cached_gateways.iter() { - if let Some(ip) = gateways - .node_with_identity(&identity) - .and_then(Gateway::lookup_ip) - { - return Ok(ip); - } - } - } else { - tracing::warn!("Failed to parse gateway identity: {gateway_identity}"); - } - - // Fallback - tracing::warn!("Using fallback to lookup gateway IP"); - self.gateway_client - .lookup_gateway_ip(gateway_identity) - .await - } -} diff --git a/nym-gateway-directory/src/entries/auth_addresses.rs b/nym-gateway-directory/src/entries/auth_addresses.rs index 17b6e2ad664..8f8fde3c0e8 100644 --- a/nym-gateway-directory/src/entries/auth_addresses.rs +++ b/nym-gateway-directory/src/entries/auth_addresses.rs @@ -1,15 +1,14 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use std::fmt::Display; - +// use nym_sdk::mixnet::Recipient; use nym_sphinx::addressing::clients::Recipient; +use nym_sphinx::addressing::nodes::NodeIdentity; -use crate::{error::Result, Error}; +use crate::{Error, error::Result}; -// optional, until we remove the wireguard feature flag #[derive(Debug, Copy, Clone)] -pub struct AuthAddress(pub Option); +pub struct AuthAddress(Recipient); impl AuthAddress { pub(crate) fn try_from_base58_string(address: &str) -> Result { @@ -19,39 +18,24 @@ impl AuthAddress { source, } })?; - Ok(AuthAddress(Some(recipient))) + Ok(AuthAddress(recipient)) } } -#[derive(Debug, Copy, Clone)] -pub struct AuthAddresses { - entry_addr: AuthAddress, - exit_addr: AuthAddress, -} - -impl AuthAddresses { - pub fn new(entry_addr: AuthAddress, exit_addr: AuthAddress) -> Self { - AuthAddresses { - entry_addr, - exit_addr, - } - } - - pub fn entry(&self) -> AuthAddress { - self.entry_addr +impl std::fmt::Display for AuthAddress { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) } +} - pub fn exit(&self) -> AuthAddress { - self.exit_addr +impl From for AuthAddress { + fn from(recipient: Recipient) -> Self { + Self(recipient) } } -impl Display for AuthAddresses { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "entry: {:?} exit: {:?}", - self.entry_addr.0, self.exit_addr.0 - ) +impl From for Recipient { + fn from(auth_address: AuthAddress) -> Self { + auth_address.0 } } diff --git a/nym-gateway-directory/src/entries/entry_point.rs b/nym-gateway-directory/src/entries/entry_point.rs index 803e7c2e7d1..df8adb61d72 100644 --- a/nym-gateway-directory/src/entries/entry_point.rs +++ b/nym-gateway-directory/src/entries/entry_point.rs @@ -1,15 +1,18 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use std::fmt::{Display, Formatter}; - +use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::addressing::nodes::NodeIdentity; - +use std::fmt::{Display, Formatter}; +// use nym_sdk::mixnet::NodeIdentity; use serde::{Deserialize, Serialize}; use tracing::debug; -use super::gateway::{Gateway, GatewayList}; -use crate::{error::Result, Error}; +use crate::{ + Error, ScoreValue, + entries::gateway::{COUNTRY_WITH_REGION_SELECTOR, Gateway, GatewayFilter, GatewayList}, + error::Result, +}; // The entry point is always a gateway identity, or some other entry that can be resolved to a // gateway identity. @@ -17,8 +20,10 @@ use crate::{error::Result, Error}; pub enum EntryPoint { // An explicit entry gateway identity. Gateway { identity: NodeIdentity }, - // Select a random entry gateway in a specific location. - Location { location: String }, + // Select a random entry gateway in a specific country. + Country { two_letter_iso_country_code: String }, + // Select a random entry gateway in a specific region/state. + Region { region: String }, // Select an entry gateway at random. Random, } @@ -27,7 +32,10 @@ impl Display for EntryPoint { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { EntryPoint::Gateway { identity } => write!(f, "Gateway: {identity}"), - EntryPoint::Location { location } => write!(f, "Location: {location}"), + EntryPoint::Country { + two_letter_iso_country_code, + } => write!(f, "Country: {two_letter_iso_country_code}"), + EntryPoint::Region { region } => write!(f, "Region/state: {region}"), EntryPoint::Random => write!(f, "Random"), } } @@ -44,14 +52,14 @@ impl EntryPoint { Ok(EntryPoint::Gateway { identity }) } - pub fn is_location(&self) -> bool { - matches!(self, EntryPoint::Location { .. }) - } - - pub async fn lookup_gateway(&self, gateways: &GatewayList) -> Result { + pub fn lookup_gateway( + &self, + gateways: &GatewayList, + min_score: Option, + ) -> Result { match &self { EntryPoint::Gateway { identity } => { - debug!("Selecting gateway by identity: {}", identity); + debug!("Selecting gateway by identity: {identity}"); gateways .gateway_with_identity(identity) .ok_or_else(|| Error::NoMatchingGateway { @@ -59,21 +67,62 @@ impl EntryPoint { }) .cloned() } - EntryPoint::Location { location } => { - debug!("Selecting gateway by location: {}", location); - gateways - .random_gateway_located_at(location.to_string()) - .ok_or_else(|| Error::NoMatchingEntryGatewayForLocation { - requested_location: location.clone(), + EntryPoint::Country { + two_letter_iso_country_code, + } => { + debug!("Selecting gateway by country: {two_letter_iso_country_code}"); + + let filters = Self::build_filters( + vec![GatewayFilter::Country(two_letter_iso_country_code.clone())], + min_score, + ); + + gateways.choose_random(&filters).ok_or_else(|| { + Error::NoMatchingEntryGatewayForLocation { + requested_location: two_letter_iso_country_code.clone(), available_countries: gateways.all_iso_codes(), - }) + } + }) + } + EntryPoint::Region { region } => { + debug!("Selecting gateway by region/state: {region}"); + + // Currently only supported in the US + let filters = Self::build_filters( + vec![ + GatewayFilter::Country(COUNTRY_WITH_REGION_SELECTOR.to_string()), + GatewayFilter::Region(region.to_string()), + ], + min_score, + ); + + gateways.choose_random(&filters).ok_or_else(|| { + Error::NoMatchingEntryGatewayForLocation { + requested_location: region.clone(), + available_countries: gateways.all_iso_codes(), + } + }) } EntryPoint::Random => { debug!("Selecting a random gateway"); + + let filters = Self::build_filters(vec![], min_score); + gateways - .random_gateway() + .choose_random(&filters) .ok_or_else(|| Error::FailedToSelectGatewayRandomly) } } } + + #[inline] + fn build_filters( + mut base_filters: Vec, + min_score: Option, + ) -> Vec { + if let Some(min_score) = min_score { + base_filters.push(GatewayFilter::MinScore(min_score)); + } + base_filters + } } diff --git a/nym-gateway-directory/src/entries/exit_point.rs b/nym-gateway-directory/src/entries/exit_point.rs index 2075fc974d8..4a5518f8ebd 100644 --- a/nym-gateway-directory/src/entries/exit_point.rs +++ b/nym-gateway-directory/src/entries/exit_point.rs @@ -1,14 +1,17 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use std::fmt::{Display, Formatter}; - use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::addressing::nodes::NodeIdentity; +use std::fmt::{Display, Formatter}; +// use nym_sdk::mixnet::{NodeIdentity, Recipient}; use serde::{Deserialize, Serialize}; -use super::gateway::{Gateway, GatewayList}; -use crate::{error::Result, Error, IpPacketRouterAddress}; +use crate::{ + Error, IpPacketRouterAddress, ScoreValue, + entries::gateway::{COUNTRY_WITH_REGION_SELECTOR, Gateway, GatewayFilter, GatewayList}, + error::Result, +}; // The exit point is a nym-address, but if the exit ip-packet-router is running embedded on a // gateway, we can refer to it by the gateway identity. @@ -22,8 +25,11 @@ pub enum ExitPoint { // embedded on a gateway. Gateway { identity: NodeIdentity }, - // NOTE: Consider using a crate with strongly typed country codes instead of strings - Location { location: String }, + // Select a random entry gateway in a specific country. + Country { two_letter_iso_country_code: String }, + + // Select a random entry gateway in a specific region/state. + Region { region: String }, // Select an exit gateway at random. Random, @@ -34,18 +40,22 @@ impl Display for ExitPoint { match self { ExitPoint::Address { address } => write!(f, "Address: {address}"), ExitPoint::Gateway { identity } => write!(f, "Gateway: {identity}"), - ExitPoint::Location { location } => write!(f, "Location: {location}"), + ExitPoint::Country { + two_letter_iso_country_code, + } => write!(f, "Country: {two_letter_iso_country_code}"), + ExitPoint::Region { region } => write!(f, "Region/state: {region}"), ExitPoint::Random => write!(f, "Random"), } } } impl ExitPoint { - pub fn is_location(&self) -> bool { - matches!(self, ExitPoint::Location { .. }) - } - - pub fn lookup_gateway(&self, gateways: &GatewayList) -> Result { + pub fn lookup_gateway( + &self, + gateways: &GatewayList, + min_score: Option, + residential_exit: bool, + ) -> Result { match &self { ExitPoint::Address { address } => { tracing::debug!("Selecting gateway by address: {address}"); @@ -73,21 +83,69 @@ impl ExitPoint { }) .cloned() } - ExitPoint::Location { location } => { - tracing::debug!("Selecting gateway by location: {location}"); - gateways - .random_gateway_located_at(location.to_string()) - .ok_or_else(|| Error::NoMatchingExitGatewayForLocation { - requested_location: location.clone(), + ExitPoint::Country { + two_letter_iso_country_code, + } => { + tracing::debug!("Selecting gateway by country: {two_letter_iso_country_code}"); + + let filters = Self::build_filters( + vec![GatewayFilter::Country(two_letter_iso_country_code.clone())], + min_score, + residential_exit, + ); + + gateways.choose_random(&filters).ok_or_else(|| { + Error::NoMatchingExitGatewayForLocation { + requested_location: two_letter_iso_country_code.clone(), available_countries: gateways.all_iso_codes(), - }) + } + }) + } + ExitPoint::Region { region } => { + tracing::debug!("Selecting gateway by region/state: {region}"); + + let filters = Self::build_filters( + vec![ + // Currently only supported in the US + GatewayFilter::Country(COUNTRY_WITH_REGION_SELECTOR.to_string()), + GatewayFilter::Region(region.to_string()), + ], + min_score, + residential_exit, + ); + + gateways.choose_random(&filters).ok_or_else(|| { + Error::NoMatchingExitGatewayForLocation { + requested_location: region.clone(), + available_countries: gateways.all_iso_codes(), + } + }) } ExitPoint::Random => { tracing::debug!("Selecting a random exit gateway"); + + let filters = Self::build_filters(vec![], min_score, residential_exit); + gateways - .random_gateway() + .choose_random(&filters) .ok_or_else(|| Error::FailedToSelectGatewayRandomly) } } } + + #[inline] + fn build_filters( + mut base_filters: Vec, + min_score: Option, + residential_exit: bool, + ) -> Vec { + if let Some(min_score) = min_score { + base_filters.push(GatewayFilter::MinScore(min_score)); + } + if residential_exit { + base_filters.push(GatewayFilter::Residential); + base_filters.push(GatewayFilter::Exit); + } + base_filters + } } diff --git a/nym-gateway-directory/src/entries/gateway.rs b/nym-gateway-directory/src/entries/gateway.rs index 570ec7fc858..e84d7679856 100644 --- a/nym-gateway-directory/src/entries/gateway.rs +++ b/nym-gateway-directory/src/entries/gateway.rs @@ -3,19 +3,31 @@ use itertools::Itertools; use nym_sphinx::addressing::nodes::NodeIdentity; - use nym_topology::{NodeId, RoutingNode}; -use nym_vpn_api_client::types::{NaiveFloat, Percent, ScoreThresholds}; +use nym_validator_client::models::{KeyRotationId, NymNodeDescription}; +use nym_vpn_api_client::{ + response::{BridgeInformation, BridgeParameters}, + types::{Percent, ScoreThresholds}, +}; use rand::seq::IteratorRandom; -use std::{fmt, net::IpAddr}; +use std::{ + fmt::{self, Display}, + net::{IpAddr, Ipv4Addr, Ipv6Addr}, + str::FromStr, +}; use tracing::error; -use crate::{error::Result, AuthAddress, Country, Error, IpPacketRouterAddress}; - -use super::score::{Score, HIGH_SCORE_THRESHOLD, LOW_SCORE_THRESHOLD, MEDIUM_SCORE_THRESHOLD}; +use crate::{ + AuthAddress, Country, Error, IpPacketRouterAddress, + entries::score::{HIGH_SCORE_THRESHOLD, LOW_SCORE_THRESHOLD, MEDIUM_SCORE_THRESHOLD, Score}, + error::Result, + helpers, +}; pub type NymNode = Gateway; +pub const COUNTRY_WITH_REGION_SELECTOR: &str = "US"; + #[derive(Clone)] pub struct Gateway { pub identity: NodeIdentity, @@ -23,15 +35,15 @@ pub struct Gateway { pub location: Option, pub ipr_address: Option, pub authenticator_address: Option, + pub bridge_params: Option, pub last_probe: Option, pub ips: Vec, pub host: Option, pub clients_ws_port: Option, pub clients_wss_port: Option, pub mixnet_performance: Option, - pub wg_performance: Option, - pub wg_score: Option, pub mixnet_score: Option, + pub wg_performance: Option, pub version: Option, } @@ -47,11 +59,87 @@ impl fmt::Debug for Gateway { .field("clients_ws_port", &self.clients_ws_port) .field("clients_wss_port", &self.clients_wss_port) .field("mixnet_performance", &self.mixnet_performance) + .field("mixnet_score", &self.mixnet_score) + .field("wg_performance", &self.wg_performance) + .field("version", &self.version) .finish() } } impl Gateway { + pub fn try_from_node_description( + node_description: NymNodeDescription, + current_key_rotation: KeyRotationId, + ) -> Result { + let identity = node_description.description.host_information.keys.ed25519; + let location = node_description + .description + .auxiliary_details + .location + .map(|l| Location { + two_letter_iso_country_code: l.alpha2.to_string(), + ..Default::default() + }); + let ipr_address = node_description + .description + .ip_packet_router + .as_ref() + .and_then(|ipr| { + IpPacketRouterAddress::try_from_base58_string(&ipr.address) + .inspect_err(|err| error!("Failed to parse IPR address: {err}")) + .ok() + }); + let authenticator_address = node_description + .description + .authenticator + .as_ref() + .and_then(|a| { + AuthAddress::try_from_base58_string(&a.address) + .inspect_err(|err| error!("Failed to parse authenticator address: {err}")) + .ok() + }); + let version = Some(node_description.version().to_string()); + let role = if node_description.description.declared_role.entry { + nym_validator_client::nym_nodes::NodeRole::EntryGateway + } else if node_description.description.declared_role.exit_ipr + || node_description.description.declared_role.exit_nr + { + nym_validator_client::nym_nodes::NodeRole::ExitGateway + } else { + nym_validator_client::nym_nodes::NodeRole::Inactive + }; + + let gateway = RoutingNode::try_from(&node_description.to_skimmed_node( + current_key_rotation, + role, + Default::default(), + )) + .map_err(|_| Error::MalformedGateway)?; + + let host = gateway.ws_entry_address(false); + let entry_info = &gateway.entry; + let clients_ws_port = entry_info.as_ref().map(|g| g.clients_ws_port); + let clients_wss_port = entry_info.as_ref().and_then(|g| g.clients_wss_port); + let ips = node_description.description.host_information.ip_address; + Ok(Gateway { + identity, + moniker: String::new(), + location, + ipr_address, + authenticator_address, + bridge_params: None, + last_probe: None, + ips, + host, + clients_ws_port, + clients_wss_port, + mixnet_performance: None, + mixnet_score: None, + wg_performance: None, + version, + }) + } + pub fn identity(&self) -> NodeIdentity { self.identity } @@ -62,15 +150,37 @@ impl Gateway { .map(|l| l.two_letter_iso_country_code.as_str()) } - pub fn is_two_letter_iso_country_code(&self, code: &str) -> bool { - self.two_letter_iso_country_code() == Some(code) + pub fn is_in_country(&self, two_letter_iso_country_code: &str) -> bool { + self.location + .as_ref() + .map(|loc| loc.two_letter_iso_country_code == two_letter_iso_country_code) + .unwrap_or(false) + } + + pub fn region(&self) -> Option<&str> { + self.location.as_ref().map(|l| l.region.as_str()) + } + + pub fn is_in_region(&self, region: &str) -> bool { + self.location + .as_ref() + .map(|loc| loc.region == region) + .unwrap_or(false) + } + + pub fn is_residential_asn(&self) -> bool { + self.location + .as_ref() + .and_then(|loc| loc.asn.as_ref()) + .map(|asn| asn.kind == AsnKind::Residential) + .unwrap_or(false) } - pub fn has_ipr_address(&self) -> bool { + pub fn is_exit_node(&self) -> bool { self.ipr_address.is_some() } - pub fn has_authenticator_address(&self) -> bool { + pub fn is_vpn_node(&self) -> bool { self.authenticator_address.is_some() } @@ -82,6 +192,10 @@ impl Gateway { self.ips.first().copied() } + pub fn split_ips(&self) -> (Vec, Vec) { + helpers::split_ips(self.ips.clone()) + } + pub fn clients_address_no_tls(&self) -> Option { match (&self.host, &self.clients_ws_port) { (Some(host), Some(port)) => Some(format!("ws://{host}:{port}")), @@ -96,25 +210,148 @@ impl Gateway { } } - pub fn update_to_new_thresholds( - &mut self, - mix_thresholds: Option, - wg_thresholds: Option, - ) { + pub fn update_to_new_thresholds(&mut self, mix_thresholds: Option) { if let (Some(mix_thresholds), Some(score)) = (mix_thresholds, self.mixnet_score.as_mut()) { score.update_to_new_thresholds(mix_thresholds); } - if let (Some(wg_thresholds), Some(score)) = (wg_thresholds, self.wg_score.as_mut()) { - score.update_to_new_thresholds(wg_thresholds); + } + + pub fn meets_score(&self, gw_type: Option, min_score: ScoreValue) -> bool { + match gw_type { + Some(GatewayType::MixnetEntry) | Some(GatewayType::MixnetExit) => self + .mixnet_performance + .is_some_and(|p| p.round_to_integer() >= min_score.threshold()), + Some(GatewayType::Wg) => self + .wg_performance + .as_ref() + .is_some_and(|p| p.score >= min_score), + None => false, + } + } + + /// Tests whether the gateway matches a specific filter. + pub fn matches_filter(&self, gw_type: Option, filter: &GatewayFilter) -> bool { + match filter { + GatewayFilter::MinScore(score) => self.meets_score(gw_type, *score), + GatewayFilter::Country(code) => self.is_in_country(code), + GatewayFilter::Region(region) => self.is_in_region(region), + GatewayFilter::Residential => self.is_residential_asn(), + GatewayFilter::Exit => self.is_exit_node(), + GatewayFilter::Vpn => self.is_vpn_node(), + } + } + + /// Tests whether the gateway matches all of the filters. + pub fn matches_all_filters( + &self, + gw_type: Option, + filters: &[GatewayFilter], + ) -> bool { + filters + .iter() + .all(|filter| self.matches_filter(gw_type, filter)) + } + + pub fn get_bridge_params(&self) -> Option { + if let Some(all_params) = &self.bridge_params { + all_params.transports.first().cloned() + } else { + None } } } +#[derive(Debug, Clone, PartialEq)] +pub enum AsnKind { + Residential, + Other, +} + +#[derive(Debug, Clone, PartialEq)] +pub struct Asn { + pub asn: String, + pub name: String, + pub kind: AsnKind, +} + #[derive(Debug, Default, Clone, PartialEq)] pub struct Location { pub two_letter_iso_country_code: String, pub latitude: f64, pub longitude: f64, + + pub city: String, + pub region: String, + + pub asn: Option, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ScoreValue { + Offline, + Low, + Medium, + High, +} + +impl ScoreValue { + fn priority(&self) -> u8 { + match self { + ScoreValue::Offline => 0, + ScoreValue::Low => 1, + ScoreValue::Medium => 2, + ScoreValue::High => 3, + } + } + + pub fn threshold(&self) -> u8 { + match self { + ScoreValue::Offline => 0, + ScoreValue::Low => LOW_SCORE_THRESHOLD, + ScoreValue::Medium => MEDIUM_SCORE_THRESHOLD, + ScoreValue::High => HIGH_SCORE_THRESHOLD, + } + } +} + +impl PartialOrd for ScoreValue { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.priority().cmp(&other.priority())) + } +} + +impl FromStr for ScoreValue { + type Err = crate::Error; + + fn from_str(s: &str) -> std::result::Result { + match s.to_lowercase().as_str() { + "offline" => Ok(ScoreValue::Offline), + "low" => Ok(ScoreValue::Low), + "medium" => Ok(ScoreValue::Medium), + "high" => Ok(ScoreValue::High), + _ => Err(crate::Error::InvalidScoreValue(s.to_string())), + } + } +} + +impl Display for ScoreValue { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let s = match self { + ScoreValue::Offline => "Offline", + ScoreValue::Low => "Low", + ScoreValue::Medium => "Medium", + ScoreValue::High => "High", + }; + write!(f, "{s}") + } +} + +#[derive(Debug, Clone, PartialEq)] +pub struct Performance { + pub last_updated_utc: String, + pub score: ScoreValue, + pub load: ScoreValue, + pub uptime_percentage_last_24_hours: f32, } #[derive(Debug, Clone, PartialEq)] @@ -154,12 +391,56 @@ pub struct WgProbeResults { pub ping_ips_performance: f32, } +impl From for AsnKind { + fn from(value: nym_vpn_api_client::response::AsnKind) -> Self { + match value { + nym_vpn_api_client::response::AsnKind::Residential => AsnKind::Residential, + nym_vpn_api_client::response::AsnKind::Other => AsnKind::Other, + } + } +} + +impl From for Asn { + fn from(location: nym_vpn_api_client::response::Asn) -> Self { + Asn { + asn: location.asn, + name: location.name, + kind: location.kind.into(), + } + } +} + impl From for Location { fn from(location: nym_vpn_api_client::response::Location) -> Self { Location { two_letter_iso_country_code: location.two_letter_iso_country_code, latitude: location.latitude, longitude: location.longitude, + city: location.city, + region: location.region, + asn: location.asn.map(Into::into), + } + } +} + +impl From for ScoreValue { + fn from(value: nym_vpn_api_client::response::ScoreValue) -> Self { + match value { + nym_vpn_api_client::response::ScoreValue::Offline => ScoreValue::Offline, + nym_vpn_api_client::response::ScoreValue::Low => ScoreValue::Low, + nym_vpn_api_client::response::ScoreValue::Medium => ScoreValue::Medium, + nym_vpn_api_client::response::ScoreValue::High => ScoreValue::High, + } + } +} + +impl From for Performance { + fn from(value: nym_vpn_api_client::response::DVpnGatewayPerformance) -> Self { + Performance { + last_updated_utc: value.last_updated_utc, + score: value.score.into(), + load: value.load.into(), + uptime_percentage_last_24_hours: value.uptime_percentage_last_24_hours, } } } @@ -258,13 +539,6 @@ impl TryFrom for Gateway { .cloned() .map(|ip| ip.to_string()); let host = hostname.or(first_ip_address); - let wg_performance = gateway.last_probe.as_ref().and_then(|probe| { - probe - .outcome - .wg - .as_ref() - .and_then(|p| Percent::naive_try_from_f64(p.ping_hosts_performance as f64).ok()) - }); Ok(Gateway { identity, @@ -272,6 +546,7 @@ impl TryFrom for Gateway { location: Some(gateway.location.into()), ipr_address, authenticator_address, + bridge_params: gateway.bridges, last_probe: gateway.last_probe.map(Probe::from), ips: gateway.ip_addresses, host, @@ -279,96 +554,24 @@ impl TryFrom for Gateway { clients_wss_port: gateway.entry.wss_port, mixnet_performance: Some(gateway.performance), mixnet_score: Some(Score::from(gateway.performance)), - wg_performance, - wg_score: wg_performance.map(Score::from), + wg_performance: gateway.performance_v2.map(Performance::from), version: gateway.build_information.map(|info| info.build_version), }) } } -impl TryFrom for Gateway { - type Error = Error; - - fn try_from( - node_description: nym_validator_client::models::NymNodeDescription, - ) -> Result { - let identity = node_description.description.host_information.keys.ed25519; - let location = node_description - .description - .auxiliary_details - .location - .map(|l| Location { - two_letter_iso_country_code: l.alpha2.to_string(), - ..Default::default() - }); - let ipr_address = node_description - .description - .ip_packet_router - .as_ref() - .and_then(|ipr| { - IpPacketRouterAddress::try_from_base58_string(&ipr.address) - .inspect_err(|err| error!("Failed to parse IPR address: {err}")) - .ok() - }); - let authenticator_address = node_description - .description - .authenticator - .as_ref() - .and_then(|a| { - AuthAddress::try_from_base58_string(&a.address) - .inspect_err(|err| error!("Failed to parse authenticator address: {err}")) - .ok() - }); - let version = Some(node_description.version().to_string()); - let role = if node_description.description.declared_role.entry { - nym_validator_client::nym_nodes::NodeRole::EntryGateway - } else if node_description.description.declared_role.exit_ipr - || node_description.description.declared_role.exit_nr - { - nym_validator_client::nym_nodes::NodeRole::ExitGateway - } else { - nym_validator_client::nym_nodes::NodeRole::Inactive - }; - - let gateway = - RoutingNode::try_from(&node_description.to_skimmed_node(role, Default::default())) - .map_err(|_| Error::MalformedGateway)?; - - let host = gateway.ws_entry_address(false); - let entry_info = &gateway.entry; - let clients_ws_port = entry_info.as_ref().map(|g| g.clients_ws_port); - let clients_wss_port = entry_info.as_ref().and_then(|g| g.clients_wss_port); - let ips = node_description.description.host_information.ip_address; - Ok(Gateway { - identity, - moniker: String::new(), - location, - ipr_address, - authenticator_address, - last_probe: None, - ips, - host, - clients_ws_port, - clients_wss_port, - mixnet_performance: None, - wg_performance: None, - wg_score: None, - mixnet_score: None, - version, - }) - } -} - pub type NymNodeList = GatewayList; #[derive(Debug, Clone)] pub struct GatewayList { + /// If None, then the list contains mixed types. + gw_type: Option, gateways: Vec, } impl GatewayList { - pub fn new(gateways: Vec) -> Self { - GatewayList { gateways } + pub fn new(gw_type: Option, gateways: Vec) -> Self { + GatewayList { gw_type, gateways } } // Returns a list of all locations of the gateways, including duplicates @@ -393,7 +596,16 @@ impl GatewayList { .collect() } + pub fn filter(&self, filters: &[GatewayFilter]) -> Vec { + self.gateways + .iter() + .filter(|gateway| gateway.matches_all_filters(self.gw_type, filters)) + .cloned() + .collect() + } + pub fn node_with_identity(&self, identity: &NodeIdentity) -> Option<&NymNode> { + // Not using self.filter() here as find() will stop at the first match self.gateways .iter() .find(|node| &node.identity() == identity) @@ -403,25 +615,10 @@ impl GatewayList { self.node_with_identity(identity) } - pub fn gateways_located_at(&self, code: String) -> impl Iterator { - self.gateways.iter().filter(move |gateway| { - gateway - .two_letter_iso_country_code() - .is_some_and(|gw_code| gw_code == code) - }) - } - - pub fn random_gateway(&self) -> Option { - self.gateways - .iter() - .choose(&mut rand::thread_rng()) - .cloned() - } - - pub fn random_gateway_located_at(&self, code: String) -> Option { - self.gateways_located_at(code) + pub fn choose_random(&self, filters: &[GatewayFilter]) -> Option { + self.filter(filters) + .into_iter() .choose(&mut rand::thread_rng()) - .cloned() } pub fn remove_gateway(&mut self, entry_gateway: &Gateway) { @@ -429,6 +626,10 @@ impl GatewayList { .retain(|gateway| gateway.identity() != entry_gateway.identity()); } + pub fn gw_type(&self) -> Option { + self.gw_type + } + pub fn len(&self) -> usize { self.gateways.len() } @@ -438,25 +639,11 @@ impl GatewayList { } pub fn into_exit_gateways(self) -> GatewayList { - let gw = self - .gateways - .into_iter() - .filter(Gateway::has_ipr_address) - .collect(); - Self::new(gw) + Self::new(self.gw_type, self.filter(&[GatewayFilter::Exit])) } pub fn into_vpn_gateways(self) -> GatewayList { - let gw = self - .gateways - .into_iter() - .filter(Gateway::has_authenticator_address) - .collect(); - Self::new(gw) - } - - pub fn into_countries(self) -> Vec { - self.all_countries() + Self::new(self.gw_type, self.filter(&[GatewayFilter::Vpn])) } pub fn into_inner(self) -> Vec { @@ -498,7 +685,7 @@ impl nym_client_core::init::helpers::ConnectableGateway for Gateway { } } -#[derive(Debug, Clone, Hash, PartialEq, Eq, strum::EnumIter)] +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, strum::EnumIter)] pub enum GatewayType { MixnetEntry, MixnetExit, @@ -534,3 +721,199 @@ impl From for nym_vpn_api_client::types::GatewayType { } } } + +#[derive(Debug, Clone, PartialEq)] +pub enum GatewayFilter { + MinScore(ScoreValue), // Mixnet or Wg score + Country(String), // Two-letter ISO country code + Region(String), // Region name + Residential, // Has a residential ASN + Exit, // Has an IPR address + Vpn, // Has an authenticator address +} + +#[derive(Debug, Clone, PartialEq)] +pub struct GatewayFilters { + pub gw_type: GatewayType, + pub filters: Vec, +} + +#[cfg(test)] +mod tests { + use super::*; + + // Create a list of Gateways with different properties set for testing + fn sample_gateway_list(gw_type: GatewayType) -> GatewayList { + let asn = Asn { + asn: "AS12345".to_string(), + name: "Test ASN".to_string(), + kind: AsnKind::Residential, + }; + let addr = "MNrmKzuKjNdbEhfPUzVNfjw63oBQNSayqoQKGL4JjAV.6fDcSN6faGpvA3pd3riCwjpzXc7RQfWmGMa82UVoEwKE@d5adfJNtcdZW2XwK85JAAU8nXAs9JCPYn2RNvDLZn4e"; + let ipr = IpPacketRouterAddress::try_from_base58_string(addr).unwrap(); + let aa = AuthAddress::try_from_base58_string(addr).unwrap(); + let variables = [ + ("US", "CA", None, Some(ipr), Some(aa)), // Gateway 1 + ("US", "NY", Some(asn.clone()), None, None), // Gateway 2 + ("DE", "BE", None, None, Some(aa)), // Gateway 3 + ("FR", "Aquitaine", Some(asn.clone()), None, Some(aa)), // Gateway 4 + ("US", "TX", Some(asn.clone()), Some(ipr), None), // Gateway 5 + ("GB", "Hampshire", None, None, None), // Gateway 6 + ]; + + let mut instance = 0; + let gateways: Vec = variables + .into_iter() + .map(|(country, region, asn, ipr, aa)| { + instance += 1; + Gateway { + identity: NodeIdentity::from_base58_string( + "7CWjY3QFoA9dgE535u9bQiXCfzgMZvSpJu842GA1Wn42", + ) + .unwrap(), + moniker: format!("Gateway {instance}"), + location: Some(Location { + two_letter_iso_country_code: country.to_string(), + region: region.to_string(), + asn, + ..Default::default() + }), + ipr_address: ipr, + authenticator_address: aa, + bridge_params: None, + last_probe: None, + ips: Vec::new(), + host: None, + clients_ws_port: None, + clients_wss_port: None, + mixnet_performance: Some(Percent::from_percentage_value(75).unwrap()), + mixnet_score: None, + wg_performance: Some(Performance { + last_updated_utc: "2024-01-01T00:00:00Z".to_string(), + score: ScoreValue::High, + load: ScoreValue::Low, + uptime_percentage_last_24_hours: 0.75, + }), + version: None, + } + }) + .collect(); + GatewayList::new(Some(gw_type), gateways) + } + + #[test] + fn test_gateway_filter_score() { + let wg_list = sample_gateway_list(GatewayType::Wg); + let mixnet_entry_list = sample_gateway_list(GatewayType::MixnetEntry); + let mixnet_exit_list = sample_gateway_list(GatewayType::MixnetExit); + + let gws = wg_list.filter(&[GatewayFilter::MinScore(ScoreValue::High)]); + assert_eq!(gws.len(), 6); + let gws = wg_list.filter(&[GatewayFilter::MinScore(ScoreValue::Medium)]); + assert_eq!(gws.len(), 6); + let gws = wg_list.filter(&[GatewayFilter::MinScore(ScoreValue::Low)]); + assert_eq!(gws.len(), 6); + + let gws = mixnet_entry_list.filter(&[GatewayFilter::MinScore(ScoreValue::High)]); + assert_eq!(gws.len(), 0); + let gws = mixnet_entry_list.filter(&[GatewayFilter::MinScore(ScoreValue::Medium)]); + assert_eq!(gws.len(), 6); + let gws = mixnet_entry_list.filter(&[GatewayFilter::MinScore(ScoreValue::Low)]); + assert_eq!(gws.len(), 6); + + let gws = mixnet_exit_list.filter(&[GatewayFilter::MinScore(ScoreValue::High)]); + assert_eq!(gws.len(), 0); + let gws = mixnet_exit_list.filter(&[GatewayFilter::MinScore(ScoreValue::Medium)]); + assert_eq!(gws.len(), 6); + let gws = mixnet_exit_list.filter(&[GatewayFilter::MinScore(ScoreValue::Low)]); + assert_eq!(gws.len(), 6); + } + + #[test] + fn test_gateway_filter_exit_nodes() { + let gateway_list = sample_gateway_list(GatewayType::MixnetEntry); + let exit_gws = gateway_list.filter(&[GatewayFilter::Exit]); + assert_eq!(exit_gws.len(), 2); + assert_eq!(exit_gws[0].moniker, "Gateway 1"); + assert_eq!(exit_gws[1].moniker, "Gateway 5"); + } + + #[test] + fn test_gateway_filter_vpn_nodes() { + let gateway_list = sample_gateway_list(GatewayType::MixnetExit); + let vpn_gws = gateway_list.filter(&[GatewayFilter::Vpn]); + assert_eq!(vpn_gws.len(), 3); + assert_eq!(vpn_gws[0].moniker, "Gateway 1"); + assert_eq!(vpn_gws[1].moniker, "Gateway 3"); + assert_eq!(vpn_gws[2].moniker, "Gateway 4"); + } + + #[test] + fn test_gateway_filter_residential() { + let gateway_list = sample_gateway_list(GatewayType::Wg); + let residential_gws = gateway_list.filter(&[GatewayFilter::Residential]); + assert_eq!(residential_gws.len(), 3); + assert_eq!(residential_gws[0].moniker, "Gateway 2"); + assert_eq!(residential_gws[1].moniker, "Gateway 4"); + assert_eq!(residential_gws[2].moniker, "Gateway 5"); + } + + #[test] + fn test_gateway_random_country() { + let gateway_list = sample_gateway_list(GatewayType::MixnetEntry); + + assert!( + gateway_list + .choose_random(&[GatewayFilter::Country("US".into())]) + .unwrap() + .is_in_country("US") + ); + + assert!( + gateway_list + .choose_random(&[GatewayFilter::Country("DE".into())]) + .unwrap() + .is_in_country("DE") + ); + + assert!( + gateway_list + .choose_random(&[GatewayFilter::Country("BE".into())]) + .is_none() + ); + } + + #[test] + fn test_gateway_random_region() { + let gateway_list = sample_gateway_list(GatewayType::MixnetExit); + + assert!( + gateway_list + .choose_random(&[ + GatewayFilter::Country("US".into()), + GatewayFilter::Region("CA".into()) + ]) + .unwrap() + .is_in_region("CA") + ); + + assert!( + gateway_list + .choose_random(&[ + GatewayFilter::Country("GB".into()), + GatewayFilter::Region("Hampshire".into()) + ]) + .unwrap() + .is_in_region("Hampshire") + ); + + assert!( + gateway_list + .choose_random(&[ + GatewayFilter::Country("DE".into()), + GatewayFilter::Region("XZ".into()) + ]) + .is_none() + ); + } +} diff --git a/nym-gateway-directory/src/entries/ipr_addresses.rs b/nym-gateway-directory/src/entries/ipr_addresses.rs index 752ba74a541..37c596f5c0a 100644 --- a/nym-gateway-directory/src/entries/ipr_addresses.rs +++ b/nym-gateway-directory/src/entries/ipr_addresses.rs @@ -1,11 +1,11 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only - use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::addressing::nodes::NodeIdentity; +// use nym_sdk::mixnet::{NodeIdentity, Recipient}; use nym_validator_client::models::NymNodeData; -use crate::{error::Result, Error}; +use crate::{Error, error::Result}; #[derive(Debug, Copy, Clone)] pub struct IpPacketRouterAddress(Recipient); diff --git a/nym-gateway-directory/src/entries/score.rs b/nym-gateway-directory/src/entries/score.rs index 45c298f16c6..490be6c8cbf 100644 --- a/nym-gateway-directory/src/entries/score.rs +++ b/nym-gateway-directory/src/entries/score.rs @@ -7,7 +7,7 @@ pub(crate) const HIGH_SCORE_THRESHOLD: u8 = 80; pub(crate) const MEDIUM_SCORE_THRESHOLD: u8 = 60; pub(crate) const LOW_SCORE_THRESHOLD: u8 = 0; -#[derive(Clone)] +#[derive(Debug, Clone)] pub enum Score { High(u8), Medium(u8), diff --git a/nym-gateway-directory/src/error.rs b/nym-gateway-directory/src/error.rs index a796d1539ab..f7aca831023 100644 --- a/nym-gateway-directory/src/error.rs +++ b/nym-gateway-directory/src/error.rs @@ -1,6 +1,9 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only +use nym_http_api_client::HttpClientError; +use nym_validator_client::nym_api::error::NymAPIError; + #[derive(thiserror::Error, Debug)] pub enum Error { #[error("identity not formatted correctly: {identity}")] @@ -19,7 +22,7 @@ pub enum Error { ValidatorClientError(#[from] nym_validator_client::ValidatorClientError), #[error(transparent)] - VpnApiClientError(#[from] nym_vpn_api_client::VpnApiClientError), + VpnApiClientError(#[from] nym_vpn_api_client::error::VpnApiClientError), #[error("failed to resolve gateway hostname: {hostname}")] FailedToDnsResolveGateway { @@ -30,6 +33,9 @@ pub enum Error { #[error("resolved hostname {0} but no IP address found")] ResolvedHostnameButNoIp(String), + #[error("timed out while attempting to resolve hostname: {hostname}")] + HostnameResolutionTimeout { hostname: String }, + #[error("failed to lookup described gateways")] FailedToLookupDescribedGateways(#[source] nym_validator_client::ValidatorClientError), @@ -87,6 +93,30 @@ pub enum Error { #[error("no connectivity")] Offline, + + #[error("HTTP client error: {0}")] + HttpClient(#[from] Box), + + #[error("Nym API error: {source}")] + NymApi { source: Box }, + + #[error("operation cancelled")] + Cancelled, + + #[error("invalid score value: {0}. Valid values are: offline, low, medium, high")] + InvalidScoreValue(String), +} + +impl Error { + /// Returns true when no gateways matching the search criteria could be found, except when the gateway is constrained to identity + pub fn is_unmatched_non_specific_gateway(&self) -> bool { + matches!( + self, + Error::NoMatchingEntryGatewayForLocation { .. } + | Error::NoMatchingExitGatewayForLocation { .. } + | Error::FailedToSelectGatewayRandomly + ) + } } // Result type based on our error type diff --git a/nym-gateway-directory/src/gateway_cache.rs b/nym-gateway-directory/src/gateway_cache.rs new file mode 100644 index 00000000000..41e2fca5d12 --- /dev/null +++ b/nym-gateway-directory/src/gateway_cache.rs @@ -0,0 +1,312 @@ +// Copyright 2025 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use std::{ + collections::HashMap, + net::IpAddr, + time::{Duration, Instant}, +}; + +use nym_offline_monitor::ConnectivityHandle; +// use nym_sdk::mixnet::NodeIdentity; +use nym_sphinx::addressing::clients::Recipient; +use nym_sphinx::addressing::nodes::NodeIdentity; +use strum::IntoEnumIterator; +use tokio::task::JoinHandle; +use tokio_util::sync::CancellationToken; + +use crate::{ + Error, Gateway, GatewayClient, GatewayFilters, GatewayList, GatewayType, error::Result, +}; + +/// The maximum age of the cache before it is considered stale. +const MAX_CACHE_AGE: Duration = Duration::from_secs(5 * 60); + +#[derive(Clone)] +pub struct GatewayCacheHandle { + tx: tokio::sync::mpsc::UnboundedSender, +} + +impl GatewayCacheHandle { + fn new(tx: tokio::sync::mpsc::UnboundedSender) -> Self { + Self { tx } + } + + /// Refresh all gateways and countries without blocking until the operation is complete. + pub async fn refresh_all(&self) -> Result<()> { + self.tx + .send(Command::RefreshAll) + .map_err(|_| Error::Cancelled) + } + + /// Lookup gateways waiting for any pending fetch request or initiating one if needed. + pub async fn lookup_gateways(&self, gw_type: GatewayType) -> Result { + let (tx, rx) = tokio::sync::oneshot::channel(); + self.tx + .send(Command::LookupGateways(gw_type, tx)) + .map_err(|_| Error::Cancelled)?; + rx.await.map_err(|_| Error::Cancelled)? + } + + pub async fn lookup_filtered_gateways(&self, filters: GatewayFilters) -> Result> { + let (tx, rx) = tokio::sync::oneshot::channel(); + self.tx + .send(Command::LookupFilteredGateways(filters, tx)) + .map_err(|_| Error::Cancelled)?; + rx.await.map_err(|_| Error::Cancelled)? + } + + /// Lookup gateway IP address waiting for any pending fetch request or initiating one if needed. + pub async fn lookup_gateway_ip(&self, gateway_identity: String) -> Result { + let (tx, rx) = tokio::sync::oneshot::channel(); + self.tx + .send(Command::LookupGatewayIp(gateway_identity, tx)) + .map_err(|_| Error::Cancelled)?; + rx.await.map_err(|_| Error::Cancelled)? + } + + pub fn replace_gateway_client(&mut self, gateway_client: GatewayClient) -> Result<()> { + self.tx + .send(Command::ReplaceGatewayClient(Box::new(gateway_client))) + .map_err(|_| Error::Cancelled) + } +} + +enum Command { + RefreshAll, + LookupGateways( + GatewayType, + tokio::sync::oneshot::Sender>, + ), + LookupFilteredGateways( + GatewayFilters, + tokio::sync::oneshot::Sender>>, + ), + LookupGatewayIp( + String, // gateway_identity + tokio::sync::oneshot::Sender>, + ), + ReplaceGatewayClient(Box), +} + +pub struct GatewayCache { + // The channel for receiving commands + command_rx: tokio::sync::mpsc::UnboundedReceiver, + + // The underlying client that actually does the work + gateway_client: GatewayClient, + + // The cached gateways and their last updated time + cached_gateways: HashMap, + + // The connectivity handle to check if we are online + connectivity_handle: ConnectivityHandle, + + /// Whether the initial refresh has been performed + is_performed_initial_refresh: bool, + + // Shutdown token + shutdown_token: CancellationToken, +} + +impl GatewayCache { + pub fn spawn( + gateway_client: GatewayClient, + connectivity_handle: ConnectivityHandle, + shutdown_token: CancellationToken, + ) -> (GatewayCacheHandle, JoinHandle<()>) { + let (command_tx, command_rx) = tokio::sync::mpsc::unbounded_channel(); + + let inner = Self { + gateway_client, + connectivity_handle, + command_rx, + cached_gateways: HashMap::default(), + is_performed_initial_refresh: false, + shutdown_token, + }; + let join_handle = tokio::spawn(inner.run()); + (GatewayCacheHandle::new(command_tx), join_handle) + } + + async fn run(mut self) { + if self.connectivity_handle.connectivity().await.is_online() { + self.perform_initial_fetch_once().await; + } + + loop { + tokio::select! { + Some(cmd) = self.command_rx.recv() => { + match cmd { + Command::RefreshAll => { + self.refresh_all().await; + } + Command::LookupGateways(gw_type, tx) => { + tx.send(self.lookup_gateways(gw_type).await).ok(); + } + Command::LookupFilteredGateways(filters, tx) => { + let gw_vec = self.lookup_filtered_gateways(filters).await; + tx.send(gw_vec).ok(); + } + Command::LookupGatewayIp(gateway_identity, tx) => { + tx.send(self.lookup_gateway_ip(&gateway_identity).await).ok(); + } + Command::ReplaceGatewayClient(gateway_client) => { + self.replace_gateway_client(*gateway_client) + } + } + } + Some(status) = self.connectivity_handle.next() => { + if status.is_online() { + self.perform_initial_fetch_once().await; + } + } + _ = self.shutdown_token.cancelled() => { + break; + } + } + } + } + + async fn perform_initial_fetch_once(&mut self) { + if !self.is_performed_initial_refresh { + tracing::info!("Performing initial refresh"); + self.is_performed_initial_refresh = true; + self.refresh_all().await; + } + } + + fn replace_gateway_client(&mut self, gateway_client: GatewayClient) { + let old_config = self.gateway_client.get_config(); + let new_config = gateway_client.get_config(); + + self.gateway_client = gateway_client; + + // Invalidate cache immediately if gateway performance or thresholds change + if new_config.min_gateway_performance != old_config.min_gateway_performance + || new_config.mix_score_thresholds != old_config.mix_score_thresholds + || new_config.wg_score_thresholds != old_config.wg_score_thresholds + { + self.cached_gateways.clear(); + } + } + + async fn refresh_all(&mut self) { + let gw_types = self.get_stale_gateway_list_types(); + + if !gw_types.is_empty() { + tracing::info!("Refreshing gateways: {:?}", gw_types,); + self.refresh(gw_types).await; + } + } + + fn get_stale_gateway_list_types(&self) -> Vec { + GatewayType::iter() + .filter(|gw_type| !self.is_gateways_current(gw_type)) + .collect() + } + + async fn refresh(&mut self, gw_list_types: Vec) { + if self.connectivity_handle.connectivity().await.is_offline() { + tracing::debug!("Not refreshing gateways because we are not connected"); + return; + } + + tracing::info!("Refreshing gateway lists: {gw_list_types:?}"); + + let mut tasks = tokio::task::JoinSet::new(); + + for gw_type in gw_list_types { + let client = self.gateway_client.clone(); + tasks.spawn(async move { + let res = client.lookup_gateways(gw_type).await; + (gw_type, res) + }); + } + + while let Some(res) = tasks.join_next().await { + match res { + Ok((gw_type, r)) => match r { + Ok(refreshed_gateways) => { + tracing::info!("Refreshed gateways for {gw_type:?}"); + self.cached_gateways + .insert(gw_type, (refreshed_gateways, Instant::now())); + } + Err(err) => { + tracing::warn!("Failed to refresh gateways for {gw_type:?}: {err}"); + } + }, + Err(err) => { + tracing::error!("Failed to join on refresh task: {err}"); + } + } + } + } + + fn is_gateways_current(&self, gw_type: &GatewayType) -> bool { + self.cached_gateways + .get(gw_type) + .as_ref() + .map(|(_, last_updated)| last_updated.elapsed() < MAX_CACHE_AGE) + .unwrap_or_default() + } + + async fn refresh_gateways(&mut self, gw_type: GatewayType) -> Result { + if let Some((gw_list, last_updated)) = self.cached_gateways.get(&gw_type) + && last_updated.elapsed() < MAX_CACHE_AGE + { + Ok(gw_list.clone()) + } else { + if self.connectivity_handle.connectivity().await.is_offline() { + tracing::warn!("Not refreshing countries because we are not connected"); + return Err(Error::Offline); + } + + let refreshed_gateways = self.gateway_client.lookup_gateways(gw_type).await?; + + self.cached_gateways + .insert(gw_type, (refreshed_gateways.clone(), Instant::now())); + + Ok(refreshed_gateways) + } + } + + async fn lookup_gateways(&mut self, gw_type: GatewayType) -> Result { + let refresh_result = self.refresh_gateways(gw_type).await; + + // Regardless of if we managed to refresh the cache, we return the cached gateways if they + // exist. They should be the most recent one we can muster + if let Some((gateways, _)) = self.cached_gateways.get(&gw_type) { + Ok(gateways.clone()) + } else { + refresh_result + } + } + + async fn lookup_filtered_gateways(&mut self, filters: GatewayFilters) -> Result> { + let gw_list = self.lookup_gateways(filters.gw_type).await?; + Ok(gw_list.filter(&filters.filters)) + } + + async fn lookup_gateway_ip(&mut self, gateway_identity: &str) -> Result { + // If we have a populated list of gateways, we should always be able to find the IP there. + if let Ok(identity) = NodeIdentity::from_base58_string(gateway_identity) { + for (_, (gateways, _)) in self.cached_gateways.iter() { + if let Some(ip) = gateways + .node_with_identity(&identity) + .and_then(Gateway::lookup_ip) + { + return Ok(ip); + } + } + } else { + tracing::warn!("Failed to parse gateway identity: {gateway_identity}"); + } + + // Fallback + tracing::warn!("Using fallback to lookup gateway IP"); + self.gateway_client + .lookup_gateway_ip(gateway_identity) + .await + } +} diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index d06bca4ffb3..cdbc8eb5d55 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -7,19 +7,18 @@ use std::{ }; use nym_http_api_client::UserAgent; -use nym_validator_client::{models::NymNodeDescription, nym_nodes::SkimmedNode, NymApiClient}; +use nym_validator_client::{ + models::NymNodeDescription, nym_api::NymApiClientExt, nym_nodes::SkimmedNodesWithMetadata, +}; use nym_vpn_api_client::types::{GatewayMinPerformance, Percent, ScoreThresholds}; use rand::{prelude::SliceRandom, thread_rng}; use tracing::{debug, error, warn}; use url::Url; use crate::{ - entries::{ - country::Country, - gateway::{Gateway, GatewayList, GatewayType, NymNodeList}, - }, - error::Result, Error, NymNode, + entries::gateway::{Gateway, GatewayList, GatewayType, NymNodeList}, + error::Result, }; #[derive(Clone, Debug)] @@ -109,7 +108,7 @@ impl ResolvedConfig { #[derive(Clone)] pub struct GatewayClient { - api_client: NymApiClient, + api_client: nym_http_api_client::Client, nym_vpn_api_client: Option, nyxd_url: Url, min_gateway_performance: Option, @@ -127,7 +126,11 @@ impl GatewayClient { user_agent: UserAgent, static_nym_api_ip_addresses: Option<&[SocketAddr]>, ) -> Result { - let api_client = NymApiClient::new_with_user_agent(config.api_url, user_agent.clone()); + let api_client = nym_http_api_client::Client::builder(config.api_url.clone()) + .map_err(|e| Error::FailedToLookupDescribedGateways(e.into()))? + .with_user_agent(user_agent.clone()) + .build() + .map_err(|e| Error::FailedToLookupDescribedGateways(e.into()))?; let nym_vpn_api_client = config .nym_vpn_api_url .map(|url| { @@ -149,6 +152,42 @@ impl GatewayClient { }) } + pub fn from_network_with_resolver_overrides( + config: Config, + network_details: &nym_network_defaults::NymNetworkDetails, + user_agent: UserAgent, + static_nym_api_ip_addresses: Option<&[SocketAddr]>, + ) -> Result { + // Use the new unified HTTP client with domain fronting for the main API client + let api_client = nym_http_api_client::ClientBuilder::from_network(network_details) + .map_err(Box::new)? + .with_user_agent(user_agent.clone()) + .build() + .map_err(Box::new)?; + + // Use domain fronting with resolver overrides for VPN API client + let nym_vpn_api_client = if config.nym_vpn_api_url.is_some() { + Some( + nym_vpn_api_client::VpnApiClient::from_network_with_resolver_overrides( + network_details, + user_agent.clone(), + static_nym_api_ip_addresses, + )?, + ) + } else { + None + }; + + Ok(GatewayClient { + api_client, + nym_vpn_api_client, + nyxd_url: config.nyxd_url, + min_gateway_performance: config.min_gateway_performance, + mix_score_thresholds: config.mix_score_thresholds, + wg_score_thresholds: config.wg_score_thresholds, + }) + } + /// Return the config of this instance. pub fn get_config(&self) -> Config { Config { @@ -181,23 +220,29 @@ impl GatewayClient { self.api_client .get_all_described_nodes() .await - .map_err(Error::FailedToLookupDescribedGateways) + .map_err(|e| Error::NymApi { + source: Box::new(e), + }) } - async fn lookup_skimmed_gateways(&self) -> Result> { + async fn lookup_skimmed_gateways(&self) -> Result { debug!("Fetching skimmed entry assigned nodes from nym-api..."); self.api_client - .get_all_basic_entry_assigned_nodes() + .get_all_basic_entry_assigned_nodes_with_metadata() .await - .map_err(Error::FailedToLookupSkimmedGateways) + .map_err(|e| Error::NymApi { + source: Box::new(e), + }) } - async fn lookup_skimmed_nodes(&self) -> Result> { + async fn lookup_skimmed_nodes(&self) -> Result { debug!("Fetching skimmed entry assigned nodes from nym-api..."); self.api_client - .get_all_basic_nodes() + .get_all_basic_nodes_with_metadata() .await - .map_err(Error::FailedToLookupSkimmedNodes) + .map_err(|e| Error::NymApi { + source: Box::new(e), + }) } pub async fn lookup_gateway_ip_from_nym_api(&self, gateway_identity: &str) -> Result { @@ -205,7 +250,10 @@ impl GatewayClient { let mut ips = self .api_client .get_all_described_nodes() - .await? + .await + .map_err(|e| Error::NymApi { + source: Box::new(e), + })? .iter() .find_map(|node| { if node @@ -248,38 +296,42 @@ impl GatewayClient { } pub async fn lookup_all_gateways_from_nym_api(&self) -> Result { + let skimmed_gateways = self.lookup_skimmed_gateways().await?; + let key_rotation_id = skimmed_gateways.metadata.rotation_id; + let mut gateways = self .lookup_described_nodes() .await? .into_iter() .filter(|node| node.description.declared_role.entry) .filter_map(|gw| { - Gateway::try_from(gw) + Gateway::try_from_node_description(gw, key_rotation_id) .inspect_err(|err| error!("Failed to parse gateway: {err}")) .ok() }) .collect::>(); - let skimmed_gateways = self.lookup_skimmed_gateways().await?; - append_performance(&mut gateways, skimmed_gateways); + append_performance(&mut gateways, skimmed_gateways.nodes); filter_on_mixnet_min_performance(&mut gateways, &self.min_gateway_performance); - Ok(GatewayList::new(gateways)) + Ok(GatewayList::new(None, gateways)) } pub async fn lookup_all_nymnodes(&self) -> Result { + let skimmed_nodes = self.lookup_skimmed_nodes().await?; + let key_rotation_id = skimmed_nodes.metadata.rotation_id; + let mut nodes = self .lookup_described_nodes() .await? .into_iter() .filter_map(|gw| { - NymNode::try_from(gw) + NymNode::try_from_node_description(gw, key_rotation_id) .inspect_err(|err| error!("Failed to parse node: {err}")) .ok() }) .collect::>(); - let skimmed_nodes = self.lookup_skimmed_nodes().await?; - append_performance(&mut nodes, skimmed_nodes); + append_performance(&mut nodes, skimmed_nodes.nodes); filter_on_mixnet_min_performance(&mut nodes, &self.min_gateway_performance); - Ok(GatewayList::new(nodes)) + Ok(GatewayList::new(None, nodes)) } pub async fn lookup_gateways_from_nym_api(&self, gw_type: GatewayType) -> Result { @@ -345,15 +397,12 @@ impl GatewayClient { .inspect_err(|err| error!("Failed to parse gateway: {err}")) .ok() .map(|mut gw| { - gw.update_to_new_thresholds( - self.mix_score_thresholds, - self.wg_score_thresholds, - ); + gw.update_to_new_thresholds(self.mix_score_thresholds); gw }) }) .collect(); - Ok(GatewayList::new(gateways)) + Ok(GatewayList::new(None, gateways)) } else { warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); self.lookup_all_gateways_from_nym_api().await @@ -372,37 +421,17 @@ impl GatewayClient { .inspect_err(|err| error!("Failed to parse gateway: {err}")) .ok() .map(|mut gw| { - gw.update_to_new_thresholds( - self.mix_score_thresholds, - self.wg_score_thresholds, - ); + gw.update_to_new_thresholds(self.mix_score_thresholds); gw }) }) .collect(); - Ok(GatewayList::new(gateways)) + Ok(GatewayList::new(Some(gw_type), gateways)) } else { warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); self.lookup_gateways_from_nym_api(gw_type).await } } - - pub async fn lookup_countries(&self, gw_type: GatewayType) -> Result> { - if let Some(nym_vpn_api_client) = &self.nym_vpn_api_client { - debug!("Fetching entry countries from nym-vpn-api..."); - Ok(nym_vpn_api_client - .get_gateway_countries_by_type(gw_type.into(), self.min_gateway_performance) - .await? - .into_iter() - .map(Country::from) - .collect()) - } else { - warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); - self.lookup_gateways_from_nym_api(gw_type) - .await - .map(GatewayList::into_countries) - } - } } // Append the performance to the gateways. This is a temporary hack until the nymvpn.com endpoints @@ -431,78 +460,15 @@ fn filter_on_mixnet_min_performance( gateways: &mut Vec, min_gateway_performance: &Option, ) { - if let Some(min_performance) = min_gateway_performance { - if let Some(mixnet_min_performance) = min_performance.mixnet_min_performance { - tracing::debug!( - "Filtering gateways based on mixnet_min_performance: {:?}", - min_performance - ); - gateways.retain(|gateway| { - gateway.mixnet_performance.unwrap_or_default() >= mixnet_min_performance - }); - } - } -} - -#[cfg(test)] -mod test { - use nym_http_api_client::UserAgent; - - use super::*; - - fn user_agent() -> UserAgent { - UserAgent { - application: "test".to_string(), - version: "0.0.1".to_string(), - platform: "test".to_string(), - git_commit: "test".to_string(), - } - } - - fn new_mainnet() -> Config { - let mainnet_network_defaults = nym_sdk::NymNetworkDetails::default(); - let default_nyxd_url = mainnet_network_defaults - .endpoints - .first() - .expect("rust sdk mainnet default incorrectly configured") - .nyxd_url(); - let default_api_url = mainnet_network_defaults - .endpoints - .first() - .expect("rust sdk mainnet default incorrectly configured") - .api_url() - .expect("rust sdk mainnet default api_url not parseable"); - - let default_nym_vpn_api_url = mainnet_network_defaults - .nym_vpn_api_url() - .expect("rust sdk mainnet default nym-vpn-api url not parseable"); - - Config { - nyxd_url: default_nyxd_url, - api_url: default_api_url, - nym_vpn_api_url: Some(default_nym_vpn_api_url), - min_gateway_performance: None, - mix_score_thresholds: None, - wg_score_thresholds: None, - } - } - - #[tokio::test] - async fn lookup_described_gateways() { - let config = new_mainnet(); - let client = GatewayClient::new(config, user_agent()).unwrap(); - let gateways = client.lookup_described_nodes().await.unwrap(); - assert!(!gateways.is_empty()); - } - - #[tokio::test] - async fn lookup_gateways_in_nym_vpn_api() { - let config = new_mainnet(); - let client = GatewayClient::new(config, user_agent()).unwrap(); - let gateways = client - .lookup_gateways(GatewayType::MixnetExit) - .await - .unwrap(); - assert!(!gateways.is_empty()); + if let Some(min_performance) = min_gateway_performance + && let Some(mixnet_min_performance) = min_performance.mixnet_min_performance + { + tracing::debug!( + "Filtering gateways based on mixnet_min_performance: {:?}", + min_performance + ); + gateways.retain(|gateway| { + gateway.mixnet_performance.unwrap_or_default() >= mixnet_min_performance + }); } } diff --git a/nym-gateway-directory/src/helpers.rs b/nym-gateway-directory/src/helpers.rs index b869a2c3947..07f1e07fbaa 100644 --- a/nym-gateway-directory/src/helpers.rs +++ b/nym-gateway-directory/src/helpers.rs @@ -1,23 +1,42 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use std::net::{IpAddr, SocketAddr}; +use std::{ + net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}, + time::Duration, +}; use nym_common::trace_err_chain; use nym_http_api_client::HickoryDnsResolver; -use crate::{error::Result, gateway_client::ResolvedConfig, Config, Error}; +use crate::{Config, Error, error::Result, gateway_client::ResolvedConfig}; + +// be generous with the resolution timeout +const HOSTNAME_RESOLUTION_TIMEOUT: Duration = Duration::from_secs(10); async fn try_resolve_hostname(hostname: &str) -> Result> { tracing::debug!("Trying to resolve hostname: {hostname}"); let resolver = HickoryDnsResolver::default(); - let addrs = resolver.resolve_str(hostname).await.map_err(|err| { - trace_err_chain!(err, "Failed to resolve gateway hostname"); - Error::FailedToDnsResolveGateway { - hostname: hostname.to_string(), - source: err, - } - })?; + + let addrs = + match tokio::time::timeout(HOSTNAME_RESOLUTION_TIMEOUT, resolver.resolve_str(hostname)) + .await + { + Ok(Ok(addrs)) => addrs, + Ok(Err(err)) => { + trace_err_chain!(err, "Failed to resolve hostname"); + return Err(Error::FailedToDnsResolveGateway { + hostname: hostname.to_string(), + source: err, + }); + } + Err(_timeout) => { + return Err(Error::HostnameResolutionTimeout { + hostname: hostname.to_string(), + }); + } + }; + tracing::debug!("Resolved to: {addrs:?}"); let ips = addrs.iter().collect::>(); @@ -62,3 +81,14 @@ pub async fn resolve_config(config: &Config) -> Result { nym_vpn_api_socket_addrs, }) } + +pub fn split_ips(ips: Vec) -> (Vec, Vec) { + ips.into_iter() + .fold((vec![], vec![]), |(mut v4, mut v6), ip| { + match ip { + IpAddr::V4(ipv4_addr) => v4.push(ipv4_addr), + IpAddr::V6(ipv6_addr) => v6.push(ipv6_addr), + } + (v4, v6) + }) +} diff --git a/nym-gateway-directory/src/lib.rs b/nym-gateway-directory/src/lib.rs index 0744b55eadf..94e5d19c051 100644 --- a/nym-gateway-directory/src/lib.rs +++ b/nym-gateway-directory/src/lib.rs @@ -1,30 +1,30 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -mod caching_client; mod entries; mod error; +pub mod gateway_cache; mod gateway_client; mod helpers; - use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::addressing::nodes::NodeIdentity; -pub use nym_vpn_api_client::types::{GatewayMinPerformance, Percent}; +pub use nym_vpn_api_client::types::{GatewayMinPerformance, NaiveFloat, Percent}; pub use crate::{ - caching_client::CachingGatewayClient, entries::{ - auth_addresses::{AuthAddress, AuthAddresses}, + auth_addresses::AuthAddress, country::Country, entry_point::EntryPoint, exit_point::ExitPoint, gateway::{ - Entry, Exit, Gateway, GatewayList, GatewayType, Location, NymNode, Probe, ProbeOutcome, + Asn, AsnKind, Entry, Exit, Gateway, GatewayFilter, GatewayFilters, GatewayList, + GatewayType, Location, NymNode, Performance, Probe, ProbeOutcome, ScoreValue, }, ipr_addresses::IpPacketRouterAddress, score::Score, }, error::Error, + gateway_cache::{GatewayCache, GatewayCacheHandle}, gateway_client::{Config, GatewayClient, ResolvedConfig}, - helpers::resolve_config, + helpers::{resolve_config, split_ips}, }; From ff95a1ff232eaaf4dd671c7ff78d8fadeb083394 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 10:29:20 +0100 Subject: [PATCH 061/139] Fix gw directory api change in ipr wrapper --- Cargo.lock | 110 ++++++++++++------ nym-gateway-directory/Cargo.toml | 2 + nym-gateway-directory/src/gateway_client.rs | 9 +- .../mixnet_stream_wrapper_ipr.rs | 2 +- 4 files changed, 83 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 06daa94d751..77f01ac9e83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2287,7 +2287,16 @@ version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "dirs-sys", + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", ] [[package]] @@ -2298,10 +2307,22 @@ checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.4.6", "windows-sys 0.48.0", ] +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.61.2", +] + [[package]] name = "dispatch2" version = "0.3.0" @@ -2412,7 +2433,7 @@ dependencies = [ "bytes", "clap", "dashmap", - "dirs", + "dirs 5.0.1", "futures", "nym-bin-common 0.6.0", "nym-crypto 0.4.0", @@ -3813,7 +3834,7 @@ dependencies = [ "anyhow", "bip39", "clap", - "dirs", + "dirs 5.0.1", "importer-contract", "nym-bin-common 0.6.0", "nym-mixnet-contract-common 0.6.0", @@ -5080,7 +5101,7 @@ dependencies = [ [[package]] name = "nym-api-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "bs58", "cosmrs", @@ -5228,7 +5249,7 @@ dependencies = [ [[package]] name = "nym-bin-common" version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "const-str", "log", @@ -5334,7 +5355,7 @@ version = "1.1.64" dependencies = [ "bs58", "clap", - "dirs", + "dirs 5.0.1", "futures", "log", "nym-bandwidth-controller", @@ -5528,7 +5549,7 @@ dependencies = [ [[package]] name = "nym-coconut-dkg-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -5575,7 +5596,7 @@ dependencies = [ [[package]] name = "nym-compact-ecash" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "bincode", "bls12_381", @@ -5599,7 +5620,7 @@ dependencies = [ name = "nym-config" version = "0.1.0" dependencies = [ - "dirs", + "dirs 5.0.1", "handlebars", "log", "nym-network-defaults 0.1.0", @@ -5612,9 +5633,9 @@ dependencies = [ [[package]] name = "nym-config" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ - "dirs", + "dirs 6.0.0", "handlebars", "log", "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -5778,7 +5799,7 @@ dependencies = [ [[package]] name = "nym-credential-proxy-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "async-trait", "nym-credentials 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -5789,6 +5810,7 @@ dependencies = [ "schemars 0.8.22", "serde", "serde_json", + "serde_with", "time", "uuid", "wasmtimer", @@ -5887,7 +5909,7 @@ dependencies = [ [[package]] name = "nym-credentials" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "bincode", "bls12_381", @@ -5928,7 +5950,7 @@ dependencies = [ [[package]] name = "nym-credentials-interface" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "bls12_381", "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -5977,7 +5999,7 @@ dependencies = [ [[package]] name = "nym-crypto" version = "0.4.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "aes", "base64 0.22.1", @@ -6036,7 +6058,7 @@ dependencies = [ [[package]] name = "nym-ecash-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "bs58", "cosmwasm-schema", @@ -6081,7 +6103,7 @@ dependencies = [ [[package]] name = "nym-ecash-signer-check-types" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -6105,7 +6127,7 @@ dependencies = [ [[package]] name = "nym-ecash-time" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "time", @@ -6126,7 +6148,7 @@ dependencies = [ [[package]] name = "nym-exit-policy" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "serde", "serde_json", @@ -6264,6 +6286,7 @@ dependencies = [ "nym-vpn-api-client", "rand 0.8.5", "serde", + "serde_json", "strum", "thiserror 2.0.17", "tokio", @@ -6370,7 +6393,7 @@ dependencies = [ [[package]] name = "nym-group-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "cosmwasm-schema", "cw-controllers", @@ -6620,7 +6643,7 @@ dependencies = [ [[package]] name = "nym-mixnet-contract-common" version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "bs58", "cosmwasm-schema", @@ -6683,7 +6706,7 @@ dependencies = [ [[package]] name = "nym-multisig-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -6713,7 +6736,7 @@ dependencies = [ [[package]] name = "nym-network-defaults" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "cargo_metadata 0.19.2", "dotenvy", @@ -6769,7 +6792,7 @@ dependencies = [ "async-trait", "bs58", "clap", - "dirs", + "dirs 5.0.1", "futures", "humantime-serde", "ipnetwork 0.20.0", @@ -6939,7 +6962,7 @@ dependencies = [ [[package]] name = "nym-node-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "celes", "humantime", @@ -7128,7 +7151,7 @@ dependencies = [ [[package]] name = "nym-noise-keys" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", "schemars 0.8.22", @@ -7221,7 +7244,7 @@ dependencies = [ [[package]] name = "nym-pemstore" version = "0.3.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "pem", "tracing", @@ -7244,7 +7267,7 @@ dependencies = [ [[package]] name = "nym-performance-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -7334,7 +7357,7 @@ dependencies = [ "bytes", "clap", "dashmap", - "dirs", + "dirs 5.0.1", "dotenvy", "futures", "hex", @@ -7400,7 +7423,7 @@ dependencies = [ [[package]] name = "nym-serde-helpers" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "base64 0.22.1", "bs58", @@ -7493,7 +7516,7 @@ name = "nym-socks5-client-core" version = "0.1.0" dependencies = [ "anyhow", - "dirs", + "dirs 5.0.1", "futures", "log", "nym-bandwidth-controller", @@ -7724,7 +7747,7 @@ dependencies = [ [[package]] name = "nym-sphinx-types" version = "0.2.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "thiserror 2.0.17", ] @@ -7849,7 +7872,7 @@ dependencies = [ [[package]] name = "nym-ticketbooks-merkle" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -7995,7 +8018,7 @@ dependencies = [ [[package]] name = "nym-validator-client" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "async-trait", "base64 0.22.1", @@ -8123,7 +8146,7 @@ dependencies = [ [[package]] name = "nym-vesting-contract-common" version = "0.7.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -8334,7 +8357,7 @@ dependencies = [ [[package]] name = "nym-wireguard-types" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#56ad1c6c8ed3d2aa004ac0ed4b1a68e6f0d666e2" +source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" dependencies = [ "base64 0.22.1", "log", @@ -9498,6 +9521,17 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.17", +] + [[package]] name = "ref-cast" version = "1.0.25" @@ -10591,7 +10625,7 @@ name = "smolmix" version = "0.1.0" dependencies = [ "bytes", - "dirs", + "dirs 5.0.1", "nym-bin-common 0.6.0", "nym-ip-packet-requests", "nym-sdk", diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 7884d648156..a0454e535aa 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -41,5 +41,7 @@ tokio-util.workspace = true tracing.workspace = true url.workspace = true +serde_json.workspace = true + [dev-dependencies] tokio = { workspace = true, features = ["full"] } diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index cdbc8eb5d55..662ab75a194 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -165,11 +165,18 @@ impl GatewayClient { .build() .map_err(Box::new)?; + // Gets around diff version imports compiler issue for the moment + let network_details_compat = { + let json = serde_json::to_string(network_details) + .expect("Failed to serialize network details"); + serde_json::from_str(&json).expect("Failed to deserialize network details") + }; + // Use domain fronting with resolver overrides for VPN API client let nym_vpn_api_client = if config.nym_vpn_api_url.is_some() { Some( nym_vpn_api_client::VpnApiClient::from_network_with_resolver_overrides( - network_details, + &network_details_compat, user_agent.clone(), static_nym_api_ip_addresses, )?, diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 117fbc21bc3..3163950764f 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -87,7 +87,7 @@ async fn get_ipr_addr(client: GatewayClient) -> Result Date: Fri, 17 Oct 2025 11:02:30 +0100 Subject: [PATCH 062/139] Clean up unused imports --- common/client-core/src/client/base_client/mod.rs | 3 --- common/task/src/connections.rs | 5 +---- nym-gateway-directory/src/entries/auth_addresses.rs | 2 -- nym-gateway-directory/src/entries/entry_point.rs | 3 +-- nym-gateway-directory/src/gateway_cache.rs | 2 -- nym-gateway-directory/src/lib.rs | 2 -- nym-ip-packet-client/Cargo.toml | 1 - sdk/rust/nym-sdk/Cargo.toml | 1 + sdk/rust/nym-sdk/src/error.rs | 2 -- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 2 +- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 5 ++--- 11 files changed, 6 insertions(+), 22 deletions(-) diff --git a/common/client-core/src/client/base_client/mod.rs b/common/client-core/src/client/base_client/mod.rs index 6f1c5dcef7a..644c2b1d430 100644 --- a/common/client-core/src/client/base_client/mod.rs +++ b/common/client-core/src/client/base_client/mod.rs @@ -37,7 +37,6 @@ use crate::init::{ }; use futures::channel::mpsc; use futures::SinkExt; -// use log::*; use nym_bandwidth_controller::BandwidthController; use nym_client_core_config_types::{ForgetMe, RememberMe}; use nym_client_core_gateways_storage::{GatewayDetails, GatewaysDetailsStore}; @@ -68,9 +67,7 @@ use std::os::raw::c_int as RawFd; use std::path::Path; use std::sync::Arc; use time::OffsetDateTime; -use tokio::sync::mpsc::Sender; use tokio_util::sync::{PollSendError, PollSender}; -// use tracing::*; use tracing::{debug, error, info}; use url::Url; diff --git a/common/task/src/connections.rs b/common/task/src/connections.rs index 0bc1921438f..d0e0c4c269a 100644 --- a/common/task/src/connections.rs +++ b/common/task/src/connections.rs @@ -3,10 +3,7 @@ use futures::channel::mpsc; use serde::{Deserialize, Serialize}; -use std::{ - collections::HashMap, - time::{Duration, Instant}, -}; +use std::collections::HashMap; // const LANE_CONSIDERED_CLEAR: usize = 10; diff --git a/nym-gateway-directory/src/entries/auth_addresses.rs b/nym-gateway-directory/src/entries/auth_addresses.rs index 8f8fde3c0e8..388ee041cb7 100644 --- a/nym-gateway-directory/src/entries/auth_addresses.rs +++ b/nym-gateway-directory/src/entries/auth_addresses.rs @@ -1,9 +1,7 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -// use nym_sdk::mixnet::Recipient; use nym_sphinx::addressing::clients::Recipient; -use nym_sphinx::addressing::nodes::NodeIdentity; use crate::{Error, error::Result}; diff --git a/nym-gateway-directory/src/entries/entry_point.rs b/nym-gateway-directory/src/entries/entry_point.rs index df8adb61d72..e85a7e905a5 100644 --- a/nym-gateway-directory/src/entries/entry_point.rs +++ b/nym-gateway-directory/src/entries/entry_point.rs @@ -1,10 +1,9 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::addressing::nodes::NodeIdentity; use std::fmt::{Display, Formatter}; -// use nym_sdk::mixnet::NodeIdentity; + use serde::{Deserialize, Serialize}; use tracing::debug; diff --git a/nym-gateway-directory/src/gateway_cache.rs b/nym-gateway-directory/src/gateway_cache.rs index 41e2fca5d12..e0afa312881 100644 --- a/nym-gateway-directory/src/gateway_cache.rs +++ b/nym-gateway-directory/src/gateway_cache.rs @@ -8,8 +8,6 @@ use std::{ }; use nym_offline_monitor::ConnectivityHandle; -// use nym_sdk::mixnet::NodeIdentity; -use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::addressing::nodes::NodeIdentity; use strum::IntoEnumIterator; use tokio::task::JoinHandle; diff --git a/nym-gateway-directory/src/lib.rs b/nym-gateway-directory/src/lib.rs index 94e5d19c051..661a1d40ece 100644 --- a/nym-gateway-directory/src/lib.rs +++ b/nym-gateway-directory/src/lib.rs @@ -6,8 +6,6 @@ mod error; pub mod gateway_cache; mod gateway_client; mod helpers; -use nym_sphinx::addressing::clients::Recipient; -use nym_sphinx::addressing::nodes::NodeIdentity; pub use nym_vpn_api_client::types::{GatewayMinPerformance, NaiveFloat, Percent}; pub use crate::{ diff --git a/nym-ip-packet-client/Cargo.toml b/nym-ip-packet-client/Cargo.toml index f79bf112066..8d5ce3e7493 100644 --- a/nym-ip-packet-client/Cargo.toml +++ b/nym-ip-packet-client/Cargo.toml @@ -15,7 +15,6 @@ workspace = true bincode.workspace = true bytes.workspace = true futures.workspace = true -# nym-gateway-directory = { path = "../nym-gateway-directory" } nym-ip-packet-requests = { path = "../common/ip-packet-requests" } nym-sdk = {path = "../sdk/rust/nym-sdk" } thiserror.workspace = true diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index 371dc61df04..b4e25d6fd1e 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -70,6 +70,7 @@ nym-ip-packet-requests = { path = "../../../common/ip-packet-requests" } pnet_packet = { workspace = true } nym-config = { path = "../../../common/config" } + # tcpproxy dependencies clap = { workspace = true, features = ["derive"] } anyhow.workspace = true diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index ee14cd11a35..745435cb2bc 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -1,8 +1,6 @@ use nym_validator_client::nyxd::error::NyxdError; use std::path::PathBuf; -use crate::error; - use nym_ip_packet_requests::v8::response::{ConnectFailureReason, IpPacketResponseData}; /// Top-level Error enum for the mixnet client and its relevant types. diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index 4796c06ea34..24933fd11c7 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -28,7 +28,7 @@ use std::sync::Arc; use std::task::{Context, Poll}; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::sync::RwLockReadGuard; -use tokio_util::codec::{Encoder, FramedRead, FramedWrite}; +use tokio_util::codec::{Encoder, FramedRead}; use tokio_util::sync::CancellationToken; /// Client connected to the Nym mixnet. diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 3163950764f..d8ef50a73c3 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -9,7 +9,6 @@ use crate::UserAgent; use crate::{mixnet::Recipient, Error}; use bytes::Bytes; -use bytes::BytesMut; use nym_gateway_directory::{ Config as GatewayConfig, GatewayClient, GatewayType, IpPacketRouterAddress, }; @@ -27,9 +26,9 @@ use std::io; use std::pin::Pin; use std::task::{Context, Poll}; use std::time::Duration; -use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, ReadBuf}; +use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::sync::oneshot; -use tokio_util::codec::{Decoder, FramedRead}; +use tokio_util::codec::FramedRead; use tracing::{debug, error, info}; const IPR_CONNECT_TIMEOUT: Duration = Duration::from_secs(60); From 94c131b0c67269c2140461be940cfb17d5af6626 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 11:55:06 +0100 Subject: [PATCH 063/139] deprecate notice for tcpproxy module --- sdk/rust/nym-sdk/src/lib.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/rust/nym-sdk/src/lib.rs b/sdk/rust/nym-sdk/src/lib.rs index 96109488ae9..f5bbaa0f223 100644 --- a/sdk/rust/nym-sdk/src/lib.rs +++ b/sdk/rust/nym-sdk/src/lib.rs @@ -12,6 +12,9 @@ pub mod client_pool; pub mod ip_packet_client; pub mod mixnet; pub mod stream_wrapper; +#[deprecated( + note = "Functionality from this module is mostly superceded by the stream_wrapper::MixSocket and stream_wrapper::MixStreamIPR exports. This module is no longer maintained and will be removed in a future release." +)] pub mod tcp_proxy; pub use error::{Error, Result}; From 85cc7ec672a5c96e9fec55525c36fdd2de209ef8 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 11:55:27 +0100 Subject: [PATCH 064/139] remove unwraps in place of error types --- sdk/rust/nym-sdk/src/error.rs | 18 +++++++++++++ .../mixnet_stream_wrapper_ipr.rs | 25 ++++++++++--------- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index 745435cb2bc..b80fd69f9f4 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -121,6 +121,24 @@ pub enum Error { #[error("connect denied: {0:?}")] ConnectDenied(ConnectFailureReason), + + #[error("gateway directory error: {0}")] + GatewayDirectoryError(#[from] nym_gateway_directory::Error), + + #[error("did not receive Validator endpoint details")] + NoValidatorDetailsAvailable, + + #[error("did not receive URL")] + NoValidatorAPIUrl, + + #[error("did not receive NymVPN API URL")] + NoNymAPIUrl, + + #[error("no available gateway")] + NoGatewayAvailable, + + #[error("no IPR address on selected gateway")] + NoIPRAvailable, } impl Error { diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index d8ef50a73c3..cc49f7234ce 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -41,6 +41,7 @@ pub enum ConnectionState { } fn create_gateway_client() -> Result { + // TODO do something proper with this let user_agent = UserAgent { application: "nym-ipr-streamer".to_string(), version: "0.0.1".to_string(), @@ -52,17 +53,19 @@ fn create_gateway_client() -> Result { let api_url = mainnet_network_defaults .endpoints .first() - .unwrap() + .ok_or_else(|| Error::NoValidatorDetailsAvailable)? .api_url() - .unwrap(); + .ok_or_else(|| Error::NoValidatorAPIUrl)?; let nyxd_url = mainnet_network_defaults .endpoints .first() - .unwrap() + .ok_or_else(|| Error::NoValidatorDetailsAvailable)? .nyxd_url(); - let nym_vpn_api_url = mainnet_network_defaults.nym_vpn_api_url().unwrap(); + let nym_vpn_api_url = mainnet_network_defaults + .nym_vpn_api_url() + .ok_or_else(|| Error::NoNymAPIUrl)?; let config = GatewayConfig { nyxd_url, @@ -73,14 +76,11 @@ fn create_gateway_client() -> Result { wg_score_thresholds: None, }; - Ok(GatewayClient::new(config, user_agent).unwrap()) + Ok(GatewayClient::new(config, user_agent)?) } async fn get_ipr_addr(client: GatewayClient) -> Result { - let exit_gateways = client - .lookup_gateways(GatewayType::MixnetExit) - .await - .unwrap(); + let exit_gateways = client.lookup_gateways(GatewayType::MixnetExit).await?; info!("Found {} Exit Gateways", exit_gateways.len()); @@ -92,9 +92,11 @@ async fn get_ipr_addr(client: GatewayClient) -> Result Date: Fri, 17 Oct 2025 12:50:13 +0100 Subject: [PATCH 065/139] remove comments and unused imports --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 4 ---- smolmix/src/device.rs | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index cc49f7234ce..10366e0284b 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -300,7 +300,6 @@ impl IpMixStream { ( IpMixStreamReader { stream_reader, - // ipr_address: self.ipr_address, listener: self.listener, allocated_ips: self.allocated_ips.clone(), connection_state: self.connection_state.clone(), @@ -309,7 +308,6 @@ impl IpMixStream { }, IpMixStreamWriter { stream_writer, - // ipr_address: self.ipr_address, local_addr, allocated_ips: self.allocated_ips, connection_state: self.connection_state, @@ -356,7 +354,6 @@ impl AsyncWrite for IpMixStream { pub struct IpMixStreamReader { stream_reader: MixStreamReader, - // ipr_address: IpPacketRouterAddress, listener: IprListener, allocated_ips: Option, connection_state: ConnectionState, @@ -432,7 +429,6 @@ impl AsyncRead for IpMixStreamReader { pub struct IpMixStreamWriter { stream_writer: MixStreamWriter, - // ipr_address: IpPacketRouterAddress, local_addr: Recipient, allocated_ips: Option, connection_state: ConnectionState, diff --git a/smolmix/src/device.rs b/smolmix/src/device.rs index 484ad37e5fa..9675662e8a4 100644 --- a/smolmix/src/device.rs +++ b/smolmix/src/device.rs @@ -7,7 +7,7 @@ use smoltcp::{ }; use std::collections::VecDeque; use tokio::sync::mpsc; -use tracing::{debug, info, trace, warn}; +use tracing::{info, warn}; /// # Overview /// We need something to bridge the async / sync weirdness (Device trait fns are sync, IpMixStream fns are From 8b6264fff9e0cef186292b9585983b46a0e2797c Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 13:24:54 +0100 Subject: [PATCH 066/139] Remove unused imports --- Cargo.lock | 2 +- smolmix/Cargo.toml | 2 +- smolmix/src/bridge.rs | 2 +- smolmix/src/lib.rs | 3 --- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 77f01ac9e83..b6a6a64fc53 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10622,7 +10622,7 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "smolmix" -version = "0.1.0" +version = "0.0.1" dependencies = [ "bytes", "dirs 5.0.1", diff --git a/smolmix/Cargo.toml b/smolmix/Cargo.toml index 4a4f2e12402..2b3acb4e38e 100644 --- a/smolmix/Cargo.toml +++ b/smolmix/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smolmix" -version = "0.1.0" +version = "0.0.1" edition = "2021" [dependencies] diff --git a/smolmix/src/bridge.rs b/smolmix/src/bridge.rs index 41590bfd7bd..f2122eef247 100644 --- a/smolmix/src/bridge.rs +++ b/smolmix/src/bridge.rs @@ -5,7 +5,7 @@ use crate::error::SmolmixError; use nym_ip_packet_requests::codec::MultiIpPacketCodec; use nym_sdk::stream_wrapper::IpMixStream; use tokio::sync::mpsc; -use tracing::{debug, error, info, trace}; +use tracing::{error, info}; /// Asynchronous bridge between smoltcp device and Mixnet. /// diff --git a/smolmix/src/lib.rs b/smolmix/src/lib.rs index 446493a430c..bafee7a9944 100644 --- a/smolmix/src/lib.rs +++ b/smolmix/src/lib.rs @@ -4,13 +4,10 @@ mod bridge; mod device; mod error; -mod reqwest_client; -pub mod tls; pub use bridge::NymIprBridge; pub use device::NymIprDevice; pub use error::SmolmixError; -pub use tls::TlsOverTcp; use nym_ip_packet_requests::IpPair; use nym_sdk::stream_wrapper::IpMixStream; From f2f7dc43c722eb380b9063862bb64247b7a524c5 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 13:25:11 +0100 Subject: [PATCH 067/139] Move files to examples + split examples apart --- smolmix/examples/cloudflare_ping.rs | 283 ++++++++++++ .../https_client.rs} | 158 +++---- smolmix/examples/tls.rs | 264 +++++++++++ smolmix/src/tls.rs | 419 ------------------ 4 files changed, 614 insertions(+), 510 deletions(-) create mode 100644 smolmix/examples/cloudflare_ping.rs rename smolmix/{src/reqwest_client.rs => examples/https_client.rs} (73%) create mode 100644 smolmix/examples/tls.rs delete mode 100644 smolmix/src/tls.rs diff --git a/smolmix/examples/cloudflare_ping.rs b/smolmix/examples/cloudflare_ping.rs new file mode 100644 index 00000000000..a8d08c6e0fd --- /dev/null +++ b/smolmix/examples/cloudflare_ping.rs @@ -0,0 +1,283 @@ +use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; +use smolmix::{create_device, SmolmixError}; +use std::{ + io::{self, Read, Write}, + sync::Arc, +}; +use tracing::info; + +use nym_sdk::stream_wrapper::IpMixStream; +use smoltcp::{ + iface::{Config, Interface, SocketSet}, + socket::tcp, + time::Instant, + wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, +}; +use std::sync::Once; +use std::time::Duration; + +static INIT: Once = Once::new(); + +pub struct TlsOverTcp { + pub conn: ClientConnection, +} + +impl TlsOverTcp { + pub fn new(domain: &str) -> Result { + let mut root_store = rustls::RootCertStore::empty(); + root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); + + let config = ClientConfig::builder() + .with_root_certificates(root_store) + .with_no_client_auth(); + + let server_name = ServerName::try_from(domain) + .map_err(|_| SmolmixError::InvalidDnsName)? + .to_owned(); + + let conn = ClientConnection::new(Arc::new(config), server_name) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + + Ok(Self { conn }) + } + + /// Move data from TLS connection to TCP socket + pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + let mut buf = [0u8; 4096]; + while self.conn.wants_write() { + match self.conn.write_tls(&mut buf.as_mut_slice()) { + Ok(n) if n > 0 => { + socket + .send_slice(&buf[..n]) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + } + _ => break, + } + } + Ok(()) + } + + /// Move data from TCP socket to TLS connection + pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + if socket.can_recv() { + let _ = socket.recv(|chunk| { + if !chunk.is_empty() { + inspect_tls_packet(chunk); + let _ = self.conn.read_tls(&mut io::Cursor::new(&mut *chunk)); + let _ = self.conn.process_new_packets(); + } + (chunk.len(), ()) + }); + } + Ok(()) + } + + pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + self.conn + .writer() + .write_all(data) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + self.write_tls(socket) + } + + pub fn recv(&mut self, socket: &mut tcp::Socket) -> Result, SmolmixError> { + self.read_tls(socket)?; + let mut result = Vec::new(); + let mut buf = vec![0u8; 4096]; + match self.conn.reader().read(&mut buf) { + Ok(n) if n > 0 => result.extend_from_slice(&buf[..n]), + _ => {} + } + Ok(result) + } +} + +fn inspect_tls_packet(data: &[u8]) { + if data.len() < 5 { + return; + } + let content_type = data[0]; + if content_type < 0x14 || content_type > 0x17 { + return; + } + let version = u16::from_be_bytes([data[1], data[2]]); + let length = u16::from_be_bytes([data[3], data[4]]); + info!( + "TLS packet: ContentType={:#04x}, Version={:#06x}, Length={}", + content_type, version, length + ); + if content_type == 0x16 && data.len() > 5 { + let handshake_type = data[5]; + let handshake_types = match handshake_type { + 0x01 => "ClientHello", + 0x02 => "ServerHello", + 0x0b => "Certificate", + 0x0c => "ServerKeyExchange", + 0x0d => "CertificateRequest", + 0x0e => "ServerHelloDone", + 0x0f => "CertificateVerify", + 0x10 => "ClientKeyExchange", + 0x14 => "Finished", + _ => "Unknown", + }; + info!( + "Handshake type: {:#04x} ({}), Length: {}", + handshake_type, handshake_types, length + ); + } +} + +fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; + } + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + init_logging(); + + let ipr_stream = IpMixStream::new().await?; + let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; + info!("Allocated IP: {}", allocated_ips.ipv4); + + tokio::spawn(async move { + bridge.run().await.unwrap(); + }); + + let config = Config::new(HardwareAddress::Ip); + let mut iface = Interface::new(config, &mut device, Instant::now()); + iface.update_ip_addrs(|ip_addrs| { + ip_addrs + .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) + .unwrap(); + }); + iface + .routes_mut() + .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) + .unwrap(); + + let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); + let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); + let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); + let mut sockets = SocketSet::new(vec![]); + let tcp_handle = sockets.add(tcp_socket); + + let target_ip = Ipv4Address::new(1, 1, 1, 1); + let target_port = 443; + + let mut timestamp = Instant::from_millis(0); + let start = tokio::time::Instant::now(); + let mut connected = false; + let mut tls = None; + let mut handshake_completed = false; + let mut request_sent = false; + + loop { + if start.elapsed() > Duration::from_secs(60) { + info!("Test timeout after 60 seconds"); + break; + } + + iface.poll(timestamp, &mut device, &mut sockets); + timestamp += smoltcp::time::Duration::from_millis(1); + let socket = sockets.get_mut::(tcp_handle); + + // TCP connection setup + if !connected && !socket.is_open() { + match socket.connect(iface.context(), (target_ip, target_port), 49152) { + Ok(_) => { + info!("TCP connect started"); + connected = true; + } + Err(e) => { + info!("TCP connect failed: {}", e); + break; + } + } + } + + // TLS setup after TCP established + if socket.state() == tcp::State::Established && tls.is_none() { + info!("TCP established - creating TLS connection"); + match TlsOverTcp::new("cloudflare.com") { + Ok(t) => tls = Some(t), + Err(e) => { + info!("TLS create failed: {}", e); + break; + } + } + } + + // TLS handshake and request + if let Some(ref mut tls_conn) = tls { + let _ = tls_conn.read_tls(socket); + let _ = tls_conn.write_tls(socket); + + // Complete handshake + if !tls_conn.conn.is_handshaking() && !handshake_completed { + handshake_completed = true; + info!("TLS handshake completed - ready for HTTPS"); + + // Send simple HTTP request + let request = b"GET /cdn-cgi/trace HTTP/1.1\r\nHost: cloudflare.com\r\nUser-Agent: smolmix-test/1.0\r\nAccept: */*\r\nConnection: close\r\n\r\n"; + match tls_conn.send(request, socket) { + Ok(_) => { + info!("HTTPS request sent"); + request_sent = true; + } + Err(e) => { + info!("HTTPS send failed: {}", e); + break; + } + } + } + + // Read response after request sent + if request_sent { + let mut response_data = Vec::new(); + let mut buf = vec![0u8; 4096]; + + match tls_conn.conn.reader().read(&mut buf) { + Ok(0) => { + info!("Response complete - connection closed"); + break; + } + Ok(n) if n > 0 => { + response_data.extend_from_slice(&buf[..n]); + info!("Received {} bytes", n); + + if let Ok(response_str) = std::str::from_utf8(&response_data) { + if response_str.contains("\r\n\r\n") { + info!("HTTPS response received!"); + + if let Some(status_end) = response_str.find("\r\n") { + info!("HTTP Status: {}", &response_str[..status_end]); + } + + info!("Full response: {}", response_str); + return Ok(()); + } + } + } + Ok(1_usize..) => { + todo!() + } + Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => { + // Keep polling + } + Err(e) => { + info!("Read error: {}", e); + break; + } + } + } + } + tokio::time::sleep(Duration::from_millis(10)).await; + } + + Err("No HTTP response received".into()) +} diff --git a/smolmix/src/reqwest_client.rs b/smolmix/examples/https_client.rs similarity index 73% rename from smolmix/src/reqwest_client.rs rename to smolmix/examples/https_client.rs index daa9c815a33..5e8dcbb5c5d 100644 --- a/smolmix/src/reqwest_client.rs +++ b/smolmix/examples/https_client.rs @@ -1,12 +1,14 @@ -use crate::{create_device, IpMixStream, NymIprDevice, SmolmixError}; +use nym_sdk::stream_wrapper::IpMixStream; use reqwest::StatusCode; use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; +use smolmix::{create_device, NymIprDevice, SmolmixError}; use smoltcp::{ iface::{Config, Interface, SocketSet}, socket::tcp, time::Instant, wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, }; +use std::sync::Once; use std::{ io::{self, Read, Write}, sync::Arc, @@ -14,6 +16,8 @@ use std::{ }; use tracing::info; +static INIT: Once = Once::new(); + pub struct TlsOverTcp { pub conn: ClientConnection, } @@ -74,11 +78,11 @@ impl TlsOverTcp { } } -/// Reqwest-ish client right now, just GET +/// Reqwest-ish client right now, just a handrolled GET request for the example pub struct SmolmixReqwestClient { device: Arc>, - bridge: tokio::task::JoinHandle<()>, - allocated_ip: Ipv4Address, + _bridge: tokio::task::JoinHandle<()>, + _allocated_ip: Ipv4Address, } impl SmolmixReqwestClient { @@ -112,8 +116,8 @@ impl SmolmixReqwestClient { Ok(Self { device, - bridge: bridge_handle, - allocated_ip: allocated_ips.ipv4, + _bridge: bridge_handle, + _allocated_ip: allocated_ips.ipv4, }) } @@ -268,95 +272,67 @@ impl SmolmixResponse { } } -#[cfg(test)] -mod tests { - use super::*; - use serde_json; - use std::sync::Once; - - static INIT: Once = Once::new(); - - fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); - }); +fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; } - #[tokio::test] - async fn mixnet_vs_plain_reqwest() -> Result<(), Box> { - init_logging(); - - let test_url = "https://cloudflare.com/cdn-cgi/trace"; - - info!("Fetching with plain reqwest..."); - let start = tokio::time::Instant::now(); - let plain_response = reqwest::get(test_url).await?; - let plain_status = plain_response.status(); - let plain_text = plain_response.text().await?; - let plain_duration = start.elapsed(); - - info!( - "Plain reqwest - Status: {}, Time: {:?}", - plain_status, plain_duration - ); - - info!("Setting up mixnet client..."); - let client = SmolmixReqwestClient::new().await?; - let start = tokio::time::Instant::now(); - let mixnet_response = client.get(test_url).await?; - let mixnet_status = mixnet_response.status(); - let mixnet_text = mixnet_response.text().await?; - let mixnet_duration = start.elapsed(); - - info!( - "Mixnet reqwest - Status: {}, Time: {:?}", - mixnet_status, mixnet_duration - ); + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); +} - info!("Status codes match: {}", plain_status == mixnet_status); +#[tokio::main] +async fn main() -> Result<(), Box> { + init_logging(); + + let test_url = "https://cloudflare.com/cdn-cgi/trace"; + + info!("Fetching with plain reqwest..."); + let start = tokio::time::Instant::now(); + let plain_response = reqwest::get(test_url).await?; + let plain_status = plain_response.status(); + let plain_text = plain_response.text().await?; + let plain_duration = start.elapsed(); + + info!( + "Plain reqwest - Status: {}, Time: {:?}", + plain_status, plain_duration + ); + + info!("Setting up mixnet client..."); + let client = SmolmixReqwestClient::new().await?; + let start = tokio::time::Instant::now(); + let mixnet_response = client.get(test_url).await?; + let mixnet_status = mixnet_response.status(); + let mixnet_text = mixnet_response.text().await?; + let mixnet_duration = start.elapsed(); + + info!( + "Mixnet reqwest - Status: {}, Time: {:?}", + mixnet_status, mixnet_duration + ); + + info!("Status codes match: {}", plain_status == mixnet_status); + info!( + "Response lengths match: {}", + plain_text.len() == mixnet_text.len() + ); + + let key_fields = ["fl=", "ip=", "ts=", "visit_scheme="]; + for field in key_fields { + let plain_has = plain_text.contains(field); + let mixnet_has = mixnet_text.contains(field); info!( - "Response lengths match: {}", - plain_text.len() == mixnet_text.len() + "Field '{}' - Plain: {}, Mixnet: {}", + field, plain_has, mixnet_has ); - - let key_fields = ["fl=", "ip=", "ts=", "visit_scheme="]; - for field in key_fields { - let plain_has = plain_text.contains(field); - let mixnet_has = mixnet_text.contains(field); - info!( - "Field '{}' - Plain: {}, Mixnet: {}", - field, plain_has, mixnet_has - ); - assert_eq!(plain_has, mixnet_has, "Field '{}' mismatch", field); - } - - info!("Plain reqwest time: {:?}", plain_duration); - info!("Mixnet reqwest time: {:?}", mixnet_duration); - let slowdown = mixnet_duration.as_millis() as f64 / plain_duration.as_millis() as f64; - info!("Mixnet slowdown: {:.1}x", slowdown); - info!("Both responses match"); - Ok(()) + assert_eq!(plain_has, mixnet_has, "Field '{}' mismatch", field); } - #[tokio::test] - async fn compare_exit_ip() -> Result<(), Box> { - init_logging(); - let plain: serde_json::Value = reqwest::get("https://api.ipify.org?format=json") - .await? - .json() - .await?; - let plain_ip = plain["ip"].as_str().expect("no ip field"); - let client = SmolmixReqwestClient::new().await?; - // MAX: this returns 403, looks like they detect we're some sort of proxy - // let resp = client.get("https://api.ipify.org?format=json").await?; - // info!("{:?}", client.allocated_ip); - assert_ne!( - plain_ip, - client.allocated_ip.to_string(), - "IPs should not be the same" - ); - Ok(()) - } + info!("Plain reqwest time: {:?}", plain_duration); + info!("Mixnet reqwest time: {:?}", mixnet_duration); + let slowdown = mixnet_duration.as_millis() as f64 / plain_duration.as_millis() as f64; + info!("Mixnet slowdown: {:.1}x", slowdown); + info!("Both responses match"); + Ok(()) } diff --git a/smolmix/examples/tls.rs b/smolmix/examples/tls.rs new file mode 100644 index 00000000000..9dcc70d3fd5 --- /dev/null +++ b/smolmix/examples/tls.rs @@ -0,0 +1,264 @@ +use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; +use smolmix::{create_device, SmolmixError}; +use std::{ + io::{self, Read, Write}, + sync::Arc, +}; +use tracing::info; + +use nym_sdk::stream_wrapper::IpMixStream; +use smoltcp::{ + iface::{Config, Interface, SocketSet}, + socket::tcp, + time::Instant, + wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, +}; +use std::sync::Once; +use std::time::Duration; + +static INIT: Once = Once::new(); + +pub struct TlsOverTcp { + pub conn: ClientConnection, +} + +impl TlsOverTcp { + pub fn new(domain: &str) -> Result { + let mut root_store = rustls::RootCertStore::empty(); + root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); + + let config = ClientConfig::builder() + .with_root_certificates(root_store) + .with_no_client_auth(); + + let server_name = ServerName::try_from(domain) + .map_err(|_| SmolmixError::InvalidDnsName)? + .to_owned(); + + let conn = ClientConnection::new(Arc::new(config), server_name) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + + Ok(Self { conn }) + } + + /// Move data from TLS connection to TCP socket + pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + let mut buf = [0u8; 4096]; + while self.conn.wants_write() { + match self.conn.write_tls(&mut buf.as_mut_slice()) { + Ok(n) if n > 0 => { + socket + .send_slice(&buf[..n]) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + } + _ => break, + } + } + Ok(()) + } + + /// Move data from TCP socket to TLS connection + pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + if socket.can_recv() { + let _ = socket.recv(|chunk| { + if !chunk.is_empty() { + inspect_tls_packet(chunk); + let _ = self.conn.read_tls(&mut io::Cursor::new(&mut *chunk)); + let _ = self.conn.process_new_packets(); + } + (chunk.len(), ()) + }); + } + Ok(()) + } + + pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + self.conn + .writer() + .write_all(data) + .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + self.write_tls(socket) + } + + pub fn recv(&mut self, socket: &mut tcp::Socket) -> Result, SmolmixError> { + self.read_tls(socket)?; + let mut result = Vec::new(); + let mut buf = vec![0u8; 4096]; + match self.conn.reader().read(&mut buf) { + Ok(n) if n > 0 => result.extend_from_slice(&buf[..n]), + _ => {} + } + Ok(result) + } +} + +fn inspect_tls_packet(data: &[u8]) { + if data.len() < 5 { + return; + } + let content_type = data[0]; + if content_type < 0x14 || content_type > 0x17 { + return; + } + let version = u16::from_be_bytes([data[1], data[2]]); + let length = u16::from_be_bytes([data[3], data[4]]); + info!( + "TLS packet: ContentType={:#04x}, Version={:#06x}, Length={}", + content_type, version, length + ); + if content_type == 0x16 && data.len() > 5 { + let handshake_type = data[5]; + let handshake_types = match handshake_type { + 0x01 => "ClientHello", + 0x02 => "ServerHello", + 0x0b => "Certificate", + 0x0c => "ServerKeyExchange", + 0x0d => "CertificateRequest", + 0x0e => "ServerHelloDone", + 0x0f => "CertificateVerify", + 0x10 => "ClientKeyExchange", + 0x14 => "Finished", + _ => "Unknown", + }; + info!( + "Handshake type: {:#04x} ({}), Length: {}", + handshake_type, handshake_types, length + ); + } +} + +fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; + } + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + init_logging(); + + let ipr_stream = IpMixStream::new().await?; + let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; + info!("Allocated IP: {}", allocated_ips.ipv4); + + tokio::spawn(async move { + bridge.run().await.unwrap(); + }); + + let config = Config::new(HardwareAddress::Ip); + let mut iface = Interface::new(config, &mut device, Instant::now()); + iface.update_ip_addrs(|ip_addrs| { + ip_addrs + .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) + .unwrap(); + }); + iface + .routes_mut() + .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) + .unwrap(); + + let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); + let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); + let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); + let mut sockets = SocketSet::new(vec![]); + let tcp_handle = sockets.add(tcp_socket); + + let target_ip = Ipv4Address::new(1, 1, 1, 1); // Pinging Cloudflare + let target_port = 443; + info!("Connecting to {}:{} through mixnet", target_ip, target_port); + + let mut timestamp = Instant::from_millis(0); + let start = tokio::time::Instant::now(); + let mut connected = false; + let mut tls = None; + let mut handshake_completed = false; + + loop { + if start.elapsed() > Duration::from_secs(120) { + info!("Test timeout after 120 seconds"); + break; + } + + iface.poll(timestamp, &mut device, &mut sockets); + timestamp += smoltcp::time::Duration::from_millis(1); + let socket = sockets.get_mut::(tcp_handle); + + if !connected && !socket.is_open() { + match socket.connect(iface.context(), (target_ip, target_port), 49152) { + Ok(_) => { + info!("TCP connect started"); + connected = true; + } + Err(e) => { + info!("TCP connect failed: {}", e); + break; + } + } + } + + if start.elapsed().as_secs() % 5 == 0 && start.elapsed().as_millis() % 1000 < 100 { + info!( + "State: TCP={:?}, established={}, can_send={}, can_recv={}", + socket.state(), + socket.state() == tcp::State::Established, + socket.may_send(), + socket.can_recv() + ); + } + + if socket.state() == tcp::State::Established && tls.is_none() { + info!("TCP established - creating TLS connection"); + match TlsOverTcp::new("cloudflare.com") { + Ok(t) => tls = Some(t), + Err(e) => { + info!("TLS create failed: {}", e); + break; + } + } + } + + if let Some(ref mut tls_conn) = tls { + let _ = tls_conn.read_tls(socket); + let _ = tls_conn.write_tls(socket); + + if start.elapsed().as_secs() % 10 == 0 && start.elapsed().as_millis() % 1000 < 100 { + info!( + "TLS state: handshaking={}, wants_read={}, wants_write={}", + tls_conn.conn.is_handshaking(), + tls_conn.conn.wants_read(), + tls_conn.conn.wants_write() + ); + } + + if !tls_conn.conn.is_handshaking() && !handshake_completed { + info!("TLS handshake complete"); + info!( + "TLS verification: handshake_complete=true, wants_read={}, wants_write={}", + tls_conn.conn.wants_read(), + tls_conn.conn.wants_write() + ); + + match tls_conn.recv(socket) { + Ok(data) if data.is_empty() => { + info!("No unexpected application data waiting to be read"); + } + Ok(data) => { + info!("Unexpected application data received: {} bytes", data.len()); + } + Err(e) => { + info!("TLS recv check failed: {}", e); + } + } + info!("TLS handshake successful with cloudflare"); + break; + } + } + tokio::time::sleep(Duration::from_millis(1)).await; + } + + info!("Test completed"); + Ok(()) +} diff --git a/smolmix/src/tls.rs b/smolmix/src/tls.rs deleted file mode 100644 index e037315309e..00000000000 --- a/smolmix/src/tls.rs +++ /dev/null @@ -1,419 +0,0 @@ -use crate::SmolmixError; -use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; -use smoltcp::socket::tcp; -use std::{ - io::{self, Read, Write}, - sync::Arc, -}; -use tracing::info; - -pub struct TlsOverTcp { - pub conn: ClientConnection, -} - -impl TlsOverTcp { - pub fn new(domain: &str) -> Result { - let mut root_store = rustls::RootCertStore::empty(); - root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); - - let config = ClientConfig::builder() - .with_root_certificates(root_store) - .with_no_client_auth(); - - let server_name = ServerName::try_from(domain) - .map_err(|_| SmolmixError::InvalidDnsName)? - .to_owned(); - - let conn = ClientConnection::new(Arc::new(config), server_name) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; - - Ok(Self { conn }) - } - - /// Move data from TLS connection to TCP socket - pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { - let mut buf = [0u8; 4096]; - while self.conn.wants_write() { - match self.conn.write_tls(&mut buf.as_mut_slice()) { - Ok(n) if n > 0 => { - socket - .send_slice(&buf[..n]) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; - } - _ => break, - } - } - Ok(()) - } - - /// Move data from TCP socket to TLS connection - pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { - if socket.can_recv() { - let _ = socket.recv(|chunk| { - if !chunk.is_empty() { - inspect_tls_packet(chunk); - let _ = self.conn.read_tls(&mut io::Cursor::new(&mut *chunk)); - let _ = self.conn.process_new_packets(); - } - (chunk.len(), ()) - }); - } - Ok(()) - } - - /// Send data - TODO FRAMING - pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), SmolmixError> { - self.conn - .writer() - .write_all(data) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; - self.write_tls(socket) - } - - /// Receive data - TODO FRAMING - pub fn recv(&mut self, socket: &mut tcp::Socket) -> Result, SmolmixError> { - self.read_tls(socket)?; - let mut result = Vec::new(); - let mut buf = vec![0u8; 4096]; - match self.conn.reader().read(&mut buf) { - Ok(n) if n > 0 => result.extend_from_slice(&buf[..n]), - _ => {} - } - Ok(result) - } -} - -fn inspect_tls_packet(data: &[u8]) { - if data.len() < 5 { - return; - } - let content_type = data[0]; - if content_type < 0x14 || content_type > 0x17 { - return; - } - let version = u16::from_be_bytes([data[1], data[2]]); - let length = u16::from_be_bytes([data[3], data[4]]); - info!( - "TLS packet: ContentType={:#04x}, Version={:#06x}, Length={}", - content_type, version, length - ); - if content_type == 0x16 && data.len() > 5 { - let handshake_type = data[5]; - let handshake_types = match handshake_type { - 0x01 => "ClientHello", - 0x02 => "ServerHello", - 0x0b => "Certificate", - 0x0c => "ServerKeyExchange", - 0x0d => "CertificateRequest", - 0x0e => "ServerHelloDone", - 0x0f => "CertificateVerify", - 0x10 => "ClientKeyExchange", - 0x14 => "Finished", - _ => "Unknown", - }; - info!( - "Handshake type: {:#04x} ({}), Length: {}", - handshake_type, handshake_types, length - ); - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::create_device; - use nym_sdk::stream_wrapper::IpMixStream; - use smoltcp::{ - iface::{Config, Interface, SocketSet}, - socket::tcp, - time::Instant, - wire::{HardwareAddress, IpAddress, IpCidr, Ipv4Address}, - }; - use std::sync::Once; - use std::time::Duration; - use tracing::info; - - static INIT: Once = Once::new(); - - fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); - }); - } - - #[tokio::test] - async fn simple_tls_check() -> Result<(), Box> { - init_logging(); - - let ipr_stream = IpMixStream::new().await?; - let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; - info!("Allocated IP: {}", allocated_ips.ipv4); - - tokio::spawn(async move { - bridge.run().await.unwrap(); - }); - - let config = Config::new(HardwareAddress::Ip); - let mut iface = Interface::new(config, &mut device, Instant::now()); - iface.update_ip_addrs(|ip_addrs| { - ip_addrs - .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) - .unwrap(); - }); - iface - .routes_mut() - .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) - .unwrap(); - - let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); - let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); - let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); - let mut sockets = SocketSet::new(vec![]); - let tcp_handle = sockets.add(tcp_socket); - - let target_ip = Ipv4Address::new(1, 1, 1, 1); // Pinging Cloudflare - let target_port = 443; - info!("Connecting to {}:{} through mixnet", target_ip, target_port); - - let mut timestamp = Instant::from_millis(0); - let start = tokio::time::Instant::now(); - let mut connected = false; - let mut tls = None; - let mut handshake_completed = false; - - loop { - if start.elapsed() > Duration::from_secs(120) { - info!("Test timeout after 120 seconds"); - break; - } - - iface.poll(timestamp, &mut device, &mut sockets); - timestamp += smoltcp::time::Duration::from_millis(1); - let socket = sockets.get_mut::(tcp_handle); - - if !connected && !socket.is_open() { - match socket.connect(iface.context(), (target_ip, target_port), 49152) { - Ok(_) => { - info!("TCP connect started"); - connected = true; - } - Err(e) => { - info!("TCP connect failed: {}", e); - break; - } - } - } - - if start.elapsed().as_secs() % 5 == 0 && start.elapsed().as_millis() % 1000 < 100 { - info!( - "State: TCP={:?}, established={}, can_send={}, can_recv={}", - socket.state(), - socket.state() == tcp::State::Established, - socket.may_send(), - socket.can_recv() - ); - } - - if socket.state() == tcp::State::Established && tls.is_none() { - info!("TCP established - creating TLS connection"); - match TlsOverTcp::new("cloudflare.com") { - Ok(t) => tls = Some(t), - Err(e) => { - info!("TLS create failed: {}", e); - break; - } - } - } - - if let Some(ref mut tls_conn) = tls { - let _ = tls_conn.read_tls(socket); - let _ = tls_conn.write_tls(socket); - - if start.elapsed().as_secs() % 10 == 0 && start.elapsed().as_millis() % 1000 < 100 { - info!( - "TLS state: handshaking={}, wants_read={}, wants_write={}", - tls_conn.conn.is_handshaking(), - tls_conn.conn.wants_read(), - tls_conn.conn.wants_write() - ); - } - - if !tls_conn.conn.is_handshaking() && !handshake_completed { - info!("TLS handshake complete"); - info!( - "TLS verification: handshake_complete=true, wants_read={}, wants_write={}", - tls_conn.conn.wants_read(), - tls_conn.conn.wants_write() - ); - - match tls_conn.recv(socket) { - Ok(data) if data.is_empty() => { - info!("No unexpected application data waiting to be read"); - } - Ok(data) => { - info!("Unexpected application data received: {} bytes", data.len()); - } - Err(e) => { - info!("TLS recv check failed: {}", e); - } - } - info!("TLS handshake successful with cloudflare"); - break; - } - } - tokio::time::sleep(Duration::from_millis(1)).await; - } - - info!("Test completed"); - Ok(()) - } - - #[tokio::test] - async fn https_req_res() -> Result<(), Box> { - init_logging(); - - let ipr_stream = IpMixStream::new().await?; - let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; - info!("Allocated IP: {}", allocated_ips.ipv4); - - tokio::spawn(async move { - bridge.run().await.unwrap(); - }); - - let config = Config::new(HardwareAddress::Ip); - let mut iface = Interface::new(config, &mut device, Instant::now()); - iface.update_ip_addrs(|ip_addrs| { - ip_addrs - .push(IpCidr::new(IpAddress::from(allocated_ips.ipv4), 32)) - .unwrap(); - }); - iface - .routes_mut() - .add_default_ipv4_route(Ipv4Address::UNSPECIFIED) - .unwrap(); - - let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); - let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); - let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); - let mut sockets = SocketSet::new(vec![]); - let tcp_handle = sockets.add(tcp_socket); - - let target_ip = Ipv4Address::new(1, 1, 1, 1); - let target_port = 443; - - let mut timestamp = Instant::from_millis(0); - let start = tokio::time::Instant::now(); - let mut connected = false; - let mut tls = None; - let mut handshake_completed = false; - let mut request_sent = false; - - loop { - if start.elapsed() > Duration::from_secs(60) { - info!("Test timeout after 60 seconds"); - break; - } - - iface.poll(timestamp, &mut device, &mut sockets); - timestamp += smoltcp::time::Duration::from_millis(1); - let socket = sockets.get_mut::(tcp_handle); - - // TCP connection setup - if !connected && !socket.is_open() { - match socket.connect(iface.context(), (target_ip, target_port), 49152) { - Ok(_) => { - info!("TCP connect started"); - connected = true; - } - Err(e) => { - info!("TCP connect failed: {}", e); - break; - } - } - } - - // TLS setup after TCP established - if socket.state() == tcp::State::Established && tls.is_none() { - info!("TCP established - creating TLS connection"); - match TlsOverTcp::new("cloudflare.com") { - Ok(t) => tls = Some(t), - Err(e) => { - info!("TLS create failed: {}", e); - break; - } - } - } - - // TLS handshake and request - if let Some(ref mut tls_conn) = tls { - let _ = tls_conn.read_tls(socket); - let _ = tls_conn.write_tls(socket); - - // Complete handshake - if !tls_conn.conn.is_handshaking() && !handshake_completed { - handshake_completed = true; - info!("TLS handshake completed - ready for HTTPS"); - - // Send simple HTTP request - let request = b"GET /cdn-cgi/trace HTTP/1.1\r\nHost: cloudflare.com\r\nUser-Agent: smolmix-test/1.0\r\nAccept: */*\r\nConnection: close\r\n\r\n"; - match tls_conn.send(request, socket) { - Ok(_) => { - info!("HTTPS request sent"); - request_sent = true; - } - Err(e) => { - info!("HTTPS send failed: {}", e); - break; - } - } - } - - // Read response after request sent - if request_sent { - let mut response_data = Vec::new(); - let mut buf = vec![0u8; 4096]; - - match tls_conn.conn.reader().read(&mut buf) { - Ok(0) => { - info!("Response complete - connection closed"); - break; - } - Ok(n) if n > 0 => { - response_data.extend_from_slice(&buf[..n]); - info!("Received {} bytes", n); - - if let Ok(response_str) = std::str::from_utf8(&response_data) { - if response_str.contains("\r\n\r\n") { - info!("HTTPS response received!"); - - if let Some(status_end) = response_str.find("\r\n") { - info!("HTTP Status: {}", &response_str[..status_end]); - } - - info!("Full response: {}", response_str); - return Ok(()); - } - } - } - Ok(1_usize..) => { - todo!() - } - Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => { - // Keep polling - } - Err(e) => { - info!("Read error: {}", e); - break; - } - } - } - } - tokio::time::sleep(Duration::from_millis(10)).await; - } - - Err("No HTTP response received".into()) - } -} From c0f6c2384e5a0abec4579720e318a3d168fe8ef9 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 13:40:11 +0100 Subject: [PATCH 068/139] info -> debug logging for serialised bytes written by stream_wrapper --- sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 83b7911b4f3..051bd3918d6 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -284,7 +284,7 @@ impl MixStreamWriter { let mut codec = InputMessageCodec {}; let mut serialized_bytes = BytesMut::new(); codec.encode(input_message, &mut serialized_bytes)?; - info!("Serialized bytes: {:?}", serialized_bytes); + debug!("Serialized bytes: {:?}", serialized_bytes); self.write_all(&serialized_bytes).await?; info!("Wrote serialized bytes"); From b2ec06dad333fbfd4c24d39bb1cc792cfc558850 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 14:32:44 +0100 Subject: [PATCH 069/139] strip down commenting that is triggering compiler err --- smolmix/src/device.rs | 23 ----------------------- smolmix/src/lib.rs | 20 -------------------- 2 files changed, 43 deletions(-) diff --git a/smolmix/src/device.rs b/smolmix/src/device.rs index 9675662e8a4..f020459a02d 100644 --- a/smolmix/src/device.rs +++ b/smolmix/src/device.rs @@ -13,33 +13,10 @@ use tracing::{info, warn}; /// We need something to bridge the async / sync weirdness (Device trait fns are sync, IpMixStream fns are /// async) in a way that allows for the `NymIprDevice` to look and act like any other device. /// -/// cf smoltcp's loopback.rs: -/// ``` -/// pub struct Loopback { -/// queue: VecDeque>, -/// } -/// -/// impl Device for Loopback { -/// type RxToken<'a> = RxToken; -/// type TxToken<'a> = TxToken<'a>; -/// -/// fn receive(&mut self, _timestamp: Instant) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> { -/// self.queue.pop_front().map(move |buffer| { -/// let rx = RxToken { buffer }; -/// let tx = TxToken { -/// queue: &mut self.queue, -/// }; -/// (rx, tx) -/// }) -/// } -/// } -/// ``` -/// /// We need to be polling the queue to/from the NymIprBridge, hence the addition of the /// mpsc channels in the Device struct and the extra fns. /// /// # Architecture -/// /// smoltcp (sync) <-> NymIprDevice <-> channels <-> NymIprBridge <-> Mixnet (async) /// /// The device maintains a receive queue for packets coming from the mixnet and diff --git a/smolmix/src/lib.rs b/smolmix/src/lib.rs index bafee7a9944..786ad8a796b 100644 --- a/smolmix/src/lib.rs +++ b/smolmix/src/lib.rs @@ -21,26 +21,6 @@ use tokio::sync::mpsc; /// - Retrieves allocated IP addresses /// - Creates communication channels /// - Constructs the device and bridge components -/// -/// # Component Interaction -/// -/// ``` -/// create_device() -/// | -/// +--------------+---------------+ -/// | | | -/// v v v -/// NymIprDevice NymIprBridge IpPair -/// | | (10.0.x.x) -/// | | -/// +-- channels --+ -/// | -/// v -/// IpMixStream -/// | -/// v -/// Mixnet -/// ``` pub async fn create_device( mut ipr_stream: IpMixStream, ) -> Result<(NymIprDevice, NymIprBridge, IpPair), SmolmixError> { From e49813c288c107f89b1290e99203e2e9cb58ae3d Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 14:51:25 +0100 Subject: [PATCH 070/139] rename smolmix - mixtcp --- Cargo.lock | 40 ++++++------- Cargo.toml | 2 +- {smolmix => mixtcp}/Cargo.toml | 2 +- mixtcp/README.md | 3 + .../examples/cloudflare_ping.rs | 22 +++---- {smolmix => mixtcp}/examples/https_client.rs | 60 +++++++++---------- {smolmix => mixtcp}/examples/tls.rs | 20 +++---- {smolmix => mixtcp}/src/bridge.rs | 6 +- {smolmix => mixtcp}/src/device.rs | 0 {smolmix => mixtcp}/src/error.rs | 2 +- {smolmix => mixtcp}/src/lib.rs | 6 +- smolmix/README.md | 3 - 12 files changed, 83 insertions(+), 83 deletions(-) rename {smolmix => mixtcp}/Cargo.toml (97%) create mode 100644 mixtcp/README.md rename {smolmix => mixtcp}/examples/cloudflare_ping.rs (94%) rename {smolmix => mixtcp}/examples/https_client.rs (86%) rename {smolmix => mixtcp}/examples/tls.rs (94%) rename {smolmix => mixtcp}/src/bridge.rs (96%) rename {smolmix => mixtcp}/src/device.rs (100%) rename {smolmix => mixtcp}/src/error.rs (97%) rename {smolmix => mixtcp}/src/lib.rs (91%) delete mode 100644 smolmix/README.md diff --git a/Cargo.lock b/Cargo.lock index b6a6a64fc53..c0951fe7d12 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4613,6 +4613,26 @@ dependencies = [ "tracing", ] +[[package]] +name = "mixtcp" +version = "0.0.1" +dependencies = [ + "bytes", + "dirs 5.0.1", + "nym-bin-common 0.6.0", + "nym-ip-packet-requests", + "nym-sdk", + "reqwest 0.12.24", + "rustls 0.23.32", + "serde_json", + "smoltcp", + "thiserror 2.0.17", + "tokio", + "tracing", + "tracing-subscriber", + "webpki-roots 1.0.3", +] + [[package]] name = "mock_instant" version = "0.6.0" @@ -10620,26 +10640,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" -[[package]] -name = "smolmix" -version = "0.0.1" -dependencies = [ - "bytes", - "dirs 5.0.1", - "nym-bin-common 0.6.0", - "nym-ip-packet-requests", - "nym-sdk", - "reqwest 0.12.24", - "rustls 0.23.32", - "serde_json", - "smoltcp", - "thiserror 2.0.17", - "tokio", - "tracing", - "tracing-subscriber", - "webpki-roots 1.0.3", -] - [[package]] name = "smoltcp" version = "0.12.0" diff --git a/Cargo.toml b/Cargo.toml index 2f5dfc18b81..b545325b1f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,7 +145,7 @@ members = [ "sdk/ffi/go", "sdk/ffi/shared", "sdk/rust/nym-sdk", - "smolmix", + "mixtcp", # "service-providers/authenticator", "service-providers/common", "service-providers/ip-packet-router", diff --git a/smolmix/Cargo.toml b/mixtcp/Cargo.toml similarity index 97% rename from smolmix/Cargo.toml rename to mixtcp/Cargo.toml index 2b3acb4e38e..6bfd895b9cb 100644 --- a/smolmix/Cargo.toml +++ b/mixtcp/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "smolmix" +name = "mixtcp" version = "0.0.1" edition = "2021" diff --git a/mixtcp/README.md b/mixtcp/README.md new file mode 100644 index 00000000000..d77963de1f3 --- /dev/null +++ b/mixtcp/README.md @@ -0,0 +1,3 @@ +# mixtcp poc + +Test TLS conn + mixtcp device HTTPS req/res via IPRs with `cargo test`. More to come. diff --git a/smolmix/examples/cloudflare_ping.rs b/mixtcp/examples/cloudflare_ping.rs similarity index 94% rename from smolmix/examples/cloudflare_ping.rs rename to mixtcp/examples/cloudflare_ping.rs index a8d08c6e0fd..39e7269bafb 100644 --- a/smolmix/examples/cloudflare_ping.rs +++ b/mixtcp/examples/cloudflare_ping.rs @@ -1,5 +1,5 @@ +use mixtcp::{create_device, MixtcpError}; use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; -use smolmix::{create_device, SmolmixError}; use std::{ io::{self, Read, Write}, sync::Arc, @@ -23,7 +23,7 @@ pub struct TlsOverTcp { } impl TlsOverTcp { - pub fn new(domain: &str) -> Result { + pub fn new(domain: &str) -> Result { let mut root_store = rustls::RootCertStore::empty(); root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); @@ -32,24 +32,24 @@ impl TlsOverTcp { .with_no_client_auth(); let server_name = ServerName::try_from(domain) - .map_err(|_| SmolmixError::InvalidDnsName)? + .map_err(|_| MixtcpError::InvalidDnsName)? .to_owned(); let conn = ClientConnection::new(Arc::new(config), server_name) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; Ok(Self { conn }) } /// Move data from TLS connection to TCP socket - pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), MixtcpError> { let mut buf = [0u8; 4096]; while self.conn.wants_write() { match self.conn.write_tls(&mut buf.as_mut_slice()) { Ok(n) if n > 0 => { socket .send_slice(&buf[..n]) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; } _ => break, } @@ -58,7 +58,7 @@ impl TlsOverTcp { } /// Move data from TCP socket to TLS connection - pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), MixtcpError> { if socket.can_recv() { let _ = socket.recv(|chunk| { if !chunk.is_empty() { @@ -72,15 +72,15 @@ impl TlsOverTcp { Ok(()) } - pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), MixtcpError> { self.conn .writer() .write_all(data) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; self.write_tls(socket) } - pub fn recv(&mut self, socket: &mut tcp::Socket) -> Result, SmolmixError> { + pub fn recv(&mut self, socket: &mut tcp::Socket) -> Result, MixtcpError> { self.read_tls(socket)?; let mut result = Vec::new(); let mut buf = vec![0u8; 4096]; @@ -223,7 +223,7 @@ async fn main() -> Result<(), Box> { info!("TLS handshake completed - ready for HTTPS"); // Send simple HTTP request - let request = b"GET /cdn-cgi/trace HTTP/1.1\r\nHost: cloudflare.com\r\nUser-Agent: smolmix-test/1.0\r\nAccept: */*\r\nConnection: close\r\n\r\n"; + let request = b"GET /cdn-cgi/trace HTTP/1.1\r\nHost: cloudflare.com\r\nUser-Agent: mixtcp-test/1.0\r\nAccept: */*\r\nConnection: close\r\n\r\n"; match tls_conn.send(request, socket) { Ok(_) => { info!("HTTPS request sent"); diff --git a/smolmix/examples/https_client.rs b/mixtcp/examples/https_client.rs similarity index 86% rename from smolmix/examples/https_client.rs rename to mixtcp/examples/https_client.rs index 5e8dcbb5c5d..fa85431b83e 100644 --- a/smolmix/examples/https_client.rs +++ b/mixtcp/examples/https_client.rs @@ -1,7 +1,7 @@ +use mixtcp::{create_device, MixtcpError, NymIprDevice}; use nym_sdk::stream_wrapper::IpMixStream; use reqwest::StatusCode; use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; -use smolmix::{create_device, NymIprDevice, SmolmixError}; use smoltcp::{ iface::{Config, Interface, SocketSet}, socket::tcp, @@ -23,7 +23,7 @@ pub struct TlsOverTcp { } impl TlsOverTcp { - pub fn new(domain: &str) -> Result { + pub fn new(domain: &str) -> Result { let mut root_store = rustls::RootCertStore::empty(); root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); @@ -32,23 +32,23 @@ impl TlsOverTcp { .with_no_client_auth(); let server_name = ServerName::try_from(domain) - .map_err(|_| SmolmixError::InvalidDnsName)? + .map_err(|_| MixtcpError::InvalidDnsName)? .to_owned(); let conn = ClientConnection::new(Arc::new(config), server_name) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; Ok(Self { conn }) } - pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), MixtcpError> { let mut buf = [0u8; 4096]; while self.conn.wants_write() { match self.conn.write_tls(&mut buf.as_mut_slice()) { Ok(n) if n > 0 => { socket .send_slice(&buf[..n]) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; } _ => break, } @@ -56,7 +56,7 @@ impl TlsOverTcp { Ok(()) } - pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), MixtcpError> { if socket.can_recv() { let _ = socket.recv(|chunk| { if !chunk.is_empty() { @@ -69,27 +69,27 @@ impl TlsOverTcp { Ok(()) } - pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), MixtcpError> { self.conn .writer() .write_all(data) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; self.write_tls(socket) } } /// Reqwest-ish client right now, just a handrolled GET request for the example -pub struct SmolmixReqwestClient { +pub struct MixtcpReqwestClient { device: Arc>, _bridge: tokio::task::JoinHandle<()>, _allocated_ip: Ipv4Address, } -impl SmolmixReqwestClient { - pub async fn new() -> Result { +impl MixtcpReqwestClient { + pub async fn new() -> Result { let ipr_stream = IpMixStream::new() .await - .map_err(|_| SmolmixError::MixnetConnectionFailed)?; + .map_err(|_| MixtcpError::MixnetConnectionFailed)?; let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; info!("Allocated IP: {}", allocated_ips.ipv4); @@ -121,18 +121,18 @@ impl SmolmixReqwestClient { }) } - pub async fn get(&self, url: &str) -> Result { - let parsed_url = reqwest::Url::parse(url).map_err(|_| SmolmixError::InvalidUrl)?; - let host = parsed_url.host_str().ok_or(SmolmixError::InvalidUrl)?; + pub async fn get(&self, url: &str) -> Result { + let parsed_url = reqwest::Url::parse(url).map_err(|_| MixtcpError::InvalidUrl)?; + let host = parsed_url.host_str().ok_or(MixtcpError::InvalidUrl)?; let path = parsed_url.path(); let response_bytes = self.simple_get_request(host, path).await?; let (status, body) = self.parse_simple_response(&response_bytes)?; - Ok(SmolmixResponse { status, body }) + Ok(MixtcpResponse { status, body }) } - async fn simple_get_request(&self, domain: &str, path: &str) -> Result, SmolmixError> { + async fn simple_get_request(&self, domain: &str, path: &str) -> Result, MixtcpError> { let tcp_rx_buffer = tcp::SocketBuffer::new(vec![0; 16384]); let tcp_tx_buffer = tcp::SocketBuffer::new(vec![0; 4096]); let tcp_socket = tcp::Socket::new(tcp_rx_buffer, tcp_tx_buffer); @@ -155,7 +155,7 @@ impl SmolmixReqwestClient { loop { if start.elapsed() > Duration::from_secs(60) { - return Err(SmolmixError::Timeout); + return Err(MixtcpError::Timeout); } iface.poll(timestamp, device, &mut sockets); @@ -170,7 +170,7 @@ impl SmolmixReqwestClient { } Err(e) => { info!("TCP connect failed: {}", e); - return Err(SmolmixError::TcpConnectionFailed); + return Err(MixtcpError::TcpConnectionFailed); } } } @@ -181,7 +181,7 @@ impl SmolmixReqwestClient { Ok(t) => tls = Some(t), Err(e) => { info!("TLS create failed: {}", e); - return Err(SmolmixError::TlsHandshakeFailed); + return Err(MixtcpError::TlsHandshakeFailed); } } } @@ -195,7 +195,7 @@ impl SmolmixReqwestClient { info!("TLS handshake completed - ready for HTTPS"); let request = format!( - "GET {} HTTP/1.1\r\nHost: {}\r\nUser-Agent: smolmix/1.0\r\nAccept: */*\r\nConnection: close\r\n\r\n", + "GET {} HTTP/1.1\r\nHost: {}\r\nUser-Agent: mixtcp/1.0\r\nAccept: */*\r\nConnection: close\r\n\r\n", path, domain ); tls_conn.send(request.as_bytes(), socket)?; @@ -221,7 +221,7 @@ impl SmolmixReqwestClient { Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => {} Err(e) => { info!("Read error: {}", e); - return Err(SmolmixError::ResponseReadFailed); + return Err(MixtcpError::ResponseReadFailed); } Ok(_) => continue, } @@ -230,17 +230,17 @@ impl SmolmixReqwestClient { tokio::time::sleep(Duration::from_millis(10)).await; } - Err(SmolmixError::NoResponseReceived) + Err(MixtcpError::NoResponseReceived) } /// Simple response - just extract status and body - fn parse_simple_response(&self, response_bytes: &[u8]) -> Result<(u16, String), SmolmixError> { + fn parse_simple_response(&self, response_bytes: &[u8]) -> Result<(u16, String), MixtcpError> { let response_str = String::from_utf8_lossy(response_bytes); let status_line = response_str .lines() .next() - .ok_or(SmolmixError::InvalidHttpResponse)?; + .ok_or(MixtcpError::InvalidHttpResponse)?; let status: u16 = status_line .split_whitespace() @@ -252,17 +252,17 @@ impl SmolmixReqwestClient { let body = response_str[body_start + 4..].to_string(); Ok((status, body)) } else { - Err(SmolmixError::InvalidHttpResponse) + Err(MixtcpError::InvalidHttpResponse) } } } -pub struct SmolmixResponse { +pub struct MixtcpResponse { status: u16, body: String, } -impl SmolmixResponse { +impl MixtcpResponse { pub fn status(&self) -> StatusCode { StatusCode::from_u16(self.status).unwrap_or(StatusCode::INTERNAL_SERVER_ERROR) } @@ -300,7 +300,7 @@ async fn main() -> Result<(), Box> { ); info!("Setting up mixnet client..."); - let client = SmolmixReqwestClient::new().await?; + let client = MixtcpReqwestClient::new().await?; let start = tokio::time::Instant::now(); let mixnet_response = client.get(test_url).await?; let mixnet_status = mixnet_response.status(); diff --git a/smolmix/examples/tls.rs b/mixtcp/examples/tls.rs similarity index 94% rename from smolmix/examples/tls.rs rename to mixtcp/examples/tls.rs index 9dcc70d3fd5..7f2a9edae18 100644 --- a/smolmix/examples/tls.rs +++ b/mixtcp/examples/tls.rs @@ -1,5 +1,5 @@ +use mixtcp::{create_device, MixtcpError}; use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; -use smolmix::{create_device, SmolmixError}; use std::{ io::{self, Read, Write}, sync::Arc, @@ -23,7 +23,7 @@ pub struct TlsOverTcp { } impl TlsOverTcp { - pub fn new(domain: &str) -> Result { + pub fn new(domain: &str) -> Result { let mut root_store = rustls::RootCertStore::empty(); root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); @@ -32,24 +32,24 @@ impl TlsOverTcp { .with_no_client_auth(); let server_name = ServerName::try_from(domain) - .map_err(|_| SmolmixError::InvalidDnsName)? + .map_err(|_| MixtcpError::InvalidDnsName)? .to_owned(); let conn = ClientConnection::new(Arc::new(config), server_name) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; Ok(Self { conn }) } /// Move data from TLS connection to TCP socket - pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn write_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), MixtcpError> { let mut buf = [0u8; 4096]; while self.conn.wants_write() { match self.conn.write_tls(&mut buf.as_mut_slice()) { Ok(n) if n > 0 => { socket .send_slice(&buf[..n]) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; } _ => break, } @@ -58,7 +58,7 @@ impl TlsOverTcp { } /// Move data from TCP socket to TLS connection - pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn read_tls(&mut self, socket: &mut tcp::Socket) -> Result<(), MixtcpError> { if socket.can_recv() { let _ = socket.recv(|chunk| { if !chunk.is_empty() { @@ -72,15 +72,15 @@ impl TlsOverTcp { Ok(()) } - pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), SmolmixError> { + pub fn send(&mut self, data: &[u8], socket: &mut tcp::Socket) -> Result<(), MixtcpError> { self.conn .writer() .write_all(data) - .map_err(|_| SmolmixError::TlsHandshakeFailed)?; + .map_err(|_| MixtcpError::TlsHandshakeFailed)?; self.write_tls(socket) } - pub fn recv(&mut self, socket: &mut tcp::Socket) -> Result, SmolmixError> { + pub fn recv(&mut self, socket: &mut tcp::Socket) -> Result, MixtcpError> { self.read_tls(socket)?; let mut result = Vec::new(); let mut buf = vec![0u8; 4096]; diff --git a/smolmix/src/bridge.rs b/mixtcp/src/bridge.rs similarity index 96% rename from smolmix/src/bridge.rs rename to mixtcp/src/bridge.rs index f2122eef247..a82b77e911f 100644 --- a/smolmix/src/bridge.rs +++ b/mixtcp/src/bridge.rs @@ -1,7 +1,7 @@ // Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-2.0-only -use crate::error::SmolmixError; +use crate::error::MixtcpError; use nym_ip_packet_requests::codec::MultiIpPacketCodec; use nym_sdk::stream_wrapper::IpMixStream; use tokio::sync::mpsc; @@ -55,7 +55,7 @@ impl NymIprBridge { /// - Maintains packet statistics /// /// The loop exits when channels are closed or an error occurs. - pub async fn run(mut self) -> Result<(), SmolmixError> { + pub async fn run(mut self) -> Result<(), MixtcpError> { info!("Starting Nym IPR bridge"); let mut packets_sent = 0; let mut packets_received = 0; @@ -100,7 +100,7 @@ impl NymIprBridge { // Forward to device via channel if let Err(_) = self.rx_sender.send(packet.to_vec()) { error!("Failed to send packet to device - receiver dropped"); - return Err(SmolmixError::ChannelClosed); + return Err(MixtcpError::ChannelClosed); } packets_received += 1; info!("Total packets received: {}", packets_received); diff --git a/smolmix/src/device.rs b/mixtcp/src/device.rs similarity index 100% rename from smolmix/src/device.rs rename to mixtcp/src/device.rs diff --git a/smolmix/src/error.rs b/mixtcp/src/error.rs similarity index 97% rename from smolmix/src/error.rs rename to mixtcp/src/error.rs index cf6210df40e..56d80807d11 100644 --- a/smolmix/src/error.rs +++ b/mixtcp/src/error.rs @@ -4,7 +4,7 @@ use thiserror::Error; #[derive(Error, Debug)] -pub enum SmolmixError { +pub enum MixtcpError { #[error("Channel closed")] ChannelClosed, diff --git a/smolmix/src/lib.rs b/mixtcp/src/lib.rs similarity index 91% rename from smolmix/src/lib.rs rename to mixtcp/src/lib.rs index 786ad8a796b..76abe07fc61 100644 --- a/smolmix/src/lib.rs +++ b/mixtcp/src/lib.rs @@ -7,7 +7,7 @@ mod error; pub use bridge::NymIprBridge; pub use device::NymIprDevice; -pub use error::SmolmixError; +pub use error::MixtcpError; use nym_ip_packet_requests::IpPair; use nym_sdk::stream_wrapper::IpMixStream; @@ -23,7 +23,7 @@ use tokio::sync::mpsc; /// - Constructs the device and bridge components pub async fn create_device( mut ipr_stream: IpMixStream, -) -> Result<(NymIprDevice, NymIprBridge, IpPair), SmolmixError> { +) -> Result<(NymIprDevice, NymIprBridge, IpPair), MixtcpError> { // Ensure the stream is connected if !ipr_stream.is_connected() { ipr_stream.connect_tunnel().await?; @@ -33,7 +33,7 @@ pub async fn create_device( // further 'up' the flow in the code calling this fn (see examples/tcp_connect.rs). let allocated_ips = ipr_stream .allocated_ips() - .ok_or(SmolmixError::NotConnected)? + .ok_or(MixtcpError::NotConnected)? .clone(); // Create channels for device <-> bridge communication diff --git a/smolmix/README.md b/smolmix/README.md deleted file mode 100644 index ed5b5f1a402..00000000000 --- a/smolmix/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# smolmix poc - -Test TLS conn + smolmix device HTTPS req/res via IPRs with `cargo test`. More to come. From d6835047e11b728496281c9f09e86d9cc9ae9203 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 17 Oct 2025 14:58:09 +0100 Subject: [PATCH 071/139] smol mixtcp readme --- mixtcp/README.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/mixtcp/README.md b/mixtcp/README.md index d77963de1f3..9a245b2fde6 100644 --- a/mixtcp/README.md +++ b/mixtcp/README.md @@ -1,3 +1,30 @@ -# mixtcp poc +# MixTCP -Test TLS conn + mixtcp device HTTPS req/res via IPRs with `cargo test`. More to come. +This is an initial proof of concept of a SmolTCP `device` that uses the Mixnet for transport. It relies on the `IpMixStream` module from the Rust SDK to set up a connection with an Exit Gateway's Ip-Packet-Router, meaning that this is the IP that is seen by the receiver of the request. + +This can be used as the basis for building HTTP(S) crates on top of the Mixnet whilst abstracting away the complexities of using the Mixnet for transport. + +More to come in the future. + +`examples/` contains examples for: +- a TLS ping with Cloudflare +- creating a `reqwest`-like HTTPS `GET` request and receiving a response + +## Component Interaction +```sh + create_device() + | + +--------------+---------------+ + | | | + v v v + NymIprDevice NymIprBridge IpPair + | | (10.0.x.x) + | | + +-- channels --+ + | + v + IpMixStream + | + v + Mixnet +``` From bcf59e951bb0796fc19f41b9679f9642e353f466 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 20 Oct 2025 13:07:14 +0100 Subject: [PATCH 072/139] lint --- common/nymsphinx/forwarding/src/packet.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/nymsphinx/forwarding/src/packet.rs b/common/nymsphinx/forwarding/src/packet.rs index 7bc83d91a6e..34843c75e4e 100644 --- a/common/nymsphinx/forwarding/src/packet.rs +++ b/common/nymsphinx/forwarding/src/packet.rs @@ -5,8 +5,8 @@ use nym_sphinx_addressing::nodes::{NymNodeRoutingAddress, NymNodeRoutingAddressE use nym_sphinx_params::{PacketSize, PacketType, SphinxKeyRotation}; use nym_sphinx_types::{NymPacket, NymPacketError}; use serde::{ - de::{self, Visitor}, Deserialize, Deserializer, Serialize, Serializer, + de::{self, Visitor}, }; use std::fmt; From 6bcbf76e141a963822afaf6201888e0d4fe974c6 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 20 Oct 2025 13:38:12 +0100 Subject: [PATCH 073/139] reintroduce import --- wasm/client/src/client.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/wasm/client/src/client.rs b/wasm/client/src/client.rs index b6eff7af179..4d886b7cee3 100644 --- a/wasm/client/src/client.rs +++ b/wasm/client/src/client.rs @@ -16,8 +16,7 @@ use nym_bin_common::bin_info; use nym_gateway_requests::ClientRequest; use serde::{Deserialize, Serialize}; use std::sync::Arc; -use tokio_with_wasm::sync::mpsc; -use tokio::sync::RwLock; +use tokio_with_wasm::sync::{mpsc, RwLock}; use tsify::Tsify; use wasm_bindgen::prelude::*; use wasm_bindgen_futures::future_to_promise; From ecc8f7558f2dc87a49504a65fd25b4f9897aef05 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 20 Oct 2025 13:40:41 +0100 Subject: [PATCH 074/139] remove accidental import from merge --- wasm/client/src/helpers.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/wasm/client/src/helpers.rs b/wasm/client/src/helpers.rs index 20b786f4795..236118d409c 100644 --- a/wasm/client/src/helpers.rs +++ b/wasm/client/src/helpers.rs @@ -4,7 +4,6 @@ use futures::SinkExt; use js_sys::Promise; use std::sync::Arc; -use tokio::sync::RwLock; use wasm_bindgen::JsValue; use wasm_bindgen_futures::future_to_promise; use wasm_client_core::client::base_client::{ClientInput, ClientState}; From e9bc91338707a6b3fdfcec2a3d49e3757b523eff Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 20 Oct 2025 13:50:16 +0100 Subject: [PATCH 075/139] Add RwLock to wasm client helper --- wasm/client/src/helpers.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/wasm/client/src/helpers.rs b/wasm/client/src/helpers.rs index 236118d409c..eb98970438b 100644 --- a/wasm/client/src/helpers.rs +++ b/wasm/client/src/helpers.rs @@ -4,6 +4,7 @@ use futures::SinkExt; use js_sys::Promise; use std::sync::Arc; +use tokio_with_wasm::sync::RwLock; use wasm_bindgen::JsValue; use wasm_bindgen_futures::future_to_promise; use wasm_client_core::client::base_client::{ClientInput, ClientState}; From d6e3091b119872e509c0745dff2ef5431a9e26c4 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 20 Oct 2025 18:44:56 +0100 Subject: [PATCH 076/139] Mod to mixnet client mutability from traits elsewhere --- Cargo.lock | 13739 ---------------- Cargo.toml | 6 +- .../src/mixnet_beacon.rs | 4 +- .../src/sync_self_ping.rs | 31 +- nym-gateway-probe/src/icmp.rs | 4 +- nym-gateway-probe/src/lib.rs | 2 +- nym-ip-packet-client/src/connect.rs | 2 +- .../network-requester/src/core.rs | 2 +- 8 files changed, 25 insertions(+), 13765 deletions(-) delete mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index c0951fe7d12..00000000000 --- a/Cargo.lock +++ /dev/null @@ -1,13739 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "accessory" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e416a3ab45838bac2ab2d81b1088d738d7b2d2c5272a54d39366565a29bd80" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "addr" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" -dependencies = [ - "psl", - "psl-types", -] - -[[package]] -name = "adler2" -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", - "generic-array 0.14.9", -] - -[[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 2.6.1", -] - -[[package]] -name = "aes-gcm-siv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "polyval", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "ammonia" -version = "4.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" -dependencies = [ - "cssparser", - "html5ever", - "maplit", - "tendril", - "url", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstream" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" -dependencies = [ - "windows-sys 0.60.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.60.2", -] - -[[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - -[[package]] -name = "argon2" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" -dependencies = [ - "base64ct", - "blake2 0.10.6", - "cpufeatures", - "password-hash", -] - -[[package]] -name = "ark-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "rayon", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rayon", - "rustc_version 0.4.1", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand 0.8.5", - "rayon", -] - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "askama" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7" -dependencies = [ - "askama_derive", - "itoa", - "percent-encoding", - "serde", - "serde_json", -] - -[[package]] -name = "askama_derive" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac" -dependencies = [ - "askama_parser", - "basic-toml", - "memchr", - "proc-macro2", - "quote", - "rustc-hash", - "serde", - "serde_derive", - "syn 2.0.106", -] - -[[package]] -name = "askama_parser" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f" -dependencies = [ - "memchr", - "serde", - "serde_derive", - "winnow", -] - -[[package]] -name = "assert-json-diff" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - -[[package]] -name = "async-compression" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" -dependencies = [ - "compression-codecs", - "compression-core", - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "async-lock" -version = "3.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" -dependencies = [ - "event-listener 5.4.1", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "async-tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3609af4bbf701ddaf1f6bb4e6257dff4ff8932327d0e685d3f653724c258b1ac" -dependencies = [ - "futures-io", - "futures-util", - "log", - "pin-project-lite", - "rustls-native-certs 0.7.3", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.25.0", - "tungstenite 0.21.0", -] - -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "auto-future" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "autodoc" -version = "0.1.0" -dependencies = [ - "env_logger", - "log", -] - -[[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.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "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.2", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-client-ip" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" -dependencies = [ - "axum", - "forwarded-header-value", - "serde", -] - -[[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.3.1", - "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-extra" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" -dependencies = [ - "axum", - "axum-core", - "bytes", - "fastrand 2.3.0", - "futures-util", - "headers", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "mime", - "multer", - "pin-project-lite", - "serde", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - -[[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.106", -] - -[[package]] -name = "axum-test" -version = "16.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e3a443d2608936a02a222da7b746eb412fede7225b3030b64fe9be99eab8dc" -dependencies = [ - "anyhow", - "assert-json-diff", - "auto-future", - "axum", - "bytes", - "bytesize", - "cookie", - "http 1.3.1", - "http-body-util", - "hyper 1.7.0", - "hyper-util", - "mime", - "pretty_assertions", - "reserve-port", - "rust-multipart-rfc7578_2", - "serde", - "serde_json", - "serde_urlencoded", - "smallvec", - "tokio", - "tower 0.5.2", - "url", -] - -[[package]] -name = "backon" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d" -dependencies = [ - "fastrand 2.3.0", - "gloo-timers", - "tokio", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64-url" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2b6c78c06f7288d5e3c3d683bde35a79531127c83b087e5d0d77c974b4b28" -dependencies = [ - "base64 0.22.1", -] - -[[package]] -name = "base64ct" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" - -[[package]] -name = "base85rs" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87678d33a2af71f019ed11f52db246ca6c5557edee2cccbe689676d1ad9c6b5a" - -[[package]] -name = "basic-toml" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" -dependencies = [ - "serde", -] - -[[package]] -name = "bech32" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "binstring" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" - -[[package]] -name = "bip32" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" -dependencies = [ - "bs58", - "hmac", - "k256", - "rand_core 0.6.4", - "ripemd", - "secp256k1", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "bip39" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "rand_core 0.6.4", - "serde", - "unicode-normalization", - "zeroize", -] - -[[package]] -name = "bitcoin-internals" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" - -[[package]] -name = "bitcoin_hashes" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" -dependencies = [ - "bitcoin-internals", - "hex-conservative", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" -dependencies = [ - "serde", -] - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "digest 0.10.7", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - -[[package]] -name = "bloomfilter" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" -dependencies = [ - "getrandom 0.2.16", - "siphasher 1.0.1", -] - -[[package]] -name = "bls12_381" -version = "0.8.0" -source = "git+https://github.com/jstuczyn/bls12_381?branch=temp/experimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" -dependencies = [ - "digest 0.10.7", - "ff", - "group", - "pairing", - "rand_core 0.6.4", - "serde", - "serdect 0.3.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "bnum" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" - -[[package]] -name = "brotli" -version = "8.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "sha2 0.10.9", - "tinyvec", -] - -[[package]] -name = "bumpalo" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "bytecodec" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" -dependencies = [ - "byteorder", - "trackable 0.2.24", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -dependencies = [ - "serde", -] - -[[package]] -name = "bytesize" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" - -[[package]] -name = "camino" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" -dependencies = [ - "serde_core", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.27", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.27", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "castaway" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" - -[[package]] -name = "cc" -version = "1.2.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "celes" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" -dependencies = [ - "phf 0.11.3", - "serde", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", -] - -[[package]] -name = "chrono" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-link 0.2.1", -] - -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "clap" -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_complete" -version = "4.5.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" -dependencies = [ - "clap", -] - -[[package]] -name = "clap_complete_fig" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" -dependencies = [ - "clap", - "clap_complete", -] - -[[package]] -name = "clap_derive" -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "clap_lex" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" - -[[package]] -name = "coarsetime" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" -dependencies = [ - "libc", - "wasix", - "wasm-bindgen", -] - -[[package]] -name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "colored" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" -dependencies = [ - "lazy_static", - "windows-sys 0.59.0", -] - -[[package]] -name = "comfy-table" -version = "7.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" -dependencies = [ - "crossterm 0.29.0", - "unicode-segmentation", - "unicode-width 0.2.2", -] - -[[package]] -name = "compression-codecs" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" -dependencies = [ - "brotli", - "compression-core", - "flate2", - "memchr", - "zstd", - "zstd-safe", -] - -[[package]] -name = "compression-core" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "console" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width 0.2.2", - "windows-sys 0.61.2", -] - -[[package]] -name = "console-api" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" -dependencies = [ - "futures-core", - "prost", - "prost-types", - "tonic", - "tracing-core", -] - -[[package]] -name = "console-subscriber" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" -dependencies = [ - "console-api", - "crossbeam-channel", - "crossbeam-utils", - "futures-task", - "hdrhistogram", - "humantime", - "hyper-util", - "prost", - "prost-types", - "serde", - "serde_json", - "thread_local", - "tokio", - "tokio-stream", - "tonic", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const-str" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" - -[[package]] -name = "const_format" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" -dependencies = [ - "const_format_proc_macros", -] - -[[package]] -name = "const_format_proc_macros" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - -[[package]] -name = "cookie" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" -dependencies = [ - "time", - "version_check", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cosmos-sdk-proto" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462e1f6a8e005acc8835d32d60cbd7973ed65ea2a8d8473830e675f050956427" -dependencies = [ - "prost", - "tendermint-proto", -] - -[[package]] -name = "cosmrs" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1394c263335da09e8ba8c4b2c675d804e3e0deb44cce0866a5f838d3ddd43d02" -dependencies = [ - "bip32", - "cosmos-sdk-proto", - "ecdsa", - "eyre", - "k256", - "rand_core 0.6.4", - "serde", - "serde_json", - "signature", - "subtle-encoding", - "tendermint", - "tendermint-rpc", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-core" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" - -[[package]] -name = "cosmwasm-crypto" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", - "cosmwasm-core", - "curve25519-dalek", - "digest 0.10.7", - "ecdsa", - "ed25519-zebra", - "k256", - "num-traits", - "p256", - "rand_core 0.6.4", - "rayon", - "sha2 0.10.9", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "cosmwasm-schema" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" -dependencies = [ - "cosmwasm-schema-derive", - "schemars 0.8.22", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "cosmwasm-std" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" -dependencies = [ - "base64 0.22.1", - "bech32", - "bnum", - "cosmwasm-core", - "cosmwasm-crypto", - "cosmwasm-derive", - "derive_more 1.0.0", - "hex", - "rand_core 0.6.4", - "rmp-serde", - "schemars 0.8.22", - "serde", - "serde-json-wasm", - "sha2 0.10.9", - "static_assertions", - "thiserror 1.0.69", -] - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "criterion" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "futures", - "is-terminal", - "itertools 0.10.5", - "num-traits", - "once_cell", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools 0.10.5", -] - -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crossterm" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" -dependencies = [ - "bitflags 1.3.2", - "crossterm_winapi", - "libc", - "mio 0.8.11", - "parking_lot", - "signal-hook", - "signal-hook-mio", - "winapi", -] - -[[package]] -name = "crossterm" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" -dependencies = [ - "bitflags 2.9.4", - "crossterm_winapi", - "document-features", - "parking_lot", - "rustix", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array 0.14.9", - "rand_core 0.6.4", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array 0.14.9", - "rand_core 0.6.4", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - -[[package]] -name = "cssparser" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "phf 0.11.3", - "smallvec", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.106", -] - -[[package]] -name = "csv" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" -dependencies = [ - "memchr", -] - -[[package]] -name = "ct-codecs" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8" - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "cupid" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1" -dependencies = [ - "gcc", - "rustc_version 0.2.3", -] - -[[package]] -name = "curl" -version = "0.4.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2 0.6.1", - "windows-sys 0.59.0", -] - -[[package]] -name = "curl-sys" -version = "0.4.83+curl-8.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.59.0", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version 0.4.1", - "serde", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "curve25519-dalek-ng" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", - "subtle-ng", - "zeroize", -] - -[[package]] -name = "cw-controllers" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw-multi-test" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" -dependencies = [ - "anyhow", - "bech32", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "itertools 0.14.0", - "prost", - "schemars 0.8.22", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", -] - -[[package]] -name = "cw-storage-plus" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" -dependencies = [ - "cosmwasm-std", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "cw-utils" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw20" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "cw3" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw20", - "schemars 0.8.22", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw4" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "darling" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.106", -] - -[[package]] -name = "darling_macro" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "serde", -] - -[[package]] -name = "data-encoding" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - -[[package]] -name = "debounced" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107e5cd9b5163c19751e53eef634cae25cf5ed5f6d0c81125feaa92e43703cc7" -dependencies = [ - "futures-timer", - "futures-util", -] - -[[package]] -name = "defguard_wireguard_rs" -version = "0.4.7" -source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.4.7#ef1cf3714629bf5016fb38cbb7320451dc69fb09" -dependencies = [ - "base64 0.22.1", - "libc", - "log", - "netlink-packet-core 0.7.0", - "netlink-packet-generic", - "netlink-packet-route 0.20.1", - "netlink-packet-utils", - "netlink-packet-wireguard", - "netlink-sys", - "nix 0.29.0", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "defmt" -version = "0.3.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" -dependencies = [ - "defmt 1.0.1", -] - -[[package]] -name = "defmt" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "548d977b6da32fa1d1fda2876453da1e7df63ad0304c8b3dae4dbe7b96f39b78" -dependencies = [ - "bitflags 1.3.2", - "defmt-macros", -] - -[[package]] -name = "defmt-macros" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d4fc12a85bcf441cfe44344c4b72d58493178ce635338a3f3b78943aceb258e" -dependencies = [ - "defmt-parser", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "defmt-parser" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" -dependencies = [ - "thiserror 2.0.17", -] - -[[package]] -name = "delegate-display" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9926686c832494164c33a36bf65118f4bd6e704000b58c94681bf62e9ad67a74" -dependencies = [ - "impartial-ord", - "itoa", - "macroific", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" -dependencies = [ - "powerfmt", - "serde_core", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - -[[package]] -name = "derive_more" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" -dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "unicode-xid", -] - -[[package]] -name = "derive_more-impl" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "unicode-xid", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.9", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle 2.6.1", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys 0.4.1", -] - -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys 0.5.0", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users 0.4.6", - "windows-sys 0.48.0", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users 0.5.2", - "windows-sys 0.61.2", -] - -[[package]] -name = "dispatch2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" -dependencies = [ - "bitflags 2.9.4", - "block2", - "libc", - "objc2", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "dkg-bypass-contract" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "nym-coconut-dkg-common 0.1.0", - "nym-contracts-common", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "document-features" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" -dependencies = [ - "litrs", -] - -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - -[[package]] -name = "dtoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - -[[package]] -name = "easy-addr" -version = "0.1.0" -dependencies = [ - "cosmwasm-std", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "serdect 0.2.0", - "signature", - "spki", -] - -[[package]] -name = "echo-server" -version = "0.1.0" -dependencies = [ - "anyhow", - "bincode", - "bytecodec", - "bytes", - "clap", - "dashmap", - "dirs 5.0.1", - "futures", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-sdk", - "serde", - "tempfile", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "tracing-subscriber", - "uuid", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "serde", - "signature", -] - -[[package]] -name = "ed25519-compact" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" -dependencies = [ - "ct-codecs", - "getrandom 0.2.16", -] - -[[package]] -name = "ed25519-consensus" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" -dependencies = [ - "curve25519-dalek-ng", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-dalek" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core 0.6.4", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "hashbrown 0.14.5", - "hex", - "rand_core 0.6.4", - "sha2 0.10.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -dependencies = [ - "serde", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array 0.14.9", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "serdect 0.2.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "env_filter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "jiff", - "log", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - -[[package]] -name = "etherparse" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827292ea592108849932ad8e30218f8b1f21c0dfd0696698a18b5d0aed62d990" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "5.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener 5.4.1", - "pin-project-lite", -] - -[[package]] -name = "extension-storage" -version = "1.4.0-rc.0" -dependencies = [ - "bip39", - "console_error_panic_hook", - "js-sys", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-storage", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fancy_constructor" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - -[[package]] -name = "filetime" -version = "0.2.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.60.2", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flex-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" -dependencies = [ - "eyre", - "paste", -] - -[[package]] -name = "flume" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" -dependencies = [ - "futures-core", - "futures-sink", - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "forwarded-header-value" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" -dependencies = [ - "nonempty", - "thiserror 1.0.69", -] - -[[package]] -name = "fs-err" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" -dependencies = [ - "autocfg", -] - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-intrusive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "gcc" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" -dependencies = [ - "serde", - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi", - "wasip2", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug 0.3.1", - "polyval", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "gloo-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.2.0", - "http 1.3.1", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror 1.0.69", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-utils" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-utils" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "goblin" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" -dependencies = [ - "log", - "plain", - "scroll", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.11.4", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.3.1", - "indexmap 2.11.4", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" -dependencies = [ - "cfg-if", - "crunchy", - "zerocopy", -] - -[[package]] -name = "handlebars" -version = "3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" -dependencies = [ - "log", - "pest", - "pest_derive", - "quick-error", - "serde", - "serde_json", -] - -[[package]] -name = "hash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" - -[[package]] -name = "hashlink" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" -dependencies = [ - "hashbrown 0.15.5", -] - -[[package]] -name = "hdrhistogram" -version = "7.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" -dependencies = [ - "base64 0.21.7", - "byteorder", - "flate2", - "nom", - "num-traits", -] - -[[package]] -name = "headers" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" -dependencies = [ - "base64 0.22.1", - "bytes", - "headers-core", - "http 1.3.1", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http 1.3.1", -] - -[[package]] -name = "heapless" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "hash32", - "stable_deref_trait", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-conservative" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" - -[[package]] -name = "hex-literal" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - -[[package]] -name = "hickory-proto" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" -dependencies = [ - "async-trait", - "bytes", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "h2 0.4.12", - "http 1.3.1", - "idna", - "ipnet", - "once_cell", - "rand 0.9.2", - "ring", - "rustls 0.23.32", - "thiserror 2.0.17", - "tinyvec", - "tokio", - "tokio-rustls 0.26.4", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "hickory-resolver" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "moka", - "once_cell", - "parking_lot", - "rand 0.9.2", - "resolv-conf", - "rustls 0.23.32", - "smallvec", - "thiserror 2.0.17", - "tokio", - "tokio-rustls 0.26.4", - "tracing", - "webpki-roots 0.26.11", -] - -[[package]] -name = "hidapi" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" -dependencies = [ - "cc", - "libc", - "pkg-config", - "winapi", -] - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha1-compact" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" - -[[package]] -name = "hmac-sha256" -version = "1.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha512" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "html5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" -dependencies = [ - "log", - "markup5ever", - "match_token", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.3.1", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http 1.3.1", - "http-body 1.0.1", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpcodec" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" -dependencies = [ - "bytecodec", - "trackable 0.2.24", -] - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "humantime" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" - -[[package]] -name = "humantime-serde" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" -dependencies = [ - "humantime", - "serde", -] - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2 0.4.12", - "http 1.3.1", - "http-body 1.0.1", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -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", - "hyper-util", - "rustls 0.23.32", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.4", - "tower-service", - "webpki-roots 1.0.3", -] - -[[package]] -name = "hyper-timeout" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" -dependencies = [ - "hyper 1.7.0", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.7.0", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.1", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.62.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" - -[[package]] -name = "icu_provider" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" -dependencies = [ - "displaydoc", - "icu_locale_core", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "impartial-ord" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "importer-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "bip39", - "clap", - "dirs 5.0.1", - "importer-contract", - "nym-bin-common 0.6.0", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", - "serde", - "serde_json", - "tokio", - "tracing", -] - -[[package]] -name = "importer-contract" -version = "0.1.0" -dependencies = [ - "base85rs", - "cosmwasm-schema", - "cosmwasm-std", -] - -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - -[[package]] -name = "indexed_db_futures" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" -dependencies = [ - "accessory", - "cfg-if", - "delegate-display", - "derive_more 2.0.1", - "fancy_constructor", - "indexed_db_futures_macros_internal", - "js-sys", - "sealed", - "smallvec", - "thiserror 2.0.17", - "tokio", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "indexed_db_futures_macros_internal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caeba94923b68f254abef921cea7e7698bf4675fdd89d7c58bf1ed885b49a27d" -dependencies = [ - "macroific", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" -dependencies = [ - "equivalent", - "hashbrown 0.16.0", - "serde", - "serde_core", -] - -[[package]] -name = "indicatif" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" -dependencies = [ - "console", - "portable-atomic", - "unicode-width 0.2.2", - "unit-prefix", - "vt100", - "web-time", -] - -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "block-padding", - "generic-array 0.14.9", -] - -[[package]] -name = "inquire" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" -dependencies = [ - "bitflags 1.3.2", - "crossterm 0.25.0", - "dyn-clone", - "lazy_static", - "newline-converter", - "thiserror 1.0.69", - "unicode-segmentation", - "unicode-width 0.1.14", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - -[[package]] -name = "inventory" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" -dependencies = [ - "rustversion", -] - -[[package]] -name = "ip_network" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" - -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2 0.5.10", - "widestring", - "windows-sys 0.48.0", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "ipnetwork" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" -dependencies = [ - "serde", -] - -[[package]] -name = "ipnetwork" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf370abdafd54d13e54a620e8c3e1145f28e46cc9d704bc6d94414559df41763" - -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "isahc" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" -dependencies = [ - "async-channel", - "castaway", - "crossbeam-utils", - "curl", - "curl-sys", - "event-listener 2.5.3", - "futures-lite", - "http 0.2.12", - "log", - "once_cell", - "polling", - "slab", - "sluice", - "tracing", - "tracing-futures", - "url", - "waker-fn", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jiff" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" -dependencies = [ - "jiff-static", - "log", - "portable-atomic", - "portable-atomic-util", - "serde", -] - -[[package]] -name = "jiff-static" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jwt-simple" -version = "0.12.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "731011e9647a71ff4f8474176ff6ce6e0d2de87a0173f15613af3a84c3e3401a" -dependencies = [ - "anyhow", - "binstring", - "blake2b_simd", - "coarsetime", - "ct-codecs", - "ed25519-compact", - "hmac-sha1-compact", - "hmac-sha256", - "hmac-sha512", - "k256", - "p256", - "p384", - "rand 0.8.5", - "serde", - "serde_json", - "superboring", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "k256" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2 0.10.9", - "signature", -] - -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - -[[package]] -name = "kqueue" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "ledger-apdu" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" -dependencies = [ - "arrayref", - "no-std-compat", - "snafu", -] - -[[package]] -name = "ledger-transport" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" -dependencies = [ - "async-trait", - "ledger-apdu", -] - -[[package]] -name = "ledger-transport-hid" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" -dependencies = [ - "byteorder", - "cfg-if", - "hex", - "hidapi", - "ledger-transport", - "libc", - "log", - "thiserror 1.0.69", -] - -[[package]] -name = "libc" -version = "0.2.177" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" - -[[package]] -name = "libm" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" - -[[package]] -name = "libredox" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" -dependencies = [ - "bitflags 2.9.4", - "libc", - "redox_syscall", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" - -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2 0.8.1", - "chacha", - "keystream", -] - -[[package]] -name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "litrs" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "macroific" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89f276537b4b8f981bf1c13d79470980f71134b7bdcc5e6e911e910e556b0285" -dependencies = [ - "macroific_attr_parse", - "macroific_core", - "macroific_macro", -] - -[[package]] -name = "macroific_attr_parse" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad4023761b45fcd36abed8fb7ae6a80456b0a38102d55e89a57d9a594a236be9" -dependencies = [ - "proc-macro2", - "quote", - "sealed", - "syn 2.0.106", -] - -[[package]] -name = "macroific_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a7594d3c14916fa55bef7e9d18c5daa9ed410dd37504251e4b75bbdeec33e3" -dependencies = [ - "proc-macro2", - "quote", - "sealed", - "syn 2.0.106", -] - -[[package]] -name = "macroific_macro" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da6f2ed796261b0a74e2b52b42c693bb6dee1effba3a482c49592659f824b3b" -dependencies = [ - "macroific_attr_parse", - "macroific_core", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "managed" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "markup5ever" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" -dependencies = [ - "log", - "tendril", - "web_atoms", -] - -[[package]] -name = "match_token" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest 0.10.7", -] - -[[package]] -name = "memchr" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minicov" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" -dependencies = [ - "cc", - "walkdir", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.59.0", -] - -[[package]] -name = "mix-fetch-wasm" -version = "1.4.0-rc.0" -dependencies = [ - "async-trait", - "futures", - "js-sys", - "nym-bin-common 0.6.0", - "nym-http-api-client", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-requests", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "tokio", - "tsify", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-client-core", - "wasm-utils", -] - -[[package]] -name = "mixnet-connectivity-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "futures", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-network-defaults 0.1.0", - "nym-sdk", - "tokio", - "tracing", -] - -[[package]] -name = "mixtcp" -version = "0.0.1" -dependencies = [ - "bytes", - "dirs 5.0.1", - "nym-bin-common 0.6.0", - "nym-ip-packet-requests", - "nym-sdk", - "reqwest 0.12.24", - "rustls 0.23.32", - "serde_json", - "smoltcp", - "thiserror 2.0.17", - "tokio", - "tracing", - "tracing-subscriber", - "webpki-roots 1.0.3", -] - -[[package]] -name = "mock_instant" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" - -[[package]] -name = "moka" -version = "0.12.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" -dependencies = [ - "async-lock", - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "equivalent", - "event-listener 5.4.1", - "futures-util", - "parking_lot", - "portable-atomic", - "rustc_version 0.4.1", - "smallvec", - "tagptr", - "uuid", -] - -[[package]] -name = "multer" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http 1.3.1", - "httparse", - "memchr", - "mime", - "spin", - "version_check", -] - -[[package]] -name = "netlink-packet-core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-core" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" -dependencies = [ - "paste", -] - -[[package]] -name = "netlink-packet-generic" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-core 0.7.0", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" -dependencies = [ - "anyhow", - "bitflags 2.9.4", - "byteorder", - "libc", - "log", - "netlink-packet-core 0.7.0", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec2f5b6839be2a19d7fa5aab5bc444380f6311c2b693551cb80f45caaa7b5ef" -dependencies = [ - "bitflags 2.9.4", - "libc", - "log", - "netlink-packet-core 0.8.1", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", -] - -[[package]] -name = "netlink-packet-wireguard" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b25b050ff1f6a1e23c6777b72db22790fe5b6b5ccfd3858672587a79876c8f" -dependencies = [ - "anyhow", - "byteorder", - "libc", - "log", - "netlink-packet-generic", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-proto" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core 0.8.1", - "netlink-sys", - "thiserror 2.0.17", -] - -[[package]] -name = "netlink-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" -dependencies = [ - "bytes", - "futures", - "libc", - "log", - "tokio", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "newline-converter" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nonempty" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" - -[[package]] -name = "notify" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" -dependencies = [ - "bitflags 1.3.2", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "mio 0.8.11", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.5", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "nym-api" -version = "1.1.67" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "axum-test", - "bincode", - "bip39", - "bs58", - "cfg-if", - "clap", - "console-subscriber", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw3", - "cw4", - "dashmap", - "dotenvy", - "futures", - "humantime-serde", - "moka", - "nym-api-requests 0.1.0", - "nym-bandwidth-controller", - "nym-bin-common 0.6.0", - "nym-cache", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", - "nym-contracts-common", - "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-dkg", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-signer-check", - "nym-ecash-time 0.1.0", - "nym-gateway-client", - "nym-http-api-client", - "nym-http-api-common", - "nym-mixnet-contract-common 0.6.0", - "nym-node-requests 0.1.0", - "nym-node-tester-utils", - "nym-pemstore 0.3.0", - "nym-serde-helpers 0.1.0", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-ticketbooks-merkle 0.1.0", - "nym-topology", - "nym-types", - "nym-validator-client 0.1.0", - "pin-project", - "rand 0.8.5", - "rand_chacha 0.3.1", - "reqwest 0.12.24", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx", - "tempfile", - "tendermint", - "test-with", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "ts-rs", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", - "zeroize", -] - -[[package]] -name = "nym-api-requests" -version = "0.1.0" -dependencies = [ - "bs58", - "cosmrs", - "cosmwasm-std", - "ecdsa", - "hex", - "humantime-serde", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", - "nym-contracts-common", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-signer-check-types 0.1.0", - "nym-ecash-time 0.1.0", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-node-requests 0.1.0", - "nym-noise-keys 0.1.0", - "nym-serde-helpers 0.1.0", - "nym-ticketbooks-merkle 0.1.0", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tracing", - "ts-rs", - "utoipa", -] - -[[package]] -name = "nym-api-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "bs58", - "cosmrs", - "cosmwasm-std", - "ecdsa", - "hex", - "humantime-serde", - "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-contracts-common", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-signer-check-types 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-node-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-noise-keys 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ticketbooks-merkle 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-apple-network" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "block2", - "dispatch2", - "nix 0.30.1", - "objc2", - "objc2-foundation", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-async-file-watcher" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "notify", - "tokio", -] - -[[package]] -name = "nym-authenticator-client" -version = "0.1.0" -dependencies = [ - "bincode", - "futures", - "nym-authenticator-requests", - "nym-bandwidth-controller", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-registration-common", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-validator-client 0.1.0", - "nym-wireguard-types 0.1.0", - "semver 1.0.27", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-authenticator-requests" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "bincode", - "hmac", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-network-defaults 0.1.0", - "nym-service-provider-requests-common", - "nym-sphinx", - "nym-wireguard-types 0.1.0", - "rand 0.8.5", - "semver 1.0.27", - "serde", - "sha2 0.10.9", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "x25519-dalek", -] - -[[package]] -name = "nym-bandwidth-controller" -version = "0.1.0" -dependencies = [ - "async-trait", - "bip39", - "log", - "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-time 0.1.0", - "nym-network-defaults 0.1.0", - "nym-task", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "thiserror 2.0.17", - "url", - "zeroize", -] - -[[package]] -name = "nym-bin-common" -version = "0.6.0" -dependencies = [ - "clap", - "clap_complete", - "clap_complete_fig", - "const-str", - "log", - "opentelemetry", - "opentelemetry-jaeger", - "schemars 0.8.22", - "serde", - "serde_json", - "tracing", - "tracing-opentelemetry", - "tracing-subscriber", - "tracing-tree", - "utoipa", - "vergen", -] - -[[package]] -name = "nym-bin-common" -version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "const-str", - "log", - "schemars 0.8.22", - "serde", - "utoipa", - "vergen", -] - -[[package]] -name = "nym-cache" -version = "0.1.0" -dependencies = [ - "tokio", -] - -[[package]] -name = "nym-cli" -version = "1.1.64" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bip39", - "bs58", - "clap", - "clap_complete", - "clap_complete_fig", - "dotenvy", - "inquire", - "log", - "nym-bin-common 0.6.0", - "nym-cli-commands", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", - "serde", - "serde_json", - "tap", - "tokio", -] - -[[package]] -name = "nym-cli-commands" -version = "1.0.0" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bip39", - "bs58", - "cfg-if", - "clap", - "colored", - "comfy-table", - "cosmrs", - "cosmwasm-std", - "csv", - "cw-utils", - "futures", - "handlebars", - "humantime-serde", - "inquire", - "k256", - "log", - "nym-bandwidth-controller", - "nym-bin-common 0.6.0", - "nym-client-core", - "nym-coconut-dkg-common 0.1.0", - "nym-config 0.1.0", - "nym-contracts-common", - "nym-credential-proxy-requests 0.1.0", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-time 0.1.0", - "nym-http-api-client", - "nym-id", - "nym-mixnet-contract-common 0.6.0", - "nym-multisig-contract-common 0.1.0", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", - "nym-sphinx", - "nym-types", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "toml 0.8.23", - "url", - "zeroize", -] - -[[package]] -name = "nym-client" -version = "1.1.64" -dependencies = [ - "bs58", - "clap", - "dirs 5.0.1", - "futures", - "log", - "nym-bandwidth-controller", - "nym-bin-common 0.6.0", - "nym-client-core", - "nym-client-websocket-requests", - "nym-config 0.1.0", - "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", - "nym-gateway-requests", - "nym-id", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", - "nym-sphinx", - "nym-task", - "nym-topology", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core" -version = "1.1.15" -dependencies = [ - "async-trait", - "base64 0.21.7", - "bincode", - "bs58", - "cfg-if", - "clap", - "comfy-table", - "futures", - "gloo-timers", - "http-body-util", - "humantime", - "hyper 1.7.0", - "hyper-util", - "nym-bandwidth-controller", - "nym-client-core-config-types", - "nym-client-core-gateways-storage", - "nym-client-core-surb-storage", - "nym-credential-storage", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", - "nym-gateway-client", - "nym-gateway-requests", - "nym-http-api-client", - "nym-id", - "nym-mixnet-client", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-nonexhaustive-delayqueue", - "nym-pemstore 0.3.0", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-client-core-config-types" -version = "0.1.0" -dependencies = [ - "humantime-serde", - "nym-config 0.1.0", - "nym-pemstore 0.3.0", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-statistics-common", - "serde", - "thiserror 2.0.17", - "url", -] - -[[package]] -name = "nym-client-core-gateways-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "cosmrs", - "nym-crypto 0.4.0", - "nym-gateway-requests", - "serde", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core-surb-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "dashmap", - "nym-crypto 0.4.0", - "nym-sphinx", - "nym-task", - "sqlx", - "sqlx-pool-guard", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-client-wasm" -version = "1.4.0-rc.0" -dependencies = [ - "anyhow", - "futures", - "js-sys", - "nym-bin-common 0.6.0", - "nym-node-tester-utils", - "nym-node-tester-wasm", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "wasm-client-core", - "wasm-utils", -] - -[[package]] -name = "nym-client-websocket-requests" -version = "0.1.0" -dependencies = [ - "nym-sphinx", - "serde", - "serde_json", -] - -[[package]] -name = "nym-coconut-dkg-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw4", - "nym-contracts-common", - "nym-multisig-contract-common 0.1.0", -] - -[[package]] -name = "nym-coconut-dkg-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw4", - "nym-contracts-common", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", -] - -[[package]] -name = "nym-common" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "tracing", - "tracing-test", -] - -[[package]] -name = "nym-compact-ecash" -version = "0.1.0" -dependencies = [ - "bincode", - "bls12_381", - "bs58", - "cfg-if", - "criterion", - "digest 0.10.7", - "ff", - "group", - "itertools 0.14.0", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", - "rand 0.8.5", - "rayon", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-compact-ecash" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "bincode", - "bls12_381", - "bs58", - "cfg-if", - "digest 0.10.7", - "ff", - "group", - "itertools 0.14.0", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=develop)", - "rand 0.8.5", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-config" -version = "0.1.0" -dependencies = [ - "dirs 5.0.1", - "handlebars", - "log", - "nym-network-defaults 0.1.0", - "serde", - "thiserror 2.0.17", - "toml 0.8.23", - "url", -] - -[[package]] -name = "nym-config" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "dirs 6.0.0", - "handlebars", - "log", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "thiserror 2.0.17", - "toml 0.8.23", - "url", -] - -[[package]] -name = "nym-contracts-common" -version = "0.5.0" -dependencies = [ - "anyhow", - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars 0.8.22", - "serde", - "serde_json", - "thiserror 2.0.17", - "utoipa", - "vergen", -] - -[[package]] -name = "nym-contracts-common-testing" -version = "0.1.0" -dependencies = [ - "anyhow", - "cosmwasm-std", - "cw-multi-test", - "cw-storage-plus", - "nym-contracts-common", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", -] - -[[package]] -name = "nym-cpp-ffi" -version = "0.1.2" -dependencies = [ - "anyhow", - "bs58", - "lazy_static", - "nym-bin-common 0.6.0", - "nym-ffi-shared", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "tokio", -] - -[[package]] -name = "nym-credential-proxy" -version = "0.3.0" -dependencies = [ - "anyhow", - "axum", - "bip39", - "bs58", - "cfg-if", - "clap", - "futures", - "humantime", - "nym-bin-common 0.6.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", - "nym-credential-proxy-lib", - "nym-credential-proxy-requests 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-signer-check", - "nym-http-api-common", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "strum", - "strum_macros 0.27.2", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "url", - "utoipa", - "utoipa-swagger-ui", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-credential-proxy-lib" -version = "0.1.0" -dependencies = [ - "anyhow", - "axum", - "bip39", - "bs58", - "futures", - "humantime", - "nym-cache", - "nym-compact-ecash 0.1.0", - "nym-credential-proxy-requests 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-signer-check", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "strum", - "strum_macros 0.27.2", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tracing", - "url", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-credential-proxy-requests" -version = "0.1.0" -dependencies = [ - "async-trait", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-http-api-client", - "nym-http-api-common", - "nym-serde-helpers 0.1.0", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "serde_json", - "time", - "tsify", - "utoipa", - "uuid", - "wasm-bindgen", - "wasmtimer", -] - -[[package]] -name = "nym-credential-proxy-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "async-trait", - "nym-credentials 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-http-api-client", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "serde_json", - "serde_with", - "time", - "uuid", - "wasmtimer", -] - -[[package]] -name = "nym-credential-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "log", - "nym-compact-ecash 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", - "nym-test-utils", - "serde", - "sqlx", - "sqlx-pool-guard", - "thiserror 2.0.17", - "tokio", - "zeroize", -] - -[[package]] -name = "nym-credential-utils" -version = "0.1.0" -dependencies = [ - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config 0.1.0", - "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-ecash-time 0.1.0", - "nym-validator-client 0.1.0", - "thiserror 2.0.17", - "time", - "tokio", -] - -[[package]] -name = "nym-credential-verification" -version = "0.1.0" -dependencies = [ - "async-trait", - "bs58", - "cosmwasm-std", - "cw-utils", - "dyn-clone", - "futures", - "nym-api-requests 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-ecash-contract-common 0.1.0", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-task", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "si-scale", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-credentials" -version = "0.1.0" -dependencies = [ - "bincode", - "bls12_381", - "cosmrs", - "log", - "nym-api-requests 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-time 0.1.0", - "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-serde-helpers 0.1.0", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "zeroize", -] - -[[package]] -name = "nym-credentials" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "bincode", - "bls12_381", - "cosmrs", - "log", - "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-http-api-client", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "thiserror 2.0.17", - "time", - "zeroize", -] - -[[package]] -name = "nym-credentials-interface" -version = "0.1.0" -dependencies = [ - "bls12_381", - "nym-compact-ecash 0.1.0", - "nym-ecash-time 0.1.0", - "nym-network-defaults 0.1.0", - "rand 0.8.5", - "serde", - "strum", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "time", - "utoipa", -] - -[[package]] -name = "nym-credentials-interface" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "bls12_381", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "rand 0.8.5", - "serde", - "strum", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "time", - "utoipa", -] - -[[package]] -name = "nym-crypto" -version = "0.4.0" -dependencies = [ - "aead", - "aes", - "aes-gcm-siv", - "base64 0.22.1", - "blake3", - "bs58", - "cipher", - "ctr", - "digest 0.10.7", - "ed25519-dalek", - "generic-array 0.14.9", - "hkdf", - "hmac", - "jwt-simple", - "nym-pemstore 0.3.0", - "nym-sphinx-types 0.2.0", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_bytes", - "sha2 0.10.9", - "subtle-encoding", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-crypto" -version = "0.4.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "aes", - "base64 0.22.1", - "bs58", - "cipher", - "ctr", - "ed25519-dalek", - "generic-array 0.14.9", - "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-sphinx-types 0.2.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "serde_bytes", - "subtle-encoding", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-dkg" -version = "0.1.0" -dependencies = [ - "bitvec", - "bls12_381", - "bs58", - "criterion", - "ff", - "group", - "lazy_static", - "nym-contracts-common", - "nym-pemstore 0.3.0", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "serde", - "serde_derive", - "sha2 0.10.9", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-ecash-contract-common" -version = "0.1.0" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "nym-multisig-contract-common 0.1.0", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ecash-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ecash-signer-check" -version = "0.1.0" -dependencies = [ - "futures", - "nym-ecash-signer-check-types 0.1.0", - "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", - "semver 1.0.27", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nym-ecash-signer-check-types" -version = "0.1.0" -dependencies = [ - "nym-coconut-dkg-common 0.1.0", - "nym-crypto 0.4.0", - "semver 1.0.27", - "serde", - "thiserror 2.0.17", - "time", - "tracing", - "url", - "utoipa", -] - -[[package]] -name = "nym-ecash-signer-check-types" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "semver 1.0.27", - "serde", - "thiserror 2.0.17", - "time", - "tracing", - "url", - "utoipa", -] - -[[package]] -name = "nym-ecash-time" -version = "0.1.0" -dependencies = [ - "nym-compact-ecash 0.1.0", - "time", -] - -[[package]] -name = "nym-ecash-time" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "time", -] - -[[package]] -name = "nym-exit-policy" -version = "0.1.0" -dependencies = [ - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-exit-policy" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "serde", - "serde_json", - "thiserror 2.0.17", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-ffi-shared" -version = "0.2.1" -dependencies = [ - "anyhow", - "bs58", - "lazy_static", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "tokio", - "uniffi", - "uniffi_build", -] - -[[package]] -name = "nym-gateway" -version = "1.1.36" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bip39", - "bs58", - "dashmap", - "defguard_wireguard_rs", - "fastrand 2.3.0", - "futures", - "ipnetwork 0.20.0", - "mock_instant", - "nym-api-requests 0.1.0", - "nym-authenticator-requests", - "nym-client-core", - "nym-credential-verification", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-gateway-requests", - "nym-gateway-stats-storage", - "nym-gateway-storage", - "nym-id", - "nym-ip-packet-router", - "nym-mixnet-client", - "nym-mixnode-common", - "nym-network-defaults 0.1.0", - "nym-network-requester", - "nym-node-metrics", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-types", - "nym-validator-client 0.1.0", - "nym-wireguard", - "nym-wireguard-private-metadata-server", - "nym-wireguard-types 0.1.0", - "rand 0.8.5", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-gateway-client" -version = "0.1.0" -dependencies = [ - "futures", - "getrandom 0.2.16", - "gloo-utils 0.2.0", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-gateway-requests", - "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "serde", - "si-scale", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-directory" -version = "0.0.0" -dependencies = [ - "itertools 0.14.0", - "nym-client-core", - "nym-common", - "nym-crypto 0.4.0", - "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-offline-monitor", - "nym-sphinx", - "nym-sphinx-addressing", - "nym-topology", - "nym-validator-client 0.1.0", - "nym-vpn-api-client", - "rand 0.8.5", - "serde", - "serde_json", - "strum", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "nym-gateway-requests" -version = "0.1.0" -dependencies = [ - "anyhow", - "bs58", - "futures", - "generic-array 0.14.9", - "nym-compact-ecash 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-pemstore 0.3.0", - "nym-serde-helpers 0.1.0", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-test-utils", - "rand 0.8.5", - "serde", - "serde_json", - "strum", - "subtle 2.6.1", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "tungstenite 0.20.1", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-stats-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "nym-node-metrics", - "nym-sphinx", - "nym-statistics-common", - "sqlx", - "strum", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-gateway-storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "defguard_wireguard_rs", - "dyn-clone", - "nym-credentials-interface 0.1.0", - "nym-gateway-requests", - "nym-sphinx", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-go-ffi" -version = "0.2.2" -dependencies = [ - "anyhow", - "lazy_static", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-ffi-shared", - "nym-sdk", - "nym-sphinx-anonymous-replies", - "thiserror 2.0.17", - "tokio", - "uniffi", - "uniffi_build", -] - -[[package]] -name = "nym-group-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cw-controllers", - "cw4", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "nym-group-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "cosmwasm-schema", - "cw-controllers", - "cw4", - "schemars 0.8.22", - "serde", -] - -[[package]] -name = "nym-http-api-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "bincode", - "bytes", - "cfg-if", - "encoding_rs", - "hickory-resolver", - "http 1.3.1", - "inventory", - "itertools 0.14.0", - "mime", - "nym-bin-common 0.6.0", - "nym-http-api-client-macro", - "nym-http-api-common", - "nym-network-defaults 0.1.0", - "once_cell", - "reqwest 0.12.24", - "serde", - "serde_json", - "serde_plain", - "serde_yaml", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "nym-http-api-client-macro" -version = "0.1.0" -dependencies = [ - "nym-http-api-client", - "proc-macro-crate", - "proc-macro2", - "quote", - "reqwest 0.12.24", - "syn 2.0.106", - "uuid", -] - -[[package]] -name = "nym-http-api-common" -version = "0.1.0" -dependencies = [ - "axum", - "axum-client-ip", - "bincode", - "bytes", - "colored", - "futures", - "mime", - "serde", - "serde_json", - "serde_yaml", - "subtle 2.6.1", - "time", - "tower 0.5.2", - "tracing", - "utoipa", - "zeroize", -] - -[[package]] -name = "nym-id" -version = "0.1.0" -dependencies = [ - "nym-credential-storage", - "nym-credentials 0.1.0", - "thiserror 2.0.17", - "time", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-id-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "bs58", - "clap", - "nym-bin-common 0.6.0", - "nym-credential-storage", - "nym-id", - "tokio", - "tracing", -] - -[[package]] -name = "nym-inclusion-probability" -version = "0.1.0" -dependencies = [ - "log", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ip-packet-client" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "futures", - "nym-ip-packet-requests", - "nym-sdk", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-ip-packet-requests" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-service-provider-requests-common", - "nym-sphinx", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", -] - -[[package]] -name = "nym-ip-packet-router" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bs58", - "bytes", - "clap", - "etherparse", - "futures", - "log", - "nym-bin-common 0.6.0", - "nym-client-core", - "nym-config 0.1.0", - "nym-crypto 0.4.0", - "nym-exit-policy 0.1.0", - "nym-id", - "nym-ip-packet-requests", - "nym-network-defaults 0.1.0", - "nym-network-requester", - "nym-sdk", - "nym-service-provider-requests-common", - "nym-service-providers-common", - "nym-sphinx", - "nym-task", - "nym-tun", - "nym-types", - "nym-wireguard", - "nym-wireguard-types 0.1.0", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tun", - "tokio-util", - "url", -] - -[[package]] -name = "nym-ledger" -version = "0.1.0" -dependencies = [ - "bip32", - "k256", - "ledger-transport", - "ledger-transport-hid", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-metrics" -version = "0.1.0" -dependencies = [ - "dashmap", - "lazy_static", - "prometheus", - "tracing", -] - -[[package]] -name = "nym-mixnet-client" -version = "0.1.0" -dependencies = [ - "dashmap", - "futures", - "nym-crypto 0.4.0", - "nym-noise", - "nym-sphinx", - "nym-task", - "rand 0.8.5", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-mixnet-contract-common" -version = "0.6.0" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-storage-plus", - "cw2", - "humantime-serde", - "nym-contracts-common", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "serde_repr", - "thiserror 2.0.17", - "time", - "ts-rs", - "utoipa", -] - -[[package]] -name = "nym-mixnet-contract-common" -version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-storage-plus", - "humantime-serde", - "nym-contracts-common", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "serde_repr", - "thiserror 2.0.17", - "time", - "utoipa", -] - -[[package]] -name = "nym-mixnode-common" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "humantime-serde", - "log", - "nym-crypto 0.4.0", - "nym-metrics", - "nym-network-defaults 0.1.0", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-types 0.2.0", - "nym-task", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "url", -] - -[[package]] -name = "nym-multisig-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "cw3", - "cw4", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-multisig-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "cw3", - "cw4", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-network-defaults" -version = "0.1.0" -dependencies = [ - "cargo_metadata 0.19.2", - "dotenvy", - "log", - "regex", - "schemars 0.8.22", - "serde", - "url", - "utoipa", -] - -[[package]] -name = "nym-network-defaults" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "cargo_metadata 0.19.2", - "dotenvy", - "log", - "regex", - "schemars 0.8.22", - "serde", - "url", - "utoipa", -] - -[[package]] -name = "nym-network-monitor" -version = "1.0.2" -dependencies = [ - "anyhow", - "axum", - "clap", - "dashmap", - "futures", - "log", - "nym-bin-common 0.6.0", - "nym-client-core", - "nym-crypto 0.4.0", - "nym-gateway-requests", - "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-sdk", - "nym-sphinx", - "nym-topology", - "nym-types", - "nym-validator-client 0.1.0", - "petgraph", - "rand 0.8.5", - "rand_chacha 0.3.1", - "reqwest 0.12.24", - "serde", - "serde_json", - "tokio", - "tokio-postgres", - "tokio-util", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "nym-network-requester" -version = "1.1.65" -dependencies = [ - "addr", - "anyhow", - "async-trait", - "bs58", - "clap", - "dirs 5.0.1", - "futures", - "humantime-serde", - "ipnetwork 0.20.0", - "log", - "nym-async-file-watcher", - "nym-bin-common 0.6.0", - "nym-client-core", - "nym-client-websocket-requests", - "nym-config 0.1.0", - "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", - "nym-exit-policy 0.1.0", - "nym-id", - "nym-network-defaults 0.1.0", - "nym-ordered-buffer", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-types", - "publicsuffix", - "rand 0.8.5", - "regex", - "reqwest 0.12.24", - "serde", - "serde_json", - "sqlx", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "tokio-util", - "url", - "zeroize", -] - -[[package]] -name = "nym-node" -version = "1.19.0" -dependencies = [ - "anyhow", - "arc-swap", - "arrayref", - "async-trait", - "axum", - "bip39", - "blake2 0.8.1", - "bloomfilter", - "bs58", - "cargo_metadata 0.19.2", - "celes", - "cfg-if", - "chacha", - "clap", - "colored", - "console-subscriber", - "criterion", - "csv", - "cupid", - "futures", - "hkdf", - "human-repr", - "humantime-serde", - "indicatif", - "ipnetwork 0.20.0", - "lioness", - "nym-bin-common 0.6.0", - "nym-client-core-config-types", - "nym-config 0.1.0", - "nym-crypto 0.4.0", - "nym-gateway", - "nym-gateway-stats-storage", - "nym-http-api-client", - "nym-http-api-common", - "nym-ip-packet-router", - "nym-metrics", - "nym-mixnet-client", - "nym-network-requester", - "nym-node-metrics", - "nym-node-requests 0.1.0", - "nym-noise", - "nym-noise-keys 0.1.0", - "nym-nonexhaustive-delayqueue", - "nym-pemstore 0.3.0", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-types", - "nym-validator-client 0.1.0", - "nym-verloc", - "nym-wireguard", - "nym-wireguard-types 0.1.0", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "sysinfo", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.8.23", - "tower-http 0.5.2", - "tracing", - "tracing-indicatif", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "zeroize", -] - -[[package]] -name = "nym-node-metrics" -version = "0.1.0" -dependencies = [ - "dashmap", - "futures", - "nym-metrics", - "nym-statistics-common", - "strum", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "nym-node-requests" -version = "0.1.0" -dependencies = [ - "async-trait", - "celes", - "humantime", - "humantime-serde", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-exit-policy 0.1.0", - "nym-http-api-client", - "nym-noise-keys 0.1.0", - "nym-wireguard-types 0.1.0", - "rand_chacha 0.3.1", - "schemars 0.8.22", - "serde", - "serde_json", - "strum", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "time", - "tokio", - "utoipa", -] - -[[package]] -name = "nym-node-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "celes", - "humantime", - "humantime-serde", - "nym-bin-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-exit-policy 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-noise-keys 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-wireguard-types 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "schemars 0.8.22", - "serde", - "serde_json", - "strum", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "time", - "utoipa", -] - -[[package]] -name = "nym-node-status-agent" -version = "1.0.7" -dependencies = [ - "anyhow", - "clap", - "futures", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-node-status-client", - "rand 0.8.5", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "nym-node-status-api" -version = "4.0.5" -dependencies = [ - "ammonia", - "anyhow", - "axum", - "axum-test", - "bip39", - "bs58", - "celes", - "clap", - "cosmwasm-std", - "futures-util", - "humantime", - "itertools 0.14.0", - "moka", - "nym-bin-common 0.6.0", - "nym-contracts-common", - "nym-credential-proxy-lib", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", - "nym-http-api-client", - "nym-http-api-common", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-node-metrics", - "nym-node-requests 0.1.0", - "nym-node-status-client", - "nym-serde-helpers 0.1.0", - "nym-statistics-common", - "nym-task", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "rand_chacha 0.3.1", - "regex", - "reqwest 0.12.24", - "semver 1.0.27", - "serde", - "serde_json", - "serde_json_path", - "sqlx", - "strum", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-log 0.2.0", - "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", - "zeroize", -] - -[[package]] -name = "nym-node-status-client" -version = "0.2.0" -dependencies = [ - "anyhow", - "bincode", - "bs58", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", - "reqwest 0.12.24", - "serde", - "serde_json", - "time", - "tracing", -] - -[[package]] -name = "nym-node-tester-utils" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "nym-crypto 0.4.0", - "nym-sphinx", - "nym-sphinx-params", - "nym-task", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "wasm-utils", -] - -[[package]] -name = "nym-node-tester-wasm" -version = "1.3.0-rc.0" -dependencies = [ - "futures", - "js-sys", - "nym-node-tester-utils", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "tokio", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-client-core", - "wasm-utils", - "wasmtimer", -] - -[[package]] -name = "nym-noise" -version = "0.1.0" -dependencies = [ - "anyhow", - "arc-swap", - "bytes", - "futures", - "nym-crypto 0.4.0", - "nym-noise-keys 0.1.0", - "nym-test-utils", - "pin-project", - "rand_chacha 0.3.1", - "sha2 0.10.9", - "snow", - "strum", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-noise-keys" -version = "0.1.0" -dependencies = [ - "nym-crypto 0.4.0", - "schemars 0.8.22", - "serde", - "utoipa", -] - -[[package]] -name = "nym-noise-keys" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "schemars 0.8.22", - "serde", - "utoipa", -] - -[[package]] -name = "nym-nonexhaustive-delayqueue" -version = "0.1.0" -dependencies = [ - "tokio", - "tokio-stream", - "tokio-util", - "wasmtimer", -] - -[[package]] -name = "nym-nr-query" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "log", - "nym-bin-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-sdk", - "nym-service-providers-common", - "nym-socks5-requests", - "serde", - "tokio", -] - -[[package]] -name = "nym-offline-monitor" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "async-trait", - "debounced", - "dispatch2", - "futures", - "nym-apple-network", - "nym-common", - "nym-routing", - "nym-windows", - "thiserror 2.0.17", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-ordered-buffer" -version = "0.1.0" -dependencies = [ - "log", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-outfox" -version = "0.1.0" -dependencies = [ - "blake3", - "chacha20", - "chacha20poly1305", - "criterion", - "fastrand 2.3.0", - "getrandom 0.2.16", - "log", - "rand 0.8.5", - "rayon", - "sphinx-packet", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "nym-pemstore" -version = "0.3.0" -dependencies = [ - "pem", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-pemstore" -version = "0.3.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "pem", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-performance-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "nym-contracts-common", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-performance-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "nym-contracts-common", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-pool-contract-common" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", - "time", -] - -[[package]] -name = "nym-registration-client" -version = "0.1.0" -dependencies = [ - "nym-authenticator-client", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials-interface 0.1.0", - "nym-ip-packet-client", - "nym-registration-common", - "nym-sdk", - "nym-validator-client 0.1.0", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "nym-registration-common" -version = "0.1.0" -dependencies = [ - "nym-authenticator-requests", - "nym-crypto 0.4.0", - "nym-ip-packet-requests", - "nym-sphinx", - "tokio-util", -] - -[[package]] -name = "nym-routing" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "bitflags 2.9.4", - "futures", - "ipnetwork 0.21.1", - "libc", - "netlink-packet-core 0.8.1", - "netlink-packet-route 0.25.1", - "netlink-sys", - "nix 0.30.1", - "nym-common", - "nym-windows", - "rtnetlink", - "system-configuration 0.6.1", - "thiserror 2.0.17", - "tokio", - "tracing", - "widestring", - "windows", -] - -[[package]] -name = "nym-sdk" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bip39", - "bytecodec", - "bytes", - "clap", - "dashmap", - "dirs 5.0.1", - "dotenvy", - "futures", - "hex", - "http 1.3.1", - "httpcodec", - "log", - "nym-bandwidth-controller", - "nym-bin-common 0.6.0", - "nym-client-core", - "nym-config 0.1.0", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-gateway-directory", - "nym-gateway-requests", - "nym-http-api-client", - "nym-ip-packet-requests", - "nym-network-defaults 0.1.0", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-client-core", - "nym-socks5-requests", - "nym-sphinx", - "nym-sphinx-addressing", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client 0.1.0", - "nym-vpn-api-client", - "parking_lot", - "pnet_packet", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "tap", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "toml 0.8.23", - "tracing", - "tracing-subscriber", - "url", - "uuid", - "zeroize", -] - -[[package]] -name = "nym-serde-helpers" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "bs58", - "hex", - "serde", - "time", -] - -[[package]] -name = "nym-serde-helpers" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "base64 0.22.1", - "bs58", - "hex", - "serde", - "time", -] - -[[package]] -name = "nym-service-provider-requests-common" -version = "0.1.0" -dependencies = [ - "bincode", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-service-providers-common" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "log", - "nym-bin-common 0.6.0", - "nym-sdk", - "nym-socks5-requests", - "nym-sphinx-anonymous-replies", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", -] - -[[package]] -name = "nym-signers-monitor" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "humantime", - "itertools 0.14.0", - "nym-bin-common 0.6.0", - "nym-ecash-signer-check", - "nym-network-defaults 0.1.0", - "nym-task", - "nym-validator-client 0.1.0", - "time", - "tokio", - "tracing", - "url", - "zulip-client", -] - -[[package]] -name = "nym-socks5-client" -version = "1.1.64" -dependencies = [ - "bs58", - "clap", - "log", - "nym-bin-common 0.6.0", - "nym-client-core", - "nym-config 0.1.0", - "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", - "nym-gateway-requests", - "nym-id", - "nym-network-defaults 0.1.0", - "nym-ordered-buffer", - "nym-pemstore 0.3.0", - "nym-socks5-client-core", - "nym-sphinx", - "nym-topology", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", - "time", - "tokio", - "url", - "zeroize", -] - -[[package]] -name = "nym-socks5-client-core" -version = "0.1.0" -dependencies = [ - "anyhow", - "dirs 5.0.1", - "futures", - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config 0.1.0", - "nym-contracts-common", - "nym-credential-storage", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-validator-client 0.1.0", - "pin-project", - "rand 0.8.5", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "tap", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "url", -] - -[[package]] -name = "nym-socks5-proxy-helpers" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "log", - "nym-ordered-buffer", - "nym-socks5-requests", - "nym-task", - "tokio", - "tokio-test", - "tokio-util", -] - -[[package]] -name = "nym-socks5-requests" -version = "0.1.0" -dependencies = [ - "bincode", - "log", - "nym-exit-policy 0.1.0", - "nym-service-providers-common", - "nym-sphinx-addressing", - "serde", - "serde_json", - "tap", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx" -version = "0.1.0" -dependencies = [ - "bincode", - "log", - "nym-crypto 0.4.0", - "nym-metrics", - "nym-mixnet-contract-common 0.6.0", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-chunking", - "nym-sphinx-cover", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_distr", - "serde", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-sphinx-acknowledgements" -version = "0.1.0" -dependencies = [ - "generic-array 0.14.9", - "nym-crypto 0.4.0", - "nym-pemstore 0.3.0", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", - "nym-topology", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-sphinx-addressing" -version = "0.1.0" -dependencies = [ - "bincode", - "nym-crypto 0.4.0", - "nym-sphinx-types 0.2.0", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-anonymous-replies" -version = "0.1.0" -dependencies = [ - "bs58", - "nym-crypto 0.4.0", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", - "nym-topology", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "thiserror 2.0.17", - "tracing", - "wasm-bindgen", -] - -[[package]] -name = "nym-sphinx-chunking" -version = "0.1.0" -dependencies = [ - "dashmap", - "log", - "nym-crypto 0.4.0", - "nym-metrics", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-types 0.2.0", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "utoipa", -] - -[[package]] -name = "nym-sphinx-cover" -version = "0.1.0" -dependencies = [ - "nym-crypto 0.4.0", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-chunking", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", - "nym-topology", - "rand 0.8.5", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-forwarding" -version = "0.1.0" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-params", - "nym-sphinx-types 0.2.0", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-framing" -version = "0.1.0" -dependencies = [ - "bytes", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-types 0.2.0", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "nym-sphinx-params" -version = "0.1.0" -dependencies = [ - "nym-crypto 0.4.0", - "nym-sphinx-types 0.2.0", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-routing" -version = "0.1.0" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-types 0.2.0", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-types" -version = "0.2.0" -dependencies = [ - "nym-outfox", - "sphinx-packet", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-sphinx-types" -version = "0.2.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "thiserror 2.0.17", -] - -[[package]] -name = "nym-statistics-api" -version = "0.2.1" -dependencies = [ - "anyhow", - "axum", - "axum-client-ip", - "axum-extra", - "celes", - "clap", - "nym-bin-common 0.6.0", - "nym-http-api-client", - "nym-http-api-common", - "nym-statistics-common", - "nym-task", - "nym-validator-client 0.1.0", - "serde", - "serde_json", - "sqlx", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-subscriber", - "url", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nym-statistics-common" -version = "0.1.0" -dependencies = [ - "futures", - "log", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-metrics", - "nym-sphinx", - "nym-task", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "strum", - "strum_macros 0.27.2", - "sysinfo", - "thiserror 2.0.17", - "time", - "tokio", - "utoipa", - "wasmtimer", -] - -[[package]] -name = "nym-store-cipher" -version = "0.1.0" -dependencies = [ - "aes-gcm", - "argon2", - "generic-array 0.14.9", - "getrandom 0.2.16", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 2.0.17", - "zeroize", -] - -[[package]] -name = "nym-task" -version = "0.1.0" -dependencies = [ - "anyhow", - "cfg-if", - "futures", - "log", - "nym-test-utils", - "serde", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasmtimer", -] - -[[package]] -name = "nym-test-utils" -version = "0.1.0" -dependencies = [ - "anyhow", - "futures", - "rand_chacha 0.3.1", - "tokio", -] - -[[package]] -name = "nym-ticketbooks-merkle" -version = "0.1.0" -dependencies = [ - "nym-credentials-interface 0.1.0", - "nym-serde-helpers 0.1.0", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rs_merkle", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "time", - "utoipa", -] - -[[package]] -name = "nym-ticketbooks-merkle" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "rs_merkle", - "schemars 0.8.22", - "serde", - "sha2 0.10.9", - "time", - "utoipa", -] - -[[package]] -name = "nym-topology" -version = "0.1.0" -dependencies = [ - "async-trait", - "nym-api-requests 0.1.0", - "nym-crypto 0.4.0", - "nym-mixnet-contract-common 0.6.0", - "nym-sphinx-addressing", - "nym-sphinx-types 0.2.0", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tracing", - "tsify", - "wasm-bindgen", - "wasm-utils", -] - -[[package]] -name = "nym-tun" -version = "0.1.0" -dependencies = [ - "etherparse", - "log", - "nym-wireguard-types 0.1.0", - "thiserror 2.0.17", - "tokio", - "tokio-tun", -] - -[[package]] -name = "nym-types" -version = "1.0.0" -dependencies = [ - "base64 0.22.1", - "cosmrs", - "cosmwasm-std", - "eyre", - "hmac", - "itertools 0.14.0", - "log", - "nym-config 0.1.0", - "nym-crypto 0.4.0", - "nym-mixnet-contract-common 0.6.0", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "strum", - "strum_macros 0.27.2", - "tempfile", - "thiserror 2.0.17", - "ts-rs", - "url", - "utoipa", - "x25519-dalek", -] - -[[package]] -name = "nym-upgrade-mode-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "jwt-simple", - "nym-crypto 0.4.0", - "nym-http-api-client", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "time", - "tracing", -] - -[[package]] -name = "nym-validator-client" -version = "0.1.0" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bip32", - "bip39", - "colored", - "cosmrs", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "cw3", - "cw4", - "eyre", - "flate2", - "futures", - "itertools 0.14.0", - "nym-api-requests 0.1.0", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", - "nym-contracts-common", - "nym-ecash-contract-common 0.1.0", - "nym-group-contract-common 0.1.0", - "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0", - "nym-multisig-contract-common 0.1.0", - "nym-network-defaults 0.1.0", - "nym-performance-contract-common 0.1.0", - "nym-serde-helpers 0.1.0", - "nym-vesting-contract-common 0.7.0", - "prost", - "reqwest 0.12.24", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "ts-rs", - "url", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-validator-client" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bip32", - "bip39", - "colored", - "cosmrs", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "cw3", - "cw4", - "eyre", - "flate2", - "futures", - "itertools 0.14.0", - "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-contracts-common", - "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-group-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-performance-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-vesting-contract-common 0.7.0 (git+https://github.com/nymtech/nym?branch=develop)", - "prost", - "reqwest 0.12.24", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-validator-rewarder" -version = "0.3.0" -dependencies = [ - "anyhow", - "bip39", - "clap", - "cosmwasm-std", - "futures", - "humantime", - "humantime-serde", - "nym-bin-common 0.6.0", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", - "nym-contracts-common", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", - "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", - "nym-serde-helpers 0.1.0", - "nym-task", - "nym-ticketbooks-merkle 0.1.0", - "nym-validator-client 0.1.0", - "nyxd-scraper", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "serde_with", - "sha2 0.10.9", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-verloc" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "humantime", - "nym-api-requests 0.1.0", - "nym-crypto 0.4.0", - "nym-http-api-client", - "nym-task", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "nym-vesting-contract-common" -version = "0.7.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2", - "nym-contracts-common", - "nym-mixnet-contract-common 0.6.0", - "serde", - "thiserror 2.0.17", - "ts-rs", -] - -[[package]] -name = "nym-vesting-contract-common" -version = "0.7.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "nym-contracts-common", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-vpn-api-client" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "backon", - "base64-url", - "bip39", - "bs58", - "chrono", - "itertools 0.13.0", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-contracts-common", - "nym-credential-proxy-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-http-api-client", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "serde_json", - "sha2 0.10.9", - "strum", - "strum_macros 0.26.4", - "thiserror 2.0.17", - "time", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-vpn-api-lib-wasm" -version = "0.1.0" -dependencies = [ - "bs58", - "getrandom 0.2.16", - "js-sys", - "nym-bin-common 0.6.0", - "nym-compact-ecash 0.1.0", - "nym-credential-proxy-requests 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "thiserror 2.0.17", - "time", - "tsify", - "wasm-bindgen", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "nym-wallet-types" -version = "1.0.0" -dependencies = [ - "cosmrs", - "cosmwasm-std", - "hex-literal", - "nym-config 0.1.0", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-types", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", - "serde", - "serde_json", - "strum", - "strum_macros 0.27.2", - "ts-rs", -] - -[[package]] -name = "nym-windows" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "bitflags 2.9.4", - "futures", - "thiserror 2.0.17", - "tokio", - "tracing", - "windows", -] - -[[package]] -name = "nym-wireguard" -version = "0.1.0" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bincode", - "chrono", - "dashmap", - "defguard_wireguard_rs", - "dyn-clone", - "futures", - "ip_network", - "log", - "nym-authenticator-requests", - "nym-credential-verification", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-gateway-requests", - "nym-gateway-storage", - "nym-network-defaults 0.1.0", - "nym-node-metrics", - "nym-task", - "nym-wireguard-types 0.1.0", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tracing", - "x25519-dalek", -] - -[[package]] -name = "nym-wireguard-private-metadata-client" -version = "1.0.0" -dependencies = [ - "async-trait", - "nym-http-api-client", - "nym-wireguard-private-metadata-shared", - "tracing", -] - -[[package]] -name = "nym-wireguard-private-metadata-server" -version = "1.0.0" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "futures", - "nym-credential-verification", - "nym-credentials-interface 0.1.0", - "nym-http-api-common", - "nym-wireguard", - "nym-wireguard-private-metadata-shared", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "nym-wireguard-private-metadata-shared" -version = "1.0.0" -dependencies = [ - "axum", - "bincode", - "nym-credentials-interface 0.1.0", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", - "utoipa", -] - -[[package]] -name = "nym-wireguard-private-metadata-tests" -version = "1.0.0" -dependencies = [ - "async-trait", - "axum", - "nym-credential-verification", - "nym-credentials-interface 0.1.0", - "nym-http-api-client", - "nym-http-api-common", - "nym-wireguard", - "nym-wireguard-private-metadata-client", - "nym-wireguard-private-metadata-server", - "nym-wireguard-private-metadata-shared", - "tokio", - "tower-http 0.5.2", - "utoipa", -] - -[[package]] -name = "nym-wireguard-types" -version = "0.1.0" -dependencies = [ - "base64 0.22.1", - "log", - "nym-config 0.1.0", - "nym-crypto 0.4.0", - "nym-network-defaults 0.1.0", - "rand 0.8.5", - "serde", - "thiserror 2.0.17", - "x25519-dalek", -] - -[[package]] -name = "nym-wireguard-types" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#0674f31227a67de821ccf3e9b508d75b7d8287b6" -dependencies = [ - "base64 0.22.1", - "log", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "thiserror 2.0.17", - "x25519-dalek", -] - -[[package]] -name = "nymvisor" -version = "0.1.29" -dependencies = [ - "anyhow", - "bytes", - "clap", - "dotenvy", - "flate2", - "futures", - "hex", - "humantime", - "humantime-serde", - "nix 0.27.1", - "nym-async-file-watcher", - "nym-bin-common 0.6.0", - "nym-config 0.1.0", - "nym-task", - "reqwest 0.12.24", - "serde", - "serde_json", - "sha2 0.10.9", - "tar", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "nyx-chain-watcher" -version = "0.1.14" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "chrono", - "clap", - "nym-bin-common 0.6.0", - "nym-config 0.1.0", - "nym-network-defaults 0.1.0", - "nym-task", - "nym-validator-client 0.1.0", - "nyxd-scraper", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "sqlx", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-util", - "tower-http 0.5.2", - "tracing", - "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", - "utoipauto", -] - -[[package]] -name = "nyxd-scraper" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "const_format", - "cosmrs", - "eyre", - "futures", - "humantime", - "serde", - "sha2 0.10.9", - "sqlx", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "objc2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" -dependencies = [ - "objc2-encode", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.9.4", - "dispatch2", - "objc2", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" -dependencies = [ - "bitflags 2.9.4", - "block2", - "libc", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-io-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" -dependencies = [ - "libc", - "objc2-core-foundation", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" - -[[package]] -name = "oorandom" -version = "11.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[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.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.110" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" -dependencies = [ - "opentelemetry_api", - "opentelemetry_sdk", -] - -[[package]] -name = "opentelemetry-http" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" -dependencies = [ - "async-trait", - "bytes", - "http 0.2.12", - "isahc", - "opentelemetry_api", -] - -[[package]] -name = "opentelemetry-jaeger" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" -dependencies = [ - "async-trait", - "futures", - "futures-executor", - "http 0.2.12", - "isahc", - "once_cell", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-semantic-conventions", - "thiserror 1.0.69", - "thrift", - "tokio", -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" -dependencies = [ - "opentelemetry", -] - -[[package]] -name = "opentelemetry_api" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" -dependencies = [ - "fnv", - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "once_cell", - "pin-project-lite", - "thiserror 1.0.69", - "urlencoding", -] - -[[package]] -name = "opentelemetry_sdk" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" -dependencies = [ - "async-trait", - "crossbeam-channel", - "dashmap", - "fnv", - "futures-channel", - "futures-executor", - "futures-util", - "once_cell", - "opentelemetry_api", - "percent-encoding", - "rand 0.8.5", - "thiserror 1.0.69", - "tokio", - "tokio-stream", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - -[[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link 0.2.1", -] - -[[package]] -name = "password-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle 2.6.1", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "peg" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477" -dependencies = [ - "peg-macros", - "peg-runtime", -] - -[[package]] -name = "peg-macros" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71" -dependencies = [ - "peg-runtime", - "proc-macro2", - "quote", -] - -[[package]] -name = "peg-runtime" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca" - -[[package]] -name = "pem" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" -dependencies = [ - "base64 0.13.1", - "once_cell", - "regex", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pest" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "pest_meta" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" -dependencies = [ - "pest", - "sha2 0.10.9", -] - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.11.4", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_shared 0.13.1", - "serde", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.1", -] - -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher 1.0.1", -] - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - -[[package]] -name = "plotters" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" - -[[package]] -name = "plotters-svg" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "pnet_base" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" -dependencies = [ - "no-std-net", -] - -[[package]] -name = "pnet_macros" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.106", -] - -[[package]] -name = "pnet_macros_support" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" -dependencies = [ - "pnet_base", -] - -[[package]] -name = "pnet_packet" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" -dependencies = [ - "glob", - "pnet_base", - "pnet_macros", - "pnet_macros_support", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug 0.3.1", - "universal-hash", -] - -[[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 0.3.1", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - -[[package]] -name = "postgres-protocol" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" -dependencies = [ - "base64 0.22.1", - "byteorder", - "bytes", - "fallible-iterator", - "hmac", - "md-5", - "memchr", - "rand 0.9.2", - "sha2 0.10.9", - "stringprep", -] - -[[package]] -name = "postgres-types" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" -dependencies = [ - "bytes", - "fallible-iterator", - "postgres-protocol", -] - -[[package]] -name = "potential_utf" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "pretty_assertions" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" -dependencies = [ - "diff", - "yansi", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit 0.23.7", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "proc-macro2" -version = "1.0.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proc_pidinfo" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" -dependencies = [ - "libc", -] - -[[package]] -name = "prometheus" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf", - "thiserror 2.0.17", -] - -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "prost-types" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror 1.0.69", -] - -[[package]] -name = "protobuf-support" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" -dependencies = [ - "thiserror 1.0.69", -] - -[[package]] -name = "psl" -version = "2.1.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c569a9577fe28cc82ac9969ec31778511f1912b3468fe236c24393bebf8a571" -dependencies = [ - "psl-types", -] - -[[package]] -name = "psl-types" -version = "2.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" - -[[package]] -name = "publicsuffix" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" -dependencies = [ - "idna", - "psl-types", -] - -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls 0.23.32", - "socket2 0.6.1", - "thiserror 2.0.17", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" -dependencies = [ - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash", - "rustls 0.23.32", - "rustls-pki-types", - "slab", - "thiserror 2.0.17", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.6.1", - "tracing", - "windows-sys 0.60.2", -] - -[[package]] -name = "quote" -version = "1.0.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.4", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "rayon" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags 2.9.4", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 1.0.69", -] - -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 2.0.17", -] - -[[package]] -name = "ref-cast" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "regex" -version = "1.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration 0.5.1", - "tokio", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "reqwest" -version = "0.12.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" -dependencies = [ - "async-compression", - "base64 0.22.1", - "bytes", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "hyper-rustls 0.27.7", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls 0.23.32", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.2", - "tokio", - "tokio-rustls 0.26.4", - "tokio-util", - "tower 0.5.2", - "tower-http 0.6.6", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots 1.0.3", -] - -[[package]] -name = "reserve-port" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" -dependencies = [ - "thiserror 2.0.17", -] - -[[package]] -name = "resolv-conf" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle 2.6.1", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "rmp" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] - -[[package]] -name = "rmp-serde" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" -dependencies = [ - "byteorder", - "rmp", - "serde", -] - -[[package]] -name = "rs_merkle" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" -dependencies = [ - "sha2 0.10.9", -] - -[[package]] -name = "rsa" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" -dependencies = [ - "const-oid", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core 0.6.4", - "sha2 0.10.9", - "signature", - "spki", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rtnetlink" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08fd15aa4c64c34d0b3178e45ec6dad313a9f02b193376d501668a7950264bb7" -dependencies = [ - "futures", - "log", - "netlink-packet-core 0.8.1", - "netlink-packet-route 0.25.1", - "netlink-proto", - "netlink-sys", - "nix 0.29.0", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "rust-embed" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn 2.0.106", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" -dependencies = [ - "sha2 0.10.9", - "walkdir", -] - -[[package]] -name = "rust-multipart-rfc7578_2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" -dependencies = [ - "bytes", - "futures-core", - "futures-util", - "http 0.2.12", - "mime", - "mime_guess", - "rand 0.8.5", - "thiserror 1.0.69", -] - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.27", -] - -[[package]] -name = "rustix" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" -dependencies = [ - "bitflags 2.9.4", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls" -version = "0.23.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.103.7", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.2.0", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", - "uuid", -] - -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals 0.29.1", - "syn 2.0.106", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scroll" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sealed" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array 0.14.9", - "pkcs8", - "serdect 0.2.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" -dependencies = [ - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" -dependencies = [ - "cc", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.9.4", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde-json-wasm" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" -dependencies = [ - "serde", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde_bytes" -version = "0.11.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_derive_internals" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_json" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", - "serde_core", -] - -[[package]] -name = "serde_json_path" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b992cea3194eea663ba99a042d61cea4bd1872da37021af56f6a37e0359b9d33" -dependencies = [ - "inventory", - "nom", - "regex", - "serde", - "serde_json", - "serde_json_path_core", - "serde_json_path_macros", - "thiserror 2.0.17", -] - -[[package]] -name = "serde_json_path_core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde67d8dfe7d4967b5a95e247d4148368ddd1e753e500adb34b3ffe40c6bc1bc" -dependencies = [ - "inventory", - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "serde_json_path_macros" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "517acfa7f77ddaf5c43d5f119c44a683774e130b4247b7d3210f8924506cfac8" -dependencies = [ - "inventory", - "serde_json_path_core", - "serde_json_path_macros_internal", -] - -[[package]] -name = "serde_json_path_macros_internal" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[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", -] - -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.11.4", - "schemars 0.9.0", - "schemars 1.0.4", - "serde_core", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.11.4", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - -[[package]] -name = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "serdect" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "si-scale" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" - -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" -dependencies = [ - "libc", - "mio 0.8.11", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "slab" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" - -[[package]] -name = "sluice" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" -dependencies = [ - "async-channel", - "futures-core", - "futures-io", -] - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -dependencies = [ - "serde", -] - -[[package]] -name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - -[[package]] -name = "smoltcp" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" -dependencies = [ - "bitflags 1.3.2", - "byteorder", - "cfg-if", - "defmt 0.3.100", - "heapless", - "managed", -] - -[[package]] -name = "snafu" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" -dependencies = [ - "doc-comment", - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "snow" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" -dependencies = [ - "aes-gcm", - "blake2 0.10.6", - "chacha20poly1305", - "curve25519-dalek", - "rand_core 0.6.4", - "rustc_version 0.4.1", - "sha2 0.10.9", - "subtle 2.6.1", -] - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "sphinx-packet" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" -dependencies = [ - "aes", - "arrayref", - "blake2 0.8.1", - "bs58", - "byteorder", - "chacha", - "ctr", - "curve25519-dalek", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "rand 0.8.5", - "rand_distr", - "sha2 0.10.9", - "subtle 2.6.1", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sqlx" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" -dependencies = [ - "base64 0.22.1", - "bytes", - "chrono", - "crc", - "crossbeam-queue", - "either", - "event-listener 5.4.1", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashbrown 0.15.5", - "hashlink", - "indexmap 2.11.4", - "log", - "memchr", - "once_cell", - "percent-encoding", - "rustls 0.23.32", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-stream", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "sqlx-macros" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 2.0.106", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" -dependencies = [ - "dotenvy", - "either", - "heck 0.5.0", - "hex", - "once_cell", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx-core", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", - "syn 2.0.106", - "tokio", - "url", -] - -[[package]] -name = "sqlx-mysql" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.9.4", - "byteorder", - "bytes", - "chrono", - "crc", - "digest 0.10.7", - "dotenvy", - "either", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "generic-array 0.14.9", - "hex", - "hkdf", - "hmac", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "rsa", - "serde", - "sha1", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.17", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-pool-guard" -version = "0.1.0" -dependencies = [ - "proc_pidinfo", - "sqlx", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", - "windows", -] - -[[package]] -name = "sqlx-postgres" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.9.4", - "byteorder", - "chrono", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-util", - "hex", - "hkdf", - "hmac", - "home", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "rand 0.8.5", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.17", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-sqlite" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" -dependencies = [ - "atoi", - "chrono", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "serde", - "serde_urlencoded", - "sqlx-core", - "thiserror 2.0.17", - "time", - "tracing", - "url", -] - -[[package]] -name = "ssl-inject" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "hex", - "tokio", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.11.3", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator", - "phf_shared 0.11.3", - "proc-macro2", - "quote", -] - -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros 0.27.2", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.106", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "superboring" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "515cce34a781d7250b8a65706e0f2a5b99236ea605cb235d4baed6685820478f" -dependencies = [ - "getrandom 0.2.16", - "hmac-sha256", - "hmac-sha512", - "rand 0.8.5", - "rsa", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "sysinfo" -version = "0.37.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" -dependencies = [ - "libc", - "memchr", - "ntapi", - "objc2-core-foundation", - "objc2-io-kit", - "windows", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys 0.5.0", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.9.4", - "core-foundation", - "system-configuration-sys 0.6.0", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tar" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tempfile" -version = "3.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" -dependencies = [ - "fastrand 2.3.0", - "getrandom 0.3.4", - "once_cell", - "rustix", - "windows-sys 0.61.2", -] - -[[package]] -name = "tendermint" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" -dependencies = [ - "bytes", - "digest 0.10.7", - "ed25519", - "ed25519-consensus", - "flex-error", - "futures", - "k256", - "num-traits", - "once_cell", - "prost", - "ripemd", - "serde", - "serde_bytes", - "serde_json", - "serde_repr", - "sha2 0.10.9", - "signature", - "subtle 2.6.1", - "subtle-encoding", - "tendermint-proto", - "time", - "zeroize", -] - -[[package]] -name = "tendermint-config" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" -dependencies = [ - "flex-error", - "serde", - "serde_json", - "tendermint", - "toml 0.8.23", - "url", -] - -[[package]] -name = "tendermint-proto" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" -dependencies = [ - "bytes", - "flex-error", - "prost", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-rpc" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" -dependencies = [ - "async-trait", - "async-tungstenite", - "bytes", - "flex-error", - "futures", - "getrandom 0.2.16", - "peg", - "pin-project", - "rand 0.8.5", - "reqwest 0.11.27", - "semver 1.0.27", - "serde", - "serde_bytes", - "serde_json", - "subtle 2.6.1", - "subtle-encoding", - "tendermint", - "tendermint-config", - "tendermint-proto", - "thiserror 1.0.69", - "time", - "tokio", - "tracing", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "test-with" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f370b9efbfbbc5f057cbce9888373eaeb146a3095bb8cc869b199c94d15559" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "regex", - "syn 2.0.106", -] - -[[package]] -name = "testnet-manager" -version = "0.1.0" -dependencies = [ - "anyhow", - "bip39", - "bs58", - "clap", - "console", - "cw-utils", - "dkg-bypass-contract", - "humantime", - "indicatif", - "nym-bin-common 0.6.0", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", - "nym-contracts-common", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-group-contract-common 0.1.0", - "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0", - "nym-multisig-contract-common 0.1.0", - "nym-pemstore 0.3.0", - "nym-performance-contract-common 0.1.0", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", - "rand 0.8.5", - "serde", - "serde_json", - "sqlx", - "tempfile", - "thiserror 2.0.17", - "time", - "tokio", - "toml 0.8.23", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "textwrap" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" -dependencies = [ - "smawk", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" -dependencies = [ - "thiserror-impl 2.0.17", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "log", - "ordered-float", - "threadpool", -] - -[[package]] -name = "time" -version = "0.3.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" -dependencies = [ - "deranged", - "itoa", - "js-sys", - "libc", - "num-conv", - "num_threads", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" - -[[package]] -name = "time-macros" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "tinyvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" -dependencies = [ - "bytes", - "libc", - "mio 1.0.4", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.6.1", - "tokio-macros", - "tracing", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "tokio-postgres" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" -dependencies = [ - "async-trait", - "byteorder", - "bytes", - "fallible-iterator", - "futures-channel", - "futures-util", - "log", - "parking_lot", - "percent-encoding", - "phf 0.13.1", - "pin-project-lite", - "postgres-protocol", - "postgres-types", - "rand 0.9.2", - "socket2 0.6.1", - "tokio", - "tokio-util", - "whoami", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls 0.23.32", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-test" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" -dependencies = [ - "async-stream", - "bytes", - "futures-core", - "tokio", - "tokio-stream", -] - -[[package]] -name = "tokio-tun" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5381752d5832fc811f89d54fc334951aa435022f494190ba7151661f206df" -dependencies = [ - "libc", - "nix 0.29.0", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", - "tungstenite 0.20.1", - "webpki-roots 0.25.4", -] - -[[package]] -name = "tokio-util" -version = "0.7.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "futures-util", - "pin-project-lite", - "slab", - "tokio", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.11.4", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_write", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.23.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" -dependencies = [ - "indexmap 2.11.4", - "toml_datetime 0.7.3", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - -[[package]] -name = "tonic" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64 0.22.1", - "bytes", - "h2 0.4.12", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.7.0", - "hyper-timeout", - "hyper-util", - "percent-encoding", - "pin-project", - "prost", - "socket2 0.5.10", - "tokio", - "tokio-stream", - "tower 0.4.13", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 1.0.2", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" -dependencies = [ - "async-compression", - "bitflags 2.9.4", - "bytes", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "http-range-header", - "httpdate", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "bitflags 2.9.4", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "iri-string", - "pin-project-lite", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-indicatif" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04d4e11e0e27acef25a47f27e9435355fecdc488867fa2bc90e75b0700d2823d" -dependencies = [ - "indicatif", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" -dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" -dependencies = [ - "matchers", - "nu-ansi-term 0.50.3", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log 0.2.0", -] - -[[package]] -name = "tracing-test" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" -dependencies = [ - "tracing-core", - "tracing-subscriber", - "tracing-test-macro", -] - -[[package]] -name = "tracing-test-macro" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" -dependencies = [ - "quote", - "syn 2.0.106", -] - -[[package]] -name = "tracing-tree" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" -dependencies = [ - "nu-ansi-term 0.46.0", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "trackable" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" -dependencies = [ - "trackable 1.3.0", - "trackable_derive", -] - -[[package]] -name = "trackable" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" -dependencies = [ - "trackable_derive", -] - -[[package]] -name = "trackable_derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "ts-rs" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" -dependencies = [ - "lazy_static", - "thiserror 2.0.17", - "ts-rs-macros", -] - -[[package]] -name = "ts-rs-cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "nym-api-requests 0.1.0", - "nym-mixnet-contract-common 0.6.0", - "nym-types", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", - "nym-wallet-types", - "ts-rs", - "walkdir", -] - -[[package]] -name = "ts-rs-macros" -version = "10.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "termcolor", -] - -[[package]] -name = "tsify" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" -dependencies = [ - "gloo-utils 0.1.7", - "serde", - "serde-wasm-bindgen 0.5.0", - "serde_json", - "tsify-macros", - "wasm-bindgen", -] - -[[package]] -name = "tsify-macros" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals 0.28.0", - "syn 2.0.106", -] - -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.21.12", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", - "webpki-roots 0.24.0", -] - -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.3.1", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.22.4", - "rustls-pki-types", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - -[[package]] -name = "unicode-ident" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-width" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "uniffi" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d968cb62160c11f2573e6be724ef8b1b18a277aededd17033f8a912d73e2b4" -dependencies = [ - "anyhow", - "camino", - "cargo_metadata 0.19.2", - "clap", - "uniffi_bindgen", - "uniffi_build", - "uniffi_core", - "uniffi_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_bindgen" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b39ef1acbe1467d5d210f274fae344cb6f8766339330cb4c9688752899bf6b" -dependencies = [ - "anyhow", - "askama", - "camino", - "cargo_metadata 0.19.2", - "fs-err", - "glob", - "goblin", - "heck 0.5.0", - "indexmap 2.11.4", - "once_cell", - "serde", - "tempfile", - "textwrap", - "toml 0.5.11", - "uniffi_internal_macros", - "uniffi_meta", - "uniffi_pipeline", - "uniffi_udl", -] - -[[package]] -name = "uniffi_build" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6683e6b665423cddeacd89a3f97312cf400b2fb245a26f197adaf65c45d505b2" -dependencies = [ - "anyhow", - "camino", - "uniffi_bindgen", -] - -[[package]] -name = "uniffi_core" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d990b553d6b9a7ee9c3ae71134674739913d52350b56152b0e613595bb5a6f" -dependencies = [ - "anyhow", - "bytes", - "once_cell", - "static_assertions", -] - -[[package]] -name = "uniffi_internal_macros" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f4f224becf14885c10e6e400b95cc4d1985738140cb194ccc2044563f8a56b" -dependencies = [ - "anyhow", - "indexmap 2.11.4", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "uniffi_macros" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b481d385af334871d70904e6a5f129be7cd38c18fcf8dd8fd1f646b426a56d58" -dependencies = [ - "camino", - "fs-err", - "once_cell", - "proc-macro2", - "quote", - "serde", - "syn 2.0.106", - "toml 0.5.11", - "uniffi_meta", -] - -[[package]] -name = "uniffi_meta" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f817868a3b171bb7bf259e882138d104deafde65684689b4694c846d322491" -dependencies = [ - "anyhow", - "siphasher 0.3.11", - "uniffi_internal_macros", - "uniffi_pipeline", -] - -[[package]] -name = "uniffi_pipeline" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b147e133ad7824e32426b90bc41fda584363563f2ba747f590eca1fd6fd14e6" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap 2.11.4", - "tempfile", - "uniffi_internal_macros", -] - -[[package]] -name = "uniffi_udl" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caed654fb73da5abbc7a7e9c741532284532ba4762d6fe5071372df22a41730a" -dependencies = [ - "anyhow", - "textwrap", - "uniffi_meta", - "weedle2", -] - -[[package]] -name = "unit-prefix" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle 2.6.1", -] - -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "utoipa" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" -dependencies = [ - "indexmap 2.11.4", - "serde", - "serde_json", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.106", - "uuid", -] - -[[package]] -name = "utoipa-swagger-ui" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" -dependencies = [ - "axum", - "base64 0.22.1", - "mime_guess", - "regex", - "rust-embed", - "serde", - "serde_json", - "url", - "utoipa", - "zip", -] - -[[package]] -name = "utoipauto" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba36db2c397c614110554a60fbb4bb97d5f8c6823775c766e6f455e37377047" -dependencies = [ - "utoipauto-macro", -] - -[[package]] -name = "utoipauto-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "utoipauto-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "utoipauto-core", -] - -[[package]] -name = "uuid" -version = "1.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" -dependencies = [ - "getrandom 0.3.4", - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "validator-status-check" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "comfy-table", - "nym-bin-common 0.6.0", - "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", - "serde", - "serde_json", - "strum", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "vergen" -version = "8.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" -dependencies = [ - "anyhow", - "cargo_metadata 0.18.1", - "cfg-if", - "regex", - "rustc_version 0.4.1", - "rustversion", - "time", -] - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vt100" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" -dependencies = [ - "itoa", - "log", - "unicode-width 0.1.14", - "vte", -] - -[[package]] -name = "vte" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" -dependencies = [ - "arrayvec", - "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - -[[package]] -name = "wasix" -version = "0.12.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" -dependencies = [ - "wasi", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-bindgen-test" -version = "0.3.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" -dependencies = [ - "js-sys", - "minicov", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.3.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "wasm-client-core" -version = "0.1.0" -dependencies = [ - "async-trait", - "console_error_panic_hook", - "js-sys", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config 0.1.0", - "nym-credential-storage", - "nym-crypto 0.4.0", - "nym-gateway-client", - "nym-http-api-client", - "nym-sphinx", - "nym-sphinx-acknowledgements", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client 0.1.0", - "rand 0.8.5", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "time", - "tsify", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-storage", - "wasm-utils", - "zeroize", -] - -[[package]] -name = "wasm-storage" -version = "0.1.0" -dependencies = [ - "async-trait", - "getrandom 0.2.16", - "indexed_db_futures", - "js-sys", - "nym-store-cipher", - "serde", - "serde-wasm-bindgen 0.6.5", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-utils", -] - -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasm-utils" -version = "0.1.0" -dependencies = [ - "console_error_panic_hook", - "futures", - "getrandom 0.2.16", - "gloo-net", - "gloo-utils 0.2.0", - "js-sys", - "tungstenite 0.20.1", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmtimer" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" -dependencies = [ - "futures", - "js-sys", - "parking_lot", - "pin-utils", - "slab", - "wasm-bindgen", -] - -[[package]] -name = "web-sys" -version = "0.3.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web_atoms" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" -dependencies = [ - "phf 0.11.3", - "phf_codegen", - "string_cache", - "string_cache_codegen", -] - -[[package]] -name = "webpki-roots" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" -dependencies = [ - "rustls-webpki 0.101.7", -] - -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.3", -] - -[[package]] -name = "webpki-roots" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "weedle2" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" -dependencies = [ - "nom", -] - -[[package]] -name = "whoami" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", - "web-sys", -] - -[[package]] -name = "widestring" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link 0.1.3", - "windows-numerics", -] - -[[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", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.2.1", - "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", -] - -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[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-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", -] - -[[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", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link 0.2.1", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link 0.2.1", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[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_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "winnow" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wit-bindgen" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - -[[package]] -name = "writeable" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" -dependencies = [ - "curve25519-dalek", - "rand_core 0.6.4", - "serde", - "zeroize", -] - -[[package]] -name = "xattr" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" -dependencies = [ - "libc", - "rustix", -] - -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - -[[package]] -name = "yoke" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "zerotrie" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "zip" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" -dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap 2.11.4", - "memchr", - "thiserror 2.0.17", - "zopfli", -] - -[[package]] -name = "zknym-lib" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bs58", - "getrandom 0.2.16", - "js-sys", - "nym-bin-common 0.6.0", - "nym-compact-ecash 0.1.0", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", - "nym-http-api-client", - "rand 0.8.5", - "reqwest 0.12.24", - "serde", - "thiserror 2.0.17", - "tokio", - "tsify", - "uuid", - "wasm-bindgen", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "zopfli" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" -dependencies = [ - "bumpalo", - "crc32fast", - "log", - "simd-adler32", -] - -[[package]] -name = "zstd" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "zulip-client" -version = "0.1.0" -dependencies = [ - "itertools 0.14.0", - "nym-bin-common 0.6.0", - "nym-http-api-client", - "reqwest 0.12.24", - "serde", - "serde_json", - "thiserror 2.0.17", - "tokio", - "tracing", - "url", - "zeroize", -] diff --git a/Cargo.toml b/Cargo.toml index b545325b1f5..16fed298449 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -141,9 +141,9 @@ members = [ "nym-statistics-api", "nym-validator-rewarder", "nyx-chain-watcher", - "sdk/ffi/cpp", - "sdk/ffi/go", - "sdk/ffi/shared", + # "sdk/ffi/cpp", + # "sdk/ffi/go", + # "sdk/ffi/shared", "sdk/rust/nym-sdk", "mixtcp", # "service-providers/authenticator", diff --git a/common/nym-connection-monitor/src/mixnet_beacon.rs b/common/nym-connection-monitor/src/mixnet_beacon.rs index 021519ef172..77e007092d6 100644 --- a/common/nym-connection-monitor/src/mixnet_beacon.rs +++ b/common/nym-connection-monitor/src/mixnet_beacon.rs @@ -28,7 +28,7 @@ impl MixnetConnectionBeacon { } } - async fn send_mixnet_self_ping(&self) -> Result { + async fn send_mixnet_self_ping(&mut self) -> Result { trace!("Sending mixnet self ping"); let (input_message, request_id) = create_self_ping(self.our_address); self.mixnet_client_sender @@ -38,7 +38,7 @@ impl MixnetConnectionBeacon { Ok(request_id) } - pub async fn run(self, shutdown: CancellationToken) -> Result<()> { + pub async fn run(mut self, shutdown: CancellationToken) -> Result<()> { debug!("Mixnet connection beacon is running"); let mut ping_interval = tokio::time::interval(MIXNET_SELF_PING_INTERVAL); loop { diff --git a/common/nym-connection-monitor/src/sync_self_ping.rs b/common/nym-connection-monitor/src/sync_self_ping.rs index 79ec9a10984..a23dcece05d 100644 --- a/common/nym-connection-monitor/src/sync_self_ping.rs +++ b/common/nym-connection-monitor/src/sync_self_ping.rs @@ -22,23 +22,22 @@ pub async fn self_ping_and_wait( wait_for_self_ping_return(mixnet_client, &request_ids).await } -async fn send_self_pings(our_address: Recipient, mixnet_client: &MixnetClient) -> Result> { - // Send pings - let request_ids = futures::stream::iter(1..=3) - .then(|_| async { - let (input_message, request_id) = create_self_ping(our_address); - mixnet_client - .send(input_message) - .await - .map_err(|err| Error::NymSdkError(Box::new(err)))?; - Ok::(request_id) - }) - .collect::>() - .await; +async fn send_self_pings( + our_address: Recipient, + mixnet_client: &mut MixnetClient, +) -> Result> { + let mut request_ids = Vec::with_capacity(3); + + for _ in 1..=3 { + let (input_message, request_id) = create_self_ping(our_address); + mixnet_client + .send(input_message) + .await + .map_err(|err| Error::NymSdkError(Box::new(err)))?; + request_ids.push(request_id); + } - // Check the vec of results and return the first error, if any. If there are not errors, unwrap - // all the results into a vec of u64s. - request_ids.into_iter().collect::>>() + Ok(request_ids) } async fn wait_for_self_ping_return( diff --git a/nym-gateway-probe/src/icmp.rs b/nym-gateway-probe/src/icmp.rs index ec757623f18..7c7cd4bde7b 100644 --- a/nym-gateway-probe/src/icmp.rs +++ b/nym-gateway-probe/src/icmp.rs @@ -20,7 +20,7 @@ pub fn icmp_identifier() -> u16 { } pub async fn send_ping_v4( - mixnet_client: &MixnetClient, + mixnet_client: &mut MixnetClient, our_ips: IpPair, sequence_number: u16, destination: Ipv4Addr, @@ -42,7 +42,7 @@ pub async fn send_ping_v4( } pub async fn send_ping_v6( - mixnet_client: &MixnetClient, + mixnet_client: &mut MixnetClient, our_ips: IpPair, sequence_number: u16, destination: Ipv6Addr, diff --git a/nym-gateway-probe/src/lib.rs b/nym-gateway-probe/src/lib.rs index 5f7827dff01..c7a25401243 100644 --- a/nym-gateway-probe/src/lib.rs +++ b/nym-gateway-probe/src/lib.rs @@ -776,7 +776,7 @@ async fn do_ping_exit( } async fn send_icmp_pings( - mixnet_client: &MixnetClient, + mixnet_client: &mut MixnetClient, our_ips: IpPair, exit_router_address: Recipient, ) -> anyhow::Result<()> { diff --git a/nym-ip-packet-client/src/connect.rs b/nym-ip-packet-client/src/connect.rs index bf679f67cf9..9723a572be1 100644 --- a/nym-ip-packet-client/src/connect.rs +++ b/nym-ip-packet-client/src/connect.rs @@ -83,7 +83,7 @@ impl IprClientConnect { self.listen_for_connect_response(request_id).await } - async fn send_connect_request(&self, ip_packet_router_address: Recipient) -> Result { + async fn send_connect_request(&mut self, ip_packet_router_address: Recipient) -> Result { let (request, request_id) = IpPacketRequest::new_connect_request(None); // We use 20 surbs for the connect request because typically the IPR is configured to have diff --git a/service-providers/network-requester/src/core.rs b/service-providers/network-requester/src/core.rs index 9810f995e6f..fd7f31cb4c0 100644 --- a/service-providers/network-requester/src/core.rs +++ b/service-providers/network-requester/src/core.rs @@ -16,7 +16,7 @@ use nym_client_core::HardcodedTopologyProvider; use nym_client_core::client::mix_traffic::transceiver::GatewayTransceiver; use nym_client_core::config::disk_persistence::CommonClientPaths; use nym_network_defaults::NymNetworkDetails; -use nym_sdk::mixnet::{MixnetMessageSender, TopologyProvider}; +use nym_sdk::mixnet::TopologyProvider; use nym_service_providers_common::ServiceProvider; use nym_service_providers_common::interface::{ BinaryInformation, ProviderInterfaceVersion, Request, RequestVersion, From 849d50422f953fde9b83e2c6dc79284478c80f5e Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 20 Oct 2025 18:59:19 +0100 Subject: [PATCH 077/139] Fix FFI shared lib --- Cargo.toml | 6 +++--- sdk/ffi/shared/src/lib.rs | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 16fed298449..b545325b1f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -141,9 +141,9 @@ members = [ "nym-statistics-api", "nym-validator-rewarder", "nyx-chain-watcher", - # "sdk/ffi/cpp", - # "sdk/ffi/go", - # "sdk/ffi/shared", + "sdk/ffi/cpp", + "sdk/ffi/go", + "sdk/ffi/shared", "sdk/rust/nym-sdk", "mixtcp", # "service-providers/authenticator", diff --git a/sdk/ffi/shared/src/lib.rs b/sdk/ffi/shared/src/lib.rs index eddd9b1f3e3..6f653156ddd 100644 --- a/sdk/ffi/shared/src/lib.rs +++ b/sdk/ffi/shared/src/lib.rs @@ -84,12 +84,12 @@ pub fn send_message_internal( message: &str, // TODO add Option, if Some(surb_amount) call send_message() instead with specified #, else send_plain_message as this uses the default ) -> Result<(), Error> { - let client = NYM_CLIENT.lock().expect("could not lock NYM_CLIENT"); + let mut client = NYM_CLIENT.lock().expect("could not lock NYM_CLIENT"); if client.is_none() { bail!("Client is not yet initialised"); } let nym_client = client - .as_ref() + .as_mut() .ok_or_else(|| anyhow!("could not get client as_ref()"))?; RUNTIME.block_on(async move { @@ -102,12 +102,12 @@ pub fn send_message_internal( // TODO send_raw_message_internal pub fn reply_internal(recipient: AnonymousSenderTag, message: &str) -> Result<(), Error> { - let client = NYM_CLIENT.lock().expect("could not lock NYM_CLIENT"); + let mut client = NYM_CLIENT.lock().expect("could not lock NYM_CLIENT"); if client.is_none() { bail!("Client is not yet initialised"); } let nym_client = client - .as_ref() + .as_mut() .ok_or_else(|| anyhow!("could not get client as_ref()"))?; RUNTIME.block_on(async move { From 1bc1292302fbe1b9148b5467ea92276424446d2e Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 20 Oct 2025 19:26:42 +0100 Subject: [PATCH 078/139] clippy warnings: remove --- mixtcp/examples/tls.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mixtcp/examples/tls.rs b/mixtcp/examples/tls.rs index 7f2a9edae18..2552c1806af 100644 --- a/mixtcp/examples/tls.rs +++ b/mixtcp/examples/tls.rs @@ -174,7 +174,7 @@ async fn main() -> Result<(), Box> { let start = tokio::time::Instant::now(); let mut connected = false; let mut tls = None; - let mut handshake_completed = false; + let handshake_completed = false; loop { if start.elapsed() > Duration::from_secs(120) { From 02d2c7babd16fdc7cc97cc387b98d01d55eb0af3 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 20 Oct 2025 22:41:55 +0100 Subject: [PATCH 079/139] clippy --- Cargo.toml | 2 +- common/client-core/src/client/base_client/mod.rs | 1 - common/client-core/src/client/inbound_messages.rs | 2 +- common/client-core/src/lib.rs | 1 + common/client-core/surb-storage/src/lib.rs | 1 + common/cosmwasm-smart-contracts/coconut-dkg/src/types.rs | 2 ++ common/crypto/src/lib.rs | 3 +++ common/gateway-requests/src/lib.rs | 1 + common/http-api-client/src/lib.rs | 3 +++ common/nymsphinx/acknowledgements/src/lib.rs | 1 + common/nymsphinx/anonymous-replies/src/lib.rs | 1 + common/store-cipher/src/lib.rs | 1 + nym-outfox/src/lib.rs | 3 +++ 13 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b545325b1f5..c1421519aaf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -117,7 +117,7 @@ members = [ "common/wireguard-private-metadata/tests", "common/wireguard-types", "common/zulip-client", - "documentation/autodoc", + # "documentation/autodoc", "gateway", "nym-api", "nym-api/nym-api-requests", diff --git a/common/client-core/src/client/base_client/mod.rs b/common/client-core/src/client/base_client/mod.rs index 644c2b1d430..0dc9aa05e6a 100644 --- a/common/client-core/src/client/base_client/mod.rs +++ b/common/client-core/src/client/base_client/mod.rs @@ -68,7 +68,6 @@ use std::path::Path; use std::sync::Arc; use time::OffsetDateTime; use tokio_util::sync::{PollSendError, PollSender}; -use tracing::{debug, error, info}; use url::Url; #[cfg(target_arch = "wasm32")] diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index 66e0b49a865..bd2c9724c18 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -214,7 +214,7 @@ impl Encoder<&[u8]> for AdressedInputMessageCodec { fn encode(&mut self, item: &[u8], buf: &mut BytesMut) -> Result<(), Self::Error> { let mut codec = InputMessageCodec; - let input_message = InputMessage::simple(item, self.0.clone()); + let input_message = InputMessage::simple(item, self.0); codec.encode(input_message, buf)?; Ok(()) } diff --git a/common/client-core/src/lib.rs b/common/client-core/src/lib.rs index 1f2faf36597..7901b50e6fd 100644 --- a/common/client-core/src/lib.rs +++ b/common/client-core/src/lib.rs @@ -1,3 +1,4 @@ +#![allow(deprecated)] use std::future::Future; #[cfg(all( diff --git a/common/client-core/surb-storage/src/lib.rs b/common/client-core/surb-storage/src/lib.rs index 079c213bbc7..d5243436d71 100644 --- a/common/client-core/surb-storage/src/lib.rs +++ b/common/client-core/surb-storage/src/lib.rs @@ -1,6 +1,7 @@ // Copyright 2022 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +#![allow(deprecated)] pub use backend::*; pub use combined::CombinedReplyStorage; pub use key_storage::SentReplyKeys; diff --git a/common/cosmwasm-smart-contracts/coconut-dkg/src/types.rs b/common/cosmwasm-smart-contracts/coconut-dkg/src/types.rs index 5cf5fd780e0..d7825da59fa 100644 --- a/common/cosmwasm-smart-contracts/coconut-dkg/src/types.rs +++ b/common/cosmwasm-smart-contracts/coconut-dkg/src/types.rs @@ -1,6 +1,8 @@ // Copyright 2022-2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +#![allow(clippy::derivable_impls)] +// MAX: surpressing warning for the moment, will be dealt with in a different PR (TODO) use cosmwasm_schema::cw_serde; use std::fmt::{Display, Formatter}; use std::str::FromStr; diff --git a/common/crypto/src/lib.rs b/common/crypto/src/lib.rs index 1dff7b82be0..d0780939e2c 100644 --- a/common/crypto/src/lib.rs +++ b/common/crypto/src/lib.rs @@ -1,6 +1,9 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +// MAX: temp ignore deprecated, can be dealt with in its own PR (TODO) +#![allow(deprecated)] + #[cfg(feature = "asymmetric")] pub mod asymmetric; pub mod bech32_address_validation; diff --git a/common/gateway-requests/src/lib.rs b/common/gateway-requests/src/lib.rs index b63b29dca1a..b9f1e81176c 100644 --- a/common/gateway-requests/src/lib.rs +++ b/common/gateway-requests/src/lib.rs @@ -1,5 +1,6 @@ // Copyright 2020-2022 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +#![allow(deprecated)] pub use nym_crypto::generic_array; use nym_crypto::OutputSizeUser; diff --git a/common/http-api-client/src/lib.rs b/common/http-api-client/src/lib.rs index bc3a8d7430c..bd7fda145c7 100644 --- a/common/http-api-client/src/lib.rs +++ b/common/http-api-client/src/lib.rs @@ -1,6 +1,9 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +// MAX: temp ignore deprecated, can be dealt with in its own PR (TODO) +#![allow(deprecated)] + //! Nym HTTP API Client //! //! Centralizes and implements the core API client functionality. This crate provides custom, diff --git a/common/nymsphinx/acknowledgements/src/lib.rs b/common/nymsphinx/acknowledgements/src/lib.rs index 490e94eaea8..4222393739a 100644 --- a/common/nymsphinx/acknowledgements/src/lib.rs +++ b/common/nymsphinx/acknowledgements/src/lib.rs @@ -1,5 +1,6 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +#![allow(deprecated)] pub mod identifier; pub mod key; diff --git a/common/nymsphinx/anonymous-replies/src/lib.rs b/common/nymsphinx/anonymous-replies/src/lib.rs index 2c47a23a760..c095ccc3fd3 100644 --- a/common/nymsphinx/anonymous-replies/src/lib.rs +++ b/common/nymsphinx/anonymous-replies/src/lib.rs @@ -1,6 +1,7 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +#![allow(deprecated)] pub mod encryption_key; pub mod reply_surb; pub mod requests; diff --git a/common/store-cipher/src/lib.rs b/common/store-cipher/src/lib.rs index 98d586151fc..5119021d166 100644 --- a/common/store-cipher/src/lib.rs +++ b/common/store-cipher/src/lib.rs @@ -1,6 +1,7 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +#![allow(deprecated)] use aes_gcm::aead::{Aead, Nonce}; use aes_gcm::{AeadCore, AeadInPlace, KeyInit}; use rand::{thread_rng, CryptoRng, Fill, RngCore}; diff --git a/nym-outfox/src/lib.rs b/nym-outfox/src/lib.rs index e10d30e8465..a6525294db6 100644 --- a/nym-outfox/src/lib.rs +++ b/nym-outfox/src/lib.rs @@ -1,3 +1,6 @@ +// MAX: temp ignore deprecated, can be dealt with in its own PR +#![allow(deprecated)] + pub mod constants; pub mod error; pub mod format; From ae99f60719ee57034ab4c1a9410125f7d3588965 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 21 Oct 2025 09:53:58 +0100 Subject: [PATCH 080/139] clippy --- .../src/client/inbound_messages.rs | 5 +++-- .../src/sync_self_ping.rs | 1 - mixtcp/examples/cloudflare_ping.rs | 3 ++- mixtcp/examples/https_client.rs | 1 + mixtcp/examples/tls.rs | 9 +++++--- mixtcp/src/bridge.rs | 2 +- mixtcp/src/lib.rs | 5 ++--- nym-gateway-directory/src/error.rs | 3 +++ nym-gateway-directory/src/gateway_client.rs | 4 +++- sdk/rust/nym-sdk/src/lib.rs | 3 --- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 21 +++++++------------ .../stream_wrapper/mixnet_stream_wrapper.rs | 21 +++++++++---------- .../mixnet_stream_wrapper_ipr.rs | 6 +++--- tools/echo-server/src/lib.rs | 2 +- 14 files changed, 42 insertions(+), 44 deletions(-) diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index bd2c9724c18..4dcd5ae0860 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -199,7 +199,7 @@ impl InputMessage { self.set_max_retransmissions(max_retransmissions); self } - + #[allow(clippy::expect_used)] pub fn serialized_size(&self) -> u64 { bincode::serialized_size(self).expect("failed to get serialized InputMessage size") + LENGHT_ENCODING_PREFIX_SIZE as u64 @@ -226,6 +226,7 @@ impl Encoder for InputMessageCodec { type Error = ClientCoreError; fn encode(&mut self, item: InputMessage, buf: &mut BytesMut) -> Result<(), Self::Error> { + #[allow(clippy::expect_used)] let encoded = bincode::serialize(&item).expect("failed to serialize InputMessage"); let encoded_len = encoded.len() as u32; let mut encoded_with_len = encoded_len.to_le_bytes().to_vec(); @@ -244,7 +245,7 @@ impl Decoder for InputMessageCodec { if buf.len() < LENGHT_ENCODING_PREFIX_SIZE { return Ok(None); } - + #[allow(clippy::expect_used)] let len = u32::from_le_bytes( buf[0..LENGHT_ENCODING_PREFIX_SIZE] .try_into() diff --git a/common/nym-connection-monitor/src/sync_self_ping.rs b/common/nym-connection-monitor/src/sync_self_ping.rs index a23dcece05d..80402571022 100644 --- a/common/nym-connection-monitor/src/sync_self_ping.rs +++ b/common/nym-connection-monitor/src/sync_self_ping.rs @@ -3,7 +3,6 @@ use std::time::Duration; -use futures::StreamExt; use nym_sdk::mixnet::{MixnetClient, MixnetMessageSender, Recipient}; use tracing::{debug, error}; diff --git a/mixtcp/examples/cloudflare_ping.rs b/mixtcp/examples/cloudflare_ping.rs index 39e7269bafb..e8f4c9a196a 100644 --- a/mixtcp/examples/cloudflare_ping.rs +++ b/mixtcp/examples/cloudflare_ping.rs @@ -1,3 +1,4 @@ +#![allow(clippy::result_large_err)] use mixtcp::{create_device, MixtcpError}; use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; use std::{ @@ -97,7 +98,7 @@ fn inspect_tls_packet(data: &[u8]) { return; } let content_type = data[0]; - if content_type < 0x14 || content_type > 0x17 { + if !(0x14..=0x17).contains(&content_type) { return; } let version = u16::from_be_bytes([data[1], data[2]]); diff --git a/mixtcp/examples/https_client.rs b/mixtcp/examples/https_client.rs index fa85431b83e..99b01024c21 100644 --- a/mixtcp/examples/https_client.rs +++ b/mixtcp/examples/https_client.rs @@ -1,3 +1,4 @@ +#![allow(clippy::result_large_err)] use mixtcp::{create_device, MixtcpError, NymIprDevice}; use nym_sdk::stream_wrapper::IpMixStream; use reqwest::StatusCode; diff --git a/mixtcp/examples/tls.rs b/mixtcp/examples/tls.rs index 2552c1806af..05ae0930749 100644 --- a/mixtcp/examples/tls.rs +++ b/mixtcp/examples/tls.rs @@ -1,3 +1,4 @@ +#![allow(clippy::result_large_err)] use mixtcp::{create_device, MixtcpError}; use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; use std::{ @@ -97,7 +98,7 @@ fn inspect_tls_packet(data: &[u8]) { return; } let content_type = data[0]; - if content_type < 0x14 || content_type > 0x17 { + if !(0x14..=0x17).contains(&content_type) { return; } let version = u16::from_be_bytes([data[1], data[2]]); @@ -199,7 +200,7 @@ async fn main() -> Result<(), Box> { } } - if start.elapsed().as_secs() % 5 == 0 && start.elapsed().as_millis() % 1000 < 100 { + if start.elapsed().as_secs().is_multiple_of(5) && start.elapsed().as_millis() % 1000 < 100 { info!( "State: TCP={:?}, established={}, can_send={}, can_recv={}", socket.state(), @@ -224,7 +225,9 @@ async fn main() -> Result<(), Box> { let _ = tls_conn.read_tls(socket); let _ = tls_conn.write_tls(socket); - if start.elapsed().as_secs() % 10 == 0 && start.elapsed().as_millis() % 1000 < 100 { + if start.elapsed().as_secs().is_multiple_of(10) + && start.elapsed().as_millis() % 1000 < 100 + { info!( "TLS state: handshaking={}, wants_read={}, wants_write={}", tls_conn.conn.is_handshaking(), diff --git a/mixtcp/src/bridge.rs b/mixtcp/src/bridge.rs index a82b77e911f..aea60167b42 100644 --- a/mixtcp/src/bridge.rs +++ b/mixtcp/src/bridge.rs @@ -98,7 +98,7 @@ impl NymIprBridge { info!("Incoming packet: {} bytes", packet.len()); // Forward to device via channel - if let Err(_) = self.rx_sender.send(packet.to_vec()) { + if self.rx_sender.send(packet.to_vec()).is_err() { error!("Failed to send packet to device - receiver dropped"); return Err(MixtcpError::ChannelClosed); } diff --git a/mixtcp/src/lib.rs b/mixtcp/src/lib.rs index 76abe07fc61..33fa66cba0a 100644 --- a/mixtcp/src/lib.rs +++ b/mixtcp/src/lib.rs @@ -31,10 +31,9 @@ pub async fn create_device( // Get the allocated IPs before moving the stream - need these for proper packet creation // further 'up' the flow in the code calling this fn (see examples/tcp_connect.rs). - let allocated_ips = ipr_stream + let allocated_ips = *ipr_stream .allocated_ips() - .ok_or(MixtcpError::NotConnected)? - .clone(); + .ok_or(MixtcpError::NotConnected)?; // Create channels for device <-> bridge communication let (tx_to_bridge, tx_from_device) = mpsc::unbounded_channel(); diff --git a/nym-gateway-directory/src/error.rs b/nym-gateway-directory/src/error.rs index f7aca831023..5358edd70f7 100644 --- a/nym-gateway-directory/src/error.rs +++ b/nym-gateway-directory/src/error.rs @@ -105,6 +105,9 @@ pub enum Error { #[error("invalid score value: {0}. Valid values are: offline, low, medium, high")] InvalidScoreValue(String), + + #[error("ips vec empty")] + NoIpsAvailable, } impl Error { diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index 662ab75a194..3913f732076 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -166,6 +166,7 @@ impl GatewayClient { .map_err(Box::new)?; // Gets around diff version imports compiler issue for the moment + #[allow(clippy::expect_used)] let network_details_compat = { let json = serde_json::to_string(network_details) .expect("Failed to serialize network details"); @@ -292,12 +293,13 @@ impl GatewayClient { debug!("found the following ips for {gateway_identity}: {ips:?}"); if ips.len() == 1 { // SAFETY: the vector is not empty, so unwrap is fine + #[allow(clippy::unwrap_used)] Ok(ips.pop().unwrap()) } else { // chose a random one if there's more than one // SAFETY: the vector is not empty, so unwrap is fine let mut rng = thread_rng(); - let ip = ips.choose(&mut rng).unwrap(); + let ip = ips.choose(&mut rng).ok_or_else(|| Error::NoIpsAvailable)?; Ok(*ip) } } diff --git a/sdk/rust/nym-sdk/src/lib.rs b/sdk/rust/nym-sdk/src/lib.rs index f5bbaa0f223..96109488ae9 100644 --- a/sdk/rust/nym-sdk/src/lib.rs +++ b/sdk/rust/nym-sdk/src/lib.rs @@ -12,9 +12,6 @@ pub mod client_pool; pub mod ip_packet_client; pub mod mixnet; pub mod stream_wrapper; -#[deprecated( - note = "Functionality from this module is mostly superceded by the stream_wrapper::MixSocket and stream_wrapper::MixStreamIPR exports. This module is no longer maintained and will be removed in a future release." -)] pub mod tcp_proxy; pub use error::{Error, Result}; diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index 24933fd11c7..ed96b5f1562 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -371,8 +371,7 @@ impl AsyncRead for MixnetClient { Ok(_) => {} Err(e) => { error!("failed to encode reconstructed message: {:?}", e); - return Poll::Ready(Err(tokio::io::Error::new( - tokio::io::ErrorKind::Other, + return Poll::Ready(Err(tokio::io::Error::other( "failed to encode reconstructed message", ))); } @@ -394,8 +393,7 @@ impl AsyncWrite for MixnetClient { let msg = match fut.poll_unpin(cx) { Poll::Ready(Some(Ok(msg))) => msg, Poll::Ready(Some(Err(_))) => { - return Poll::Ready(Err(std::io::Error::new( - std::io::ErrorKind::Other, + return Poll::Ready(Err(std::io::Error::other( "failed to read message from input", ))) } @@ -408,8 +406,7 @@ impl AsyncWrite for MixnetClient { let mut fut = pin!(self.client_input.send(msg)); match fut.poll_unpin(cx) { Poll::Ready(Ok(())) => Poll::Ready(Ok(msg_size as usize)), - Poll::Ready(Err(_)) => Poll::Ready(Err(std::io::Error::new( - std::io::ErrorKind::Other, + Poll::Ready(Err(_)) => Poll::Ready(Err(std::io::Error::other( "failed to send message to mixnet", ))), Poll::Pending => Poll::Pending, @@ -420,8 +417,7 @@ impl AsyncWrite for MixnetClient { self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll> { - Sink::poll_flush(self, cx) - .map_err(|_| std::io::Error::new(std::io::ErrorKind::Other, "failed to flush the sink")) + Sink::poll_flush(self, cx).map_err(|_| std::io::Error::other("failed to flush the sink")) } fn poll_shutdown( @@ -475,8 +471,7 @@ impl AsyncWrite for MixnetClientSender { let msg = match fut.poll_unpin(cx) { Poll::Ready(Some(Ok(msg))) => msg, Poll::Ready(Some(Err(_))) => { - return Poll::Ready(Err(std::io::Error::new( - std::io::ErrorKind::Other, + return Poll::Ready(Err(std::io::Error::other( "failed to read message from input", ))) } @@ -489,8 +484,7 @@ impl AsyncWrite for MixnetClientSender { let mut fut = pin!(self.client_input.send(msg)); match fut.poll_unpin(cx) { Poll::Ready(Ok(())) => Poll::Ready(Ok(msg_size as usize)), - Poll::Ready(Err(_)) => Poll::Ready(Err(std::io::Error::new( - std::io::ErrorKind::Other, + Poll::Ready(Err(_)) => Poll::Ready(Err(std::io::Error::other( "failed to send message to mixnet", ))), Poll::Pending => Poll::Pending, @@ -501,8 +495,7 @@ impl AsyncWrite for MixnetClientSender { self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll> { - Sink::poll_flush(self, cx) - .map_err(|_| std::io::Error::new(std::io::ErrorKind::Other, "failed to flush the sink")) + Sink::poll_flush(self, cx).map_err(|_| std::io::Error::other("failed to flush the sink")) } fn poll_shutdown( diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 051bd3918d6..c9155bd9639 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -85,7 +85,7 @@ impl MixStream { /// Nym address of Stream's peer (Nym Client it will communicate with). pub fn peer_addr(&self) -> Recipient { let peer = &self.peer.expect("No Peer set"); - peer.clone() + *peer } /// Our Nym address. @@ -211,7 +211,7 @@ impl MixStreamReader { /// Nym address of Stream's peer (Nym Client it will communicate with). pub fn peer_addr(&self) -> Recipient { let peer = &self.peer.expect("No Peer set"); - peer.clone() + *peer } /// Our Nym address. @@ -350,12 +350,11 @@ mod tests { init_logging(); let receiver_socket = MixSocket::new_test().await?; - let receiver_address = receiver_socket.nym_address().clone(); + let receiver_address = *receiver_socket.nym_address(); let sender_socket = MixSocket::new_test().await?; - let sender_address = sender_socket.nym_address().clone(); - let mut receiver_stream = - MixStream::new(Some(receiver_socket), sender_address.clone()).await; - let mut sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; + let sender_address = *sender_socket.nym_address(); + let mut receiver_stream = MixStream::new(Some(receiver_socket), sender_address).await; + let mut sender_stream = MixStream::new(Some(sender_socket), receiver_address).await; sender_stream.write_bytes(b"Hello, Mixnet Split!").await?; @@ -403,11 +402,11 @@ mod tests { init_logging(); let sender_socket = MixSocket::new_test().await?; - let sender_address = sender_socket.nym_address().clone(); + let sender_address = *sender_socket.nym_address(); let receiver_socket = MixSocket::new_test().await?; - let receiver_address = receiver_socket.nym_address().clone(); - let sender_stream = MixStream::new(Some(sender_socket), receiver_address.clone()).await; - let receiver_stream = MixStream::new(Some(receiver_socket), sender_address.clone()).await; + let receiver_address = *receiver_socket.nym_address(); + let sender_stream = MixStream::new(Some(sender_socket), receiver_address).await; + let receiver_stream = MixStream::new(Some(receiver_socket), sender_address).await; let (mut sender_reader, mut sender_writer) = sender_stream.split(); let (mut receiver_reader, mut receiver_writer) = receiver_stream.split(); diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 10366e0284b..09e440f7fdb 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -152,7 +152,7 @@ impl IpMixStream { match self.connect_inner().await { Ok(ip_pair) => { - self.allocated_ips = Some(ip_pair.clone()); + self.allocated_ips = Some(ip_pair); self.connection_state = ConnectionState::Connected; info!( "Connected to IPv4: {}, IPv6: {}", @@ -290,7 +290,7 @@ impl IpMixStream { /// Split for concurrent read/write (like TcpStream::Split) into IpMixnetStreamReader and IpMixnetStreamWriter. pub fn split(self) -> (IpMixStreamReader, IpMixStreamWriter) { debug!("Splitting IpMixStream"); - let local_addr = self.stream.client.nym_address().clone(); + let local_addr = *self.stream.client.nym_address(); let (stream_reader, stream_writer) = self.stream.split(); debug!("Split IpMixStream into Reader and Writer"); @@ -301,7 +301,7 @@ impl IpMixStream { IpMixStreamReader { stream_reader, listener: self.listener, - allocated_ips: self.allocated_ips.clone(), + allocated_ips: self.allocated_ips, connection_state: self.connection_state.clone(), state_tx: Some(state_tx), ips_tx: Some(ips_tx), diff --git a/tools/echo-server/src/lib.rs b/tools/echo-server/src/lib.rs index 4759f6086ac..801164e699c 100644 --- a/tools/echo-server/src/lib.rs +++ b/tools/echo-server/src/lib.rs @@ -344,7 +344,7 @@ mod tests { let mut client = MixnetClient::connect_new().await?; println!("sending client addr {}", client.nym_address()); - let sender = client.split_sender(); + let mut sender = client.split_sender(); let receiving_task_handle = tokio::spawn(async move { println!("in handle"); From f640f45f2b961da226f6c908407234af8aebba5f Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 21 Oct 2025 10:29:58 +0100 Subject: [PATCH 081/139] temp get rid of logging for ci --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs | 4 ++-- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index c9155bd9639..5c82d066938 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -347,7 +347,7 @@ mod tests { #[tokio::test] async fn simple_surb_reply_stream() -> Result<(), Box> { - init_logging(); + // init_logging(); let receiver_socket = MixSocket::new_test().await?; let receiver_address = *receiver_socket.nym_address(); @@ -399,7 +399,7 @@ mod tests { #[tokio::test] async fn concurrent_surb_reply_split() -> Result<(), Box> { - init_logging(); + // init_logging(); let sender_socket = MixSocket::new_test().await?; let sender_address = *sender_socket.nym_address(); diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 09e440f7fdb..5b8571cb608 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -521,7 +521,7 @@ mod tests { #[tokio::test] async fn connect_to_ipr() -> Result<(), Box> { - init_logging(); + // init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; @@ -545,7 +545,7 @@ mod tests { #[tokio::test] async fn dns_ping_checks() -> Result<(), Box> { - init_logging(); + // init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; @@ -657,7 +657,7 @@ mod tests { #[tokio::test] async fn split_dns_ping_checks() -> Result<(), Box> { - init_logging(); + // init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; From c18c09e9cdeb56e5d68dd9b963b1005827177e28 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 21 Oct 2025 10:34:43 +0100 Subject: [PATCH 082/139] temp get rid of logging for ci again --- .../stream_wrapper/mixnet_stream_wrapper.rs | 20 ++++++++-------- .../mixnet_stream_wrapper_ipr.rs | 24 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 5c82d066938..cc82167239d 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -322,7 +322,7 @@ impl AsyncWrite for MixStreamWriter { mod tests { use super::*; use nym_sphinx::receiver::ReconstructedMessageCodec; - use std::sync::Once; + // use std::sync::Once; use tokio::io::AsyncReadExt; use tokio_util::codec::Decoder; @@ -334,16 +334,16 @@ mod tests { } } - static INIT: Once = Once::new(); + // static INIT: Once = Once::new(); - fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); - }); - } + // fn init_logging() { + // if tracing::dispatcher::has_been_set() { + // return; + // } + // INIT.call_once(|| { + // nym_bin_common::logging::setup_tracing_logger(); + // }); + // } #[tokio::test] async fn simple_surb_reply_stream() -> Result<(), Box> { diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 5b8571cb608..11170c97246 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -506,18 +506,18 @@ mod tests { icmp_identifier, is_icmp_echo_reply, is_icmp_v6_echo_reply, send_ping_v4, send_ping_v6, }; use std::net::{Ipv4Addr, Ipv6Addr}; - use std::sync::Once; - - static INIT: Once = Once::new(); - - fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); - }); - } + // use std::sync::Once; + + // static INIT: Once = Once::new(); + + // fn init_logging() { + // if tracing::dispatcher::has_been_set() { + // return; + // } + // INIT.call_once(|| { + // nym_bin_common::logging::setup_tracing_logger(); + // }); + // } #[tokio::test] async fn connect_to_ipr() -> Result<(), Box> { From 260d79202d52346bad47c825e308cb84eeede39c Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 21 Oct 2025 11:10:47 +0100 Subject: [PATCH 083/139] remove old commented out imports --- Cargo.toml | 1 - nym-gateway-directory/Cargo.toml | 8 -------- 2 files changed, 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c1421519aaf..411d203daf6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -117,7 +117,6 @@ members = [ "common/wireguard-private-metadata/tests", "common/wireguard-types", "common/zulip-client", - # "documentation/autodoc", "gateway", "nym-api", "nym-api/nym-api-requests", diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index a0454e535aa..86254574c43 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -11,21 +11,13 @@ workspace = true [dependencies] itertools.workspace = true -# nym-client-core.workspace = true nym-client-core = { path = "../common/client-core" } -# nym-common.workspace = true nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } -# nym-http-api-client.workspace = true nym-http-api-client = { path = "../common/http-api-client" } -# nym-offline-monitor.workspace = true nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } -# nym-sdk.workspace = true - removing due to circular dep, replaced with below nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo -# nym-topology.workspace = true nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo -# nym-validator-client.workspace = true nym-validator-client = { path = "../common/client-libs/validator-client" } -# nym-vpn-api-client = { workspace = true } nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } nym-crypto = { path = "../common/crypto" } nym-sphinx-addressing = { path = "../common/nymsphinx/addressing" } From b0980734e7321b55a05df289ff3ed5de07a407af Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 21 Oct 2025 12:22:33 +0100 Subject: [PATCH 084/139] lock --- Cargo.lock | 13853 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 13853 insertions(+) create mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000000..cd92d02c3cf --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,13853 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "accessory" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28e416a3ab45838bac2ab2d81b1088d738d7b2d2c5272a54d39366565a29bd80" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "addr" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" +dependencies = [ + "psl", + "psl-types", +] + +[[package]] +name = "adler2" +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", + "generic-array 0.14.9", +] + +[[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 2.6.1", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "ammonia" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17e913097e1a2124b46746c980134e8c954bc17a6a59bb3fde96f088d126dde6" +dependencies = [ + "cssparser", + "html5ever", + "maplit", + "tendril", + "url", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2 0.10.6", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "askama" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7" +dependencies = [ + "askama_derive", + "itoa", + "percent-encoding", + "serde", + "serde_json", +] + +[[package]] +name = "askama_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac" +dependencies = [ + "askama_parser", + "basic-toml", + "memchr", + "proc-macro2", + "quote", + "rustc-hash", + "serde", + "serde_derive", + "syn 2.0.107", +] + +[[package]] +name = "askama_parser" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f" +dependencies = [ + "memchr", + "serde", + "serde_derive", + "winnow", +] + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-compression" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" +dependencies = [ + "compression-codecs", + "compression-core", + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "async-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3609af4bbf701ddaf1f6bb4e6257dff4ff8932327d0e685d3f653724c258b1ac" +dependencies = [ + "futures-io", + "futures-util", + "log", + "pin-project-lite", + "rustls-native-certs 0.7.3", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tungstenite 0.21.0", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-future" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" + +[[package]] +name = "autocfg" +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.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "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.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-client-ip" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" +dependencies = [ + "axum", + "forwarded-header-value", + "serde", +] + +[[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.3.1", + "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-extra" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" +dependencies = [ + "axum", + "axum-core", + "bytes", + "fastrand 2.3.0", + "futures-util", + "headers", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "multer", + "pin-project-lite", + "serde", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[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.107", +] + +[[package]] +name = "axum-test" +version = "16.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e3a443d2608936a02a222da7b746eb412fede7225b3030b64fe9be99eab8dc" +dependencies = [ + "anyhow", + "assert-json-diff", + "auto-future", + "axum", + "bytes", + "bytesize", + "cookie", + "http 1.3.1", + "http-body-util", + "hyper 1.7.0", + "hyper-util", + "mime", + "pretty_assertions", + "reserve-port", + "rust-multipart-rfc7578_2", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tokio", + "tower 0.5.2", + "url", +] + +[[package]] +name = "backon" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" +dependencies = [ + "fastrand 2.3.0", + "gloo-timers", + "tokio", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-url" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2b6c78c06f7288d5e3c3d683bde35a79531127c83b087e5d0d77c974b4b28" +dependencies = [ + "base64 0.22.1", +] + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "base85rs" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87678d33a2af71f019ed11f52db246ca6c5557edee2cccbe689676d1ad9c6b5a" + +[[package]] +name = "basic-toml" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" +dependencies = [ + "serde", +] + +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "binstring" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" + +[[package]] +name = "bip32" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" +dependencies = [ + "bs58", + "hmac", + "k256", + "rand_core 0.6.4", + "ripemd", + "secp256k1", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bip39" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", + "zeroize", +] + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +dependencies = [ + "serde_core", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +dependencies = [ + "byte-tools", + "crypto-mac", + "digest 0.8.1", + "opaque-debug 0.2.3", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "bloomfilter" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" +dependencies = [ + "getrandom 0.2.16", + "siphasher 1.0.1", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/jstuczyn/bls12_381?branch=temp%2Fexperimental-serdect-updated#9bf520059cb28323fc51469cae86868ef4fa6fbd" +dependencies = [ + "digest 0.10.7", + "ff", + "group", + "pairing", + "rand_core 0.6.4", + "serde", + "serdect 0.3.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bnum" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.9", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytecodec" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" +dependencies = [ + "byteorder", + "trackable 0.2.24", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "bytesize" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e93abca9e28e0a1b9877922aacb20576e05d4679ffa78c3d6dc22a26a216659" + +[[package]] +name = "camino" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "castaway" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" + +[[package]] +name = "cc" +version = "1.2.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "celes" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc3ba3c5408fae183329e0d1ac8f8eed3cb7b647590fd93e6d6288f6b09db0be" +dependencies = [ + "phf 0.11.3", + "serde", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" +dependencies = [ + "byteorder", + "keystream", +] + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link 0.2.1", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "clap" +version = "4.5.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_complete" +version = "4.5.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" +dependencies = [ + "clap", +] + +[[package]] +name = "clap_complete_fig" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" +dependencies = [ + "clap", + "clap_complete", +] + +[[package]] +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "clap_lex" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" + +[[package]] +name = "coarsetime" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + +[[package]] +name = "comfy-table" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" +dependencies = [ + "crossterm 0.29.0", + "unicode-segmentation", + "unicode-width 0.2.2", +] + +[[package]] +name = "compression-codecs" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "console-api" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime", + "hyper-util", + "prost", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-str" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462e1f6a8e005acc8835d32d60cbd7973ed65ea2a8d8473830e675f050956427" +dependencies = [ + "prost", + "tendermint-proto", +] + +[[package]] +name = "cosmrs" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1394c263335da09e8ba8c4b2c675d804e3e0deb44cce0866a5f838d3ddd43d02" +dependencies = [ + "bip32", + "cosmos-sdk-proto", + "ecdsa", + "eyre", + "k256", + "rand_core 0.6.4", + "serde", + "serde_json", + "signature", + "subtle-encoding", + "tendermint", + "tendermint-rpc", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-core" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" + +[[package]] +name = "cosmwasm-crypto" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "cosmwasm-core", + "curve25519-dalek", + "digest 0.10.7", + "ecdsa", + "ed25519-zebra", + "k256", + "num-traits", + "p256", + "rand_core 0.6.4", + "rayon", + "sha2 0.10.9", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "cosmwasm-schema" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" +dependencies = [ + "cosmwasm-schema-derive", + "schemars 0.8.22", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "cosmwasm-std" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" +dependencies = [ + "base64 0.22.1", + "bech32", + "bnum", + "cosmwasm-core", + "cosmwasm-crypto", + "cosmwasm-derive", + "derive_more 1.0.0", + "hex", + "rand_core 0.6.4", + "rmp-serde", + "schemars 0.8.22", + "serde", + "serde-json-wasm", + "sha2 0.10.9", + "static_assertions", + "thiserror 1.0.69", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "futures", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "tokio", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.10.0", + "crossterm_winapi", + "document-features", + "parking_lot", + "rustix", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.9", + "rand_core 0.6.4", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.9", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +dependencies = [ + "generic-array 0.12.4", + "subtle 1.0.0", +] + +[[package]] +name = "cssparser" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf 0.11.3", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.107", +] + +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + +[[package]] +name = "ct-codecs" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8" + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "cupid" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1" +dependencies = [ + "gcc", + "rustc_version 0.2.3", +] + +[[package]] +name = "curl" +version = "0.4.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.6.1", + "windows-sys 0.59.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.83+curl-8.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.59.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "serde", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "cw-controllers" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw-multi-test" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" +dependencies = [ + "anyhow", + "bech32", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "itertools 0.14.0", + "prost", + "schemars 0.8.22", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", +] + +[[package]] +name = "cw-storage-plus" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" +dependencies = [ + "cosmwasm-std", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "cw-utils" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw20" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "cw3" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw20", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "cw4" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.107", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.107", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", + "serde", +] + +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "debounced" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "107e5cd9b5163c19751e53eef634cae25cf5ed5f6d0c81125feaa92e43703cc7" +dependencies = [ + "futures-timer", + "futures-util", +] + +[[package]] +name = "defguard_wireguard_rs" +version = "0.4.7" +source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.4.7#ef1cf3714629bf5016fb38cbb7320451dc69fb09" +dependencies = [ + "base64 0.22.1", + "libc", + "log", + "netlink-packet-core 0.7.0", + "netlink-packet-generic", + "netlink-packet-route 0.20.1", + "netlink-packet-utils", + "netlink-packet-wireguard", + "netlink-sys", + "nix 0.29.0", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "defmt" +version = "0.3.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" +dependencies = [ + "defmt 1.0.1", +] + +[[package]] +name = "defmt" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "548d977b6da32fa1d1fda2876453da1e7df63ad0304c8b3dae4dbe7b96f39b78" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d4fc12a85bcf441cfe44344c4b72d58493178ce635338a3f3b78943aceb258e" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.17", +] + +[[package]] +name = "delegate-display" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9926686c832494164c33a36bf65118f4bd6e704000b58c94681bf62e9ad67a74" +dependencies = [ + "impartial-ord", + "itoa", + "macroific", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.107", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", + "unicode-xid", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.9", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.10.0", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "dkg-bypass-contract" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "nym-coconut-dkg-common 0.1.0", + "nym-contracts-common", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "dtoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "easy-addr" +version = "0.1.0" +dependencies = [ + "cosmwasm-std", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect 0.2.0", + "signature", + "spki", +] + +[[package]] +name = "echo-server" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "bytecodec", + "bytes", + "clap", + "dashmap", + "dirs", + "futures", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-sdk", + "serde", + "tempfile", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + +[[package]] +name = "ed25519-compact" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" +dependencies = [ + "ct-codecs", + "getrandom 0.2.16", +] + +[[package]] +name = "ed25519-consensus" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" +dependencies = [ + "curve25519-dalek-ng", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core 0.6.4", + "sha2 0.10.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.9", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect 0.2.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "etherparse" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "827292ea592108849932ad8e30218f8b1f21c0dfd0696698a18b5d0aed62d990" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.1", + "pin-project-lite", +] + +[[package]] +name = "extension-storage" +version = "1.4.0-rc.0" +dependencies = [ + "bip39", + "console_error_panic_hook", + "js-sys", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-storage", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fancy_constructor" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a27643a5d05f3a22f5afd6e0d0e6e354f92d37907006f97b84b9cb79082198" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "filetime" +version = "0.2.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.60.2", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "eyre", + "paste", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "forwarded-header-value" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +dependencies = [ + "nonempty", + "thiserror 1.0.69", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "serde", + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug 0.3.1", + "polyval", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 1.3.1", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "goblin" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.12.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.12.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "zerocopy", +] + +[[package]] +name = "handlebars" +version = "3.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" +dependencies = [ + "log", + "pest", + "pest_derive", + "quick-error", + "serde", + "serde_json", +] + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64 0.22.1", + "bytes", + "headers-core", + "http 1.3.1", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.3.1", +] + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + +[[package]] +name = "hickory-proto" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +dependencies = [ + "async-trait", + "bytes", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "h2 0.4.12", + "http 1.3.1", + "idna", + "ipnet", + "once_cell", + "rand 0.9.2", + "ring", + "rustls 0.23.33", + "thiserror 2.0.17", + "tinyvec", + "tokio", + "tokio-rustls 0.26.4", + "tracing", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "moka", + "once_cell", + "parking_lot", + "rand 0.9.2", + "resolv-conf", + "rustls 0.23.33", + "smallvec", + "thiserror 2.0.17", + "tokio", + "tokio-rustls 0.26.4", + "tracing", + "webpki-roots 0.26.11", +] + +[[package]] +name = "hidapi" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "winapi", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha1-compact" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" + +[[package]] +name = "hmac-sha256" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha512" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "html5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4" +dependencies = [ + "log", + "markup5ever", + "match_token", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpcodec" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" +dependencies = [ + "bytecodec", + "trackable 0.2.24", +] + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "humantime" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" + +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +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", + "hyper-util", + "rustls 0.23.33", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower-service", + "webpki-roots 1.0.3", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper 1.7.0", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.7.0", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.1", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impartial-ord" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab604ee7085efba6efc65e4ebca0e9533e3aff6cb501d7d77b211e3a781c6d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "importer-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "bip39", + "clap", + "dirs", + "importer-contract", + "nym-bin-common 0.6.0", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "serde", + "serde_json", + "tokio", + "tracing", +] + +[[package]] +name = "importer-contract" +version = "0.1.0" +dependencies = [ + "base85rs", + "cosmwasm-schema", + "cosmwasm-std", +] + +[[package]] +name = "indenter" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" + +[[package]] +name = "indexed_db_futures" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69ff41758cbd104e91033bb53bc449bec7eea65652960c81eddf3fc146ecea19" +dependencies = [ + "accessory", + "cfg-if", + "delegate-display", + "derive_more 2.0.1", + "fancy_constructor", + "indexed_db_futures_macros_internal", + "js-sys", + "sealed", + "smallvec", + "thiserror 2.0.17", + "tokio", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "indexed_db_futures_macros_internal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caeba94923b68f254abef921cea7e7698bf4675fdd89d7c58bf1ed885b49a27d" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", + "serde", + "serde_core", +] + +[[package]] +name = "indicatif" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +dependencies = [ + "console", + "portable-atomic", + "unicode-width 0.2.2", + "unit-prefix", + "vt100", + "web-time", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding", + "generic-array 0.14.9", +] + +[[package]] +name = "inquire" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" +dependencies = [ + "bitflags 1.3.2", + "crossterm 0.25.0", + "dyn-clone", + "lazy_static", + "newline-converter", + "thiserror 1.0.69", + "unicode-segmentation", + "unicode-width 0.1.14", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "inventory" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +dependencies = [ + "rustversion", +] + +[[package]] +name = "ip_network" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.10", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "ipnetwork" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf370abdafd54d13e54a620e8c3e1145f28e46cc9d704bc6d94414559df41763" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "isahc" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel", + "castaway", + "crossbeam-utils", + "curl", + "curl-sys", + "event-listener 2.5.3", + "futures-lite", + "http 0.2.12", + "log", + "once_cell", + "polling", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jwt-simple" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "731011e9647a71ff4f8474176ff6ce6e0d2de87a0173f15613af3a84c3e3401a" +dependencies = [ + "anyhow", + "binstring", + "blake2b_simd", + "coarsetime", + "ct-codecs", + "ed25519-compact", + "hmac-sha1-compact", + "hmac-sha256", + "hmac-sha512", + "k256", + "p256", + "p384", + "rand 0.8.5", + "serde", + "serde_json", + "superboring", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.9", + "signature", +] + +[[package]] +name = "keystream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" + +[[package]] +name = "kqueue" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "ledger-apdu" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" +dependencies = [ + "arrayref", + "no-std-compat", + "snafu", +] + +[[package]] +name = "ledger-transport" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" +dependencies = [ + "async-trait", + "ledger-apdu", +] + +[[package]] +name = "ledger-transport-hid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" +dependencies = [ + "byteorder", + "cfg-if", + "hex", + "hidapi", + "ledger-transport", + "libc", + "log", + "thiserror 1.0.69", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags 2.10.0", + "libc", + "redox_syscall", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "lioness" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" +dependencies = [ + "arrayref", + "blake2 0.8.1", + "chacha", + "keystream", +] + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "macroific" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89f276537b4b8f981bf1c13d79470980f71134b7bdcc5e6e911e910e556b0285" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "macroific_macro", +] + +[[package]] +name = "macroific_attr_parse" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad4023761b45fcd36abed8fb7ae6a80456b0a38102d55e89a57d9a594a236be9" +dependencies = [ + "proc-macro2", + "quote", + "sealed", + "syn 2.0.107", +] + +[[package]] +name = "macroific_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a7594d3c14916fa55bef7e9d18c5daa9ed410dd37504251e4b75bbdeec33e3" +dependencies = [ + "proc-macro2", + "quote", + "sealed", + "syn 2.0.107", +] + +[[package]] +name = "macroific_macro" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da6f2ed796261b0a74e2b52b42c693bb6dee1effba3a482c49592659f824b3b" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "managed" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "markup5ever" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "311fe69c934650f8f19652b3946075f0fc41ad8757dbb68f1ca14e7900ecc1c3" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minicov" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +dependencies = [ + "cc", + "walkdir", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "mix-fetch-wasm" +version = "1.4.0-rc.0" +dependencies = [ + "async-trait", + "futures", + "js-sys", + "nym-bin-common 0.6.0", + "nym-http-api-client", + "nym-ordered-buffer", + "nym-service-providers-common", + "nym-socks5-requests", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "tokio", + "tsify", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-client-core", + "wasm-utils", +] + +[[package]] +name = "mixnet-connectivity-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "futures", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-network-defaults 0.1.0", + "nym-sdk", + "tokio", + "tracing", +] + +[[package]] +name = "mixtcp" +version = "0.0.1" +dependencies = [ + "bytes", + "dirs", + "nym-bin-common 0.6.0", + "nym-ip-packet-requests", + "nym-sdk", + "reqwest 0.12.24", + "rustls 0.23.33", + "serde_json", + "smoltcp", + "thiserror 2.0.17", + "tokio", + "tracing", + "tracing-subscriber", + "webpki-roots 1.0.3", +] + +[[package]] +name = "mock_instant" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" + +[[package]] +name = "moka" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" +dependencies = [ + "async-lock", + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "equivalent", + "event-listener 5.4.1", + "futures-util", + "parking_lot", + "portable-atomic", + "rustc_version 0.4.1", + "smallvec", + "tagptr", + "uuid", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.3.1", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-core" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" +dependencies = [ + "paste", +] + +[[package]] +name = "netlink-packet-generic" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-core 0.7.0", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" +dependencies = [ + "anyhow", + "bitflags 2.10.0", + "byteorder", + "libc", + "log", + "netlink-packet-core 0.7.0", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ec2f5b6839be2a19d7fa5aab5bc444380f6311c2b693551cb80f45caaa7b5ef" +dependencies = [ + "bitflags 2.10.0", + "libc", + "log", + "netlink-packet-core 0.8.1", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-packet-wireguard" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b25b050ff1f6a1e23c6777b72db22790fe5b6b5ccfd3858672587a79876c8f" +dependencies = [ + "anyhow", + "byteorder", + "libc", + "log", + "netlink-packet-generic", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-proto" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" +dependencies = [ + "bytes", + "futures", + "log", + "netlink-packet-core 0.8.1", + "netlink-sys", + "thiserror 2.0.17", +] + +[[package]] +name = "netlink-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +dependencies = [ + "bytes", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "newline-converter" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "notify" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" +dependencies = [ + "bitflags 1.3.2", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "mio 0.8.11", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "nym-api" +version = "1.1.67" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "axum-test", + "bincode", + "bip39", + "bs58", + "cfg-if", + "clap", + "console-subscriber", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw3", + "cw4", + "dashmap", + "dotenvy", + "futures", + "humantime-serde", + "moka", + "nym-api-requests 0.1.0", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-cache", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-dkg", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-signer-check", + "nym-ecash-time 0.1.0", + "nym-gateway-client", + "nym-http-api-client", + "nym-http-api-common", + "nym-mixnet-contract-common 0.6.0", + "nym-node-requests 0.1.0", + "nym-node-tester-utils", + "nym-pemstore 0.3.0", + "nym-serde-helpers 0.1.0", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-ticketbooks-merkle 0.1.0", + "nym-topology", + "nym-types", + "nym-validator-client 0.1.0", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.24", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx", + "tempfile", + "tendermint", + "test-with", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "ts-rs", + "url", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", + "zeroize", +] + +[[package]] +name = "nym-api-requests" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmrs", + "cosmwasm-std", + "ecdsa", + "hex", + "humantime-serde", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-signer-check-types 0.1.0", + "nym-ecash-time 0.1.0", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-node-requests 0.1.0", + "nym-noise-keys 0.1.0", + "nym-serde-helpers 0.1.0", + "nym-ticketbooks-merkle 0.1.0", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tracing", + "ts-rs", + "utoipa", +] + +[[package]] +name = "nym-api-requests" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "bs58", + "cosmrs", + "cosmwasm-std", + "ecdsa", + "hex", + "humantime-serde", + "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-contracts-common", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-signer-check-types 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-node-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-noise-keys 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ticketbooks-merkle 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tracing", + "utoipa", +] + +[[package]] +name = "nym-apple-network" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" +dependencies = [ + "block2", + "dispatch2", + "nix 0.30.1", + "objc2", + "objc2-foundation", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-async-file-watcher" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "notify", + "tokio", +] + +[[package]] +name = "nym-authenticator-client" +version = "0.1.0" +dependencies = [ + "bincode", + "futures", + "nym-authenticator-requests", + "nym-bandwidth-controller", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-registration-common", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-validator-client 0.1.0", + "nym-wireguard-types 0.1.0", + "semver 1.0.27", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-authenticator-requests" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bincode", + "hmac", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-network-defaults 0.1.0", + "nym-service-provider-requests-common", + "nym-sphinx", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "semver 1.0.27", + "serde", + "sha2 0.10.9", + "strum_macros 0.27.2", + "thiserror 2.0.17", + "x25519-dalek", +] + +[[package]] +name = "nym-bandwidth-controller" +version = "0.1.0" +dependencies = [ + "async-trait", + "bip39", + "log", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-time 0.1.0", + "nym-network-defaults 0.1.0", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "thiserror 2.0.17", + "url", + "zeroize", +] + +[[package]] +name = "nym-bin-common" +version = "0.6.0" +dependencies = [ + "clap", + "clap_complete", + "clap_complete_fig", + "const-str", + "log", + "opentelemetry", + "opentelemetry-jaeger", + "schemars 0.8.22", + "serde", + "serde_json", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "tracing-tree", + "utoipa", + "vergen 8.3.1", +] + +[[package]] +name = "nym-bin-common" +version = "0.6.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "const-str", + "log", + "schemars 0.8.22", + "serde", + "utoipa", + "vergen 8.3.1", +] + +[[package]] +name = "nym-cache" +version = "0.1.0" +dependencies = [ + "tokio", +] + +[[package]] +name = "nym-cli" +version = "1.1.64" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bip39", + "bs58", + "clap", + "clap_complete", + "clap_complete_fig", + "dotenvy", + "inquire", + "log", + "nym-bin-common 0.6.0", + "nym-cli-commands", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "serde", + "serde_json", + "tap", + "tokio", +] + +[[package]] +name = "nym-cli-commands" +version = "1.0.0" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bip39", + "bs58", + "cfg-if", + "clap", + "colored", + "comfy-table", + "cosmrs", + "cosmwasm-std", + "csv", + "cw-utils", + "futures", + "handlebars", + "humantime-serde", + "inquire", + "k256", + "log", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-coconut-dkg-common 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credential-proxy-requests 0.1.0", + "nym-credential-storage", + "nym-credential-utils", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-time 0.1.0", + "nym-http-api-client", + "nym-id", + "nym-mixnet-contract-common 0.6.0", + "nym-multisig-contract-common 0.1.0", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "nym-sphinx", + "nym-types", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "toml 0.8.23", + "url", + "zeroize", +] + +[[package]] +name = "nym-client" +version = "1.1.64" +dependencies = [ + "bs58", + "clap", + "dirs", + "futures", + "log", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-client-websocket-requests", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-id", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "nym-sphinx", + "nym-task", + "nym-topology", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tungstenite", + "url", + "zeroize", +] + +[[package]] +name = "nym-client-core" +version = "1.1.15" +dependencies = [ + "async-trait", + "base64 0.21.7", + "bincode", + "bs58", + "cfg-if", + "clap", + "comfy-table", + "futures", + "gloo-timers", + "http-body-util", + "humantime", + "hyper 1.7.0", + "hyper-util", + "nym-bandwidth-controller", + "nym-client-core-config-types", + "nym-client-core-gateways-storage", + "nym-client-core-surb-storage", + "nym-credential-storage", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "nym-gateway-client", + "nym-gateway-requests", + "nym-http-api-client", + "nym-id", + "nym-mixnet-client", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-nonexhaustive-delayqueue", + "nym-pemstore 0.3.0", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "sha2 0.10.9", + "si-scale", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tokio_with_wasm", + "tracing", + "tungstenite 0.20.1", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-client-core-config-types" +version = "0.1.0" +dependencies = [ + "humantime-serde", + "nym-config 0.1.0", + "nym-pemstore 0.3.0", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-statistics-common", + "serde", + "thiserror 2.0.17", + "url", +] + +[[package]] +name = "nym-client-core-gateways-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "cosmrs", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "serde", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-client-core-surb-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "dashmap", + "nym-crypto 0.4.0", + "nym-sphinx", + "nym-task", + "sqlx", + "sqlx-pool-guard", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-client-wasm" +version = "1.4.0-rc.0" +dependencies = [ + "anyhow", + "futures", + "gloo-timers", + "js-sys", + "nym-bin-common 0.6.0", + "nym-gateway-requests", + "nym-node-tester-utils", + "nym-node-tester-wasm", + "once_cell", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tokio_with_wasm", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "wasm-client-core", + "wasm-utils", + "web-sys", +] + +[[package]] +name = "nym-client-websocket-requests" +version = "0.1.0" +dependencies = [ + "nym-sphinx", + "serde", + "serde_json", +] + +[[package]] +name = "nym-coconut-dkg-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw4", + "nym-contracts-common", + "nym-multisig-contract-common 0.1.0", +] + +[[package]] +name = "nym-coconut-dkg-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "cw2", + "cw4", + "nym-contracts-common", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", +] + +[[package]] +name = "nym-common" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" +dependencies = [ + "tracing", + "tracing-test", +] + +[[package]] +name = "nym-common" +version = "1.18.0" +dependencies = [ + "tracing", + "tracing-test", +] + +[[package]] +name = "nym-compact-ecash" +version = "0.1.0" +dependencies = [ + "bincode", + "bls12_381", + "bs58", + "cfg-if", + "criterion", + "digest 0.10.7", + "ff", + "group", + "itertools 0.14.0", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "rand 0.8.5", + "rayon", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-compact-ecash" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "bincode", + "bls12_381", + "bs58", + "cfg-if", + "digest 0.10.7", + "ff", + "group", + "itertools 0.14.0", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=develop)", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-config" +version = "0.1.0" +dependencies = [ + "dirs", + "handlebars", + "log", + "nym-network-defaults 0.1.0", + "serde", + "thiserror 2.0.17", + "toml 0.8.23", + "url", +] + +[[package]] +name = "nym-config" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "dirs", + "handlebars", + "log", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "serde", + "thiserror 2.0.17", + "toml 0.8.23", + "url", +] + +[[package]] +name = "nym-connection-monitor" +version = "1.18.0" +dependencies = [ + "bincode", + "bytes", + "futures", + "nym-common 1.18.0", + "nym-config 0.1.0", + "nym-ip-packet-requests", + "nym-sdk", + "pnet_packet", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-contracts-common" +version = "0.5.0" +dependencies = [ + "anyhow", + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars 0.8.22", + "serde", + "serde_json", + "thiserror 2.0.17", + "utoipa", + "vergen 8.3.1", +] + +[[package]] +name = "nym-contracts-common-testing" +version = "0.1.0" +dependencies = [ + "anyhow", + "cosmwasm-std", + "cw-multi-test", + "cw-storage-plus", + "nym-contracts-common", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", +] + +[[package]] +name = "nym-cpp-ffi" +version = "0.1.2" +dependencies = [ + "anyhow", + "bs58", + "lazy_static", + "nym-bin-common 0.6.0", + "nym-ffi-shared", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "tokio", +] + +[[package]] +name = "nym-credential-proxy" +version = "0.3.0" +dependencies = [ + "anyhow", + "axum", + "bip39", + "bs58", + "cfg-if", + "clap", + "futures", + "humantime", + "nym-bin-common 0.6.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-credential-proxy-lib", + "nym-credential-proxy-requests 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-signer-check", + "nym-http-api-common", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "strum", + "strum_macros 0.27.2", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "url", + "utoipa", + "utoipa-swagger-ui", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-credential-proxy-lib" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "bip39", + "bs58", + "futures", + "humantime", + "nym-cache", + "nym-compact-ecash 0.1.0", + "nym-credential-proxy-requests 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-signer-check", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "strum", + "strum_macros 0.27.2", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tracing", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-credential-proxy-requests" +version = "0.1.0" +dependencies = [ + "async-trait", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-http-api-client", + "nym-http-api-common", + "nym-serde-helpers 0.1.0", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "serde_json", + "serde_with", + "time", + "tsify", + "utoipa", + "uuid", + "wasm-bindgen", + "wasmtimer", +] + +[[package]] +name = "nym-credential-proxy-requests" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "async-trait", + "nym-credentials 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-http-api-client", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "serde_json", + "serde_with", + "time", + "uuid", + "wasmtimer", +] + +[[package]] +name = "nym-credential-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "log", + "nym-compact-ecash 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "nym-test-utils", + "serde", + "sqlx", + "sqlx-pool-guard", + "thiserror 2.0.17", + "tokio", + "zeroize", +] + +[[package]] +name = "nym-credential-utils" +version = "0.1.0" +dependencies = [ + "log", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-ecash-time 0.1.0", + "nym-validator-client 0.1.0", + "thiserror 2.0.17", + "time", + "tokio", +] + +[[package]] +name = "nym-credential-verification" +version = "0.1.0" +dependencies = [ + "async-trait", + "bs58", + "cosmwasm-std", + "cw-utils", + "dyn-clone", + "futures", + "nym-api-requests 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-ecash-contract-common 0.1.0", + "nym-gateway-requests", + "nym-gateway-storage", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "si-scale", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-credentials" +version = "0.1.0" +dependencies = [ + "bincode", + "bls12_381", + "cosmrs", + "log", + "nym-api-requests 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-ecash-time 0.1.0", + "nym-http-api-client", + "nym-network-defaults 0.1.0", + "nym-serde-helpers 0.1.0", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "zeroize", +] + +[[package]] +name = "nym-credentials" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "bincode", + "bls12_381", + "cosmrs", + "log", + "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-http-api-client", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "serde", + "thiserror 2.0.17", + "time", + "zeroize", +] + +[[package]] +name = "nym-credentials-interface" +version = "0.1.0" +dependencies = [ + "bls12_381", + "nym-compact-ecash 0.1.0", + "nym-ecash-time 0.1.0", + "nym-network-defaults 0.1.0", + "rand 0.8.5", + "serde", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", + "time", + "utoipa", +] + +[[package]] +name = "nym-credentials-interface" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "bls12_381", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "rand 0.8.5", + "serde", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", + "time", + "utoipa", +] + +[[package]] +name = "nym-crypto" +version = "0.4.0" +dependencies = [ + "aead", + "aes", + "aes-gcm-siv", + "base64 0.22.1", + "blake3", + "bs58", + "cipher", + "ctr", + "digest 0.10.7", + "ed25519-dalek", + "generic-array 0.14.9", + "hkdf", + "hmac", + "jwt-simple", + "nym-pemstore 0.3.0", + "nym-sphinx-types 0.2.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_bytes", + "sha2 0.10.9", + "subtle-encoding", + "thiserror 2.0.17", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-crypto" +version = "0.4.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "aes", + "base64 0.22.1", + "bs58", + "cipher", + "ctr", + "ed25519-dalek", + "generic-array 0.14.9", + "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-sphinx-types 0.2.0 (git+https://github.com/nymtech/nym?branch=develop)", + "serde", + "serde_bytes", + "subtle-encoding", + "thiserror 2.0.17", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-dkg" +version = "0.1.0" +dependencies = [ + "bitvec", + "bls12_381", + "bs58", + "criterion", + "ff", + "group", + "nym-contracts-common", + "nym-pemstore 0.3.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", + "serde_derive", + "sha2 0.10.9", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-ecash-contract-common" +version = "0.1.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "nym-multisig-contract-common 0.1.0", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-ecash-contract-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-ecash-signer-check" +version = "0.1.0" +dependencies = [ + "futures", + "nym-ecash-signer-check-types 0.1.0", + "nym-http-api-client", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "semver 1.0.27", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nym-ecash-signer-check-types" +version = "0.1.0" +dependencies = [ + "nym-coconut-dkg-common 0.1.0", + "nym-crypto 0.4.0", + "semver 1.0.27", + "serde", + "thiserror 2.0.17", + "time", + "tracing", + "url", + "utoipa", +] + +[[package]] +name = "nym-ecash-signer-check-types" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "semver 1.0.27", + "serde", + "thiserror 2.0.17", + "time", + "tracing", + "url", + "utoipa", +] + +[[package]] +name = "nym-ecash-time" +version = "0.1.0" +dependencies = [ + "nym-compact-ecash 0.1.0", + "time", +] + +[[package]] +name = "nym-ecash-time" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "time", +] + +[[package]] +name = "nym-exit-policy" +version = "0.1.0" +dependencies = [ + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "tracing", + "utoipa", +] + +[[package]] +name = "nym-exit-policy" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "serde", + "serde_json", + "thiserror 2.0.17", + "tracing", + "utoipa", +] + +[[package]] +name = "nym-ffi-shared" +version = "0.2.1" +dependencies = [ + "anyhow", + "bs58", + "lazy_static", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "tokio", + "uniffi", + "uniffi_build", +] + +[[package]] +name = "nym-gateway" +version = "1.1.36" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bip39", + "bs58", + "dashmap", + "defguard_wireguard_rs", + "fastrand 2.3.0", + "futures", + "ipnetwork 0.20.0", + "mock_instant", + "nym-api-requests 0.1.0", + "nym-authenticator-requests", + "nym-client-core", + "nym-credential-verification", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-gateway-stats-storage", + "nym-gateway-storage", + "nym-id", + "nym-ip-packet-router", + "nym-mixnet-client", + "nym-mixnode-common", + "nym-network-defaults 0.1.0", + "nym-network-requester", + "nym-node-metrics", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-types", + "nym-validator-client 0.1.0", + "nym-wireguard", + "nym-wireguard-private-metadata-server", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-gateway-client" +version = "0.1.0" +dependencies = [ + "futures", + "getrandom 0.2.16", + "gloo-utils 0.2.0", + "nym-bandwidth-controller", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-http-api-client", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "si-scale", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tracing", + "tungstenite 0.20.1", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-gateway-directory" +version = "0.0.0" +dependencies = [ + "itertools 0.14.0", + "nym-client-core", + "nym-common 1.17.0-beta", + "nym-crypto 0.4.0", + "nym-http-api-client", + "nym-network-defaults 0.1.0", + "nym-offline-monitor", + "nym-sphinx", + "nym-sphinx-addressing", + "nym-topology", + "nym-validator-client 0.1.0", + "nym-vpn-api-client", + "rand 0.8.5", + "serde", + "serde_json", + "strum", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-gateway-probe" +version = "1.18.0" +dependencies = [ + "anyhow", + "base64 0.22.1", + "bincode", + "bs58", + "bytes", + "clap", + "futures", + "hex", + "nym-authenticator-client", + "nym-authenticator-requests", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-config 0.1.0", + "nym-connection-monitor", + "nym-credential-utils", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-http-api-client", + "nym-http-api-client-macro", + "nym-ip-packet-client", + "nym-ip-packet-requests", + "nym-node-status-client", + "nym-sdk", + "nym-topology", + "nym-validator-client 0.1.0", + "pnet_packet", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "tracing-subscriber", + "url", + "vergen-gitcl", + "x25519-dalek", +] + +[[package]] +name = "nym-gateway-requests" +version = "0.1.0" +dependencies = [ + "anyhow", + "bs58", + "futures", + "generic-array 0.14.9", + "nym-compact-ecash 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-pemstore 0.3.0", + "nym-serde-helpers 0.1.0", + "nym-sphinx", + "nym-statistics-common", + "nym-task", + "nym-test-utils", + "rand 0.8.5", + "serde", + "serde_json", + "strum", + "subtle 2.6.1", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "tungstenite 0.20.1", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-gateway-stats-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "nym-node-metrics", + "nym-sphinx", + "nym-statistics-common", + "sqlx", + "strum", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-gateway-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "defguard_wireguard_rs", + "dyn-clone", + "nym-credentials-interface 0.1.0", + "nym-gateway-requests", + "nym-sphinx", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-go-ffi" +version = "0.2.2" +dependencies = [ + "anyhow", + "lazy_static", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-ffi-shared", + "nym-sdk", + "nym-sphinx-anonymous-replies", + "thiserror 2.0.17", + "tokio", + "uniffi", + "uniffi_build", +] + +[[package]] +name = "nym-group-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cw-controllers", + "cw4", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "nym-group-contract-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "cosmwasm-schema", + "cw-controllers", + "cw4", + "schemars 0.8.22", + "serde", +] + +[[package]] +name = "nym-http-api-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "bincode", + "bytes", + "cfg-if", + "encoding_rs", + "hickory-resolver", + "http 1.3.1", + "inventory", + "itertools 0.14.0", + "mime", + "nym-bin-common 0.6.0", + "nym-http-api-client-macro", + "nym-http-api-common", + "nym-network-defaults 0.1.0", + "once_cell", + "reqwest 0.12.24", + "serde", + "serde_json", + "serde_plain", + "serde_yaml", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", + "wasmtimer", +] + +[[package]] +name = "nym-http-api-client-macro" +version = "0.1.0" +dependencies = [ + "nym-http-api-client", + "proc-macro-crate", + "proc-macro2", + "quote", + "reqwest 0.12.24", + "syn 2.0.107", + "uuid", +] + +[[package]] +name = "nym-http-api-common" +version = "0.1.0" +dependencies = [ + "axum", + "axum-client-ip", + "bincode", + "bytes", + "colored", + "futures", + "mime", + "serde", + "serde_json", + "serde_yaml", + "subtle 2.6.1", + "time", + "tower 0.5.2", + "tracing", + "utoipa", + "zeroize", +] + +[[package]] +name = "nym-id" +version = "0.1.0" +dependencies = [ + "nym-credential-storage", + "nym-credentials 0.1.0", + "thiserror 2.0.17", + "time", + "tracing", + "zeroize", +] + +[[package]] +name = "nym-id-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "bs58", + "clap", + "nym-bin-common 0.6.0", + "nym-credential-storage", + "nym-id", + "tokio", + "tracing", +] + +[[package]] +name = "nym-inclusion-probability" +version = "0.1.0" +dependencies = [ + "log", + "rand 0.8.5", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-ip-packet-client" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "futures", + "nym-ip-packet-requests", + "nym-sdk", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-ip-packet-requests" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-service-provider-requests-common", + "nym-sphinx", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "nym-ip-packet-router" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bs58", + "bytes", + "clap", + "etherparse", + "futures", + "log", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-exit-policy 0.1.0", + "nym-id", + "nym-ip-packet-requests", + "nym-network-defaults 0.1.0", + "nym-network-requester", + "nym-sdk", + "nym-service-provider-requests-common", + "nym-service-providers-common", + "nym-sphinx", + "nym-task", + "nym-tun", + "nym-types", + "nym-wireguard", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tun", + "tokio-util", + "url", +] + +[[package]] +name = "nym-ledger" +version = "0.1.0" +dependencies = [ + "bip32", + "k256", + "ledger-transport", + "ledger-transport-hid", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-metrics" +version = "0.1.0" +dependencies = [ + "dashmap", + "lazy_static", + "prometheus", + "tracing", +] + +[[package]] +name = "nym-mixnet-client" +version = "0.1.0" +dependencies = [ + "dashmap", + "futures", + "nym-crypto 0.4.0", + "nym-noise", + "nym-sphinx", + "nym-task", + "rand 0.8.5", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-mixnet-contract-common" +version = "0.6.0" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-storage-plus", + "cw2", + "humantime-serde", + "nym-contracts-common", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "serde_repr", + "thiserror 2.0.17", + "time", + "ts-rs", + "utoipa", +] + +[[package]] +name = "nym-mixnet-contract-common" +version = "0.6.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "bs58", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-storage-plus", + "humantime-serde", + "nym-contracts-common", + "schemars 0.8.22", + "semver 1.0.27", + "serde", + "serde_repr", + "thiserror 2.0.17", + "time", + "utoipa", +] + +[[package]] +name = "nym-mixnode-common" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "humantime-serde", + "log", + "nym-crypto 0.4.0", + "nym-metrics", + "nym-network-defaults 0.1.0", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-types 0.2.0", + "nym-task", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "nym-multisig-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "cw3", + "cw4", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-multisig-contract-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "cw3", + "cw4", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-network-defaults" +version = "0.1.0" +dependencies = [ + "cargo_metadata 0.19.2", + "dotenvy", + "log", + "regex", + "schemars 0.8.22", + "serde", + "url", + "utoipa", +] + +[[package]] +name = "nym-network-defaults" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "cargo_metadata 0.19.2", + "dotenvy", + "log", + "regex", + "schemars 0.8.22", + "serde", + "url", + "utoipa", +] + +[[package]] +name = "nym-network-monitor" +version = "1.0.2" +dependencies = [ + "anyhow", + "axum", + "clap", + "dashmap", + "futures", + "log", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-http-api-client", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-sdk", + "nym-sphinx", + "nym-topology", + "nym-types", + "nym-validator-client 0.1.0", + "petgraph", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.24", + "serde", + "serde_json", + "tokio", + "tokio-postgres", + "tokio-util", + "utoipa", + "utoipa-swagger-ui", +] + +[[package]] +name = "nym-network-requester" +version = "1.1.65" +dependencies = [ + "addr", + "anyhow", + "async-trait", + "bs58", + "clap", + "dirs", + "futures", + "humantime-serde", + "ipnetwork 0.20.0", + "log", + "nym-async-file-watcher", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-client-websocket-requests", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-exit-policy 0.1.0", + "nym-id", + "nym-network-defaults 0.1.0", + "nym-ordered-buffer", + "nym-sdk", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", + "nym-sphinx", + "nym-task", + "nym-types", + "publicsuffix", + "rand 0.8.5", + "regex", + "reqwest 0.12.24", + "serde", + "serde_json", + "sqlx", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-tungstenite", + "tokio-util", + "url", + "zeroize", +] + +[[package]] +name = "nym-node" +version = "1.19.0" +dependencies = [ + "anyhow", + "arc-swap", + "arrayref", + "async-trait", + "axum", + "bip39", + "blake2 0.8.1", + "bloomfilter", + "bs58", + "cargo_metadata 0.19.2", + "celes", + "cfg-if", + "chacha", + "clap", + "colored", + "console-subscriber", + "criterion", + "csv", + "cupid", + "futures", + "hkdf", + "human-repr", + "humantime-serde", + "indicatif", + "ipnetwork 0.20.0", + "lioness", + "nym-bin-common 0.6.0", + "nym-client-core-config-types", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway", + "nym-gateway-stats-storage", + "nym-http-api-client", + "nym-http-api-common", + "nym-ip-packet-router", + "nym-metrics", + "nym-mixnet-client", + "nym-network-requester", + "nym-node-metrics", + "nym-node-requests 0.1.0", + "nym-noise", + "nym-noise-keys 0.1.0", + "nym-nonexhaustive-delayqueue", + "nym-pemstore 0.3.0", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-types", + "nym-validator-client 0.1.0", + "nym-verloc", + "nym-wireguard", + "nym-wireguard-types 0.1.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "sha2 0.10.9", + "sysinfo", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "toml 0.8.23", + "tower-http 0.5.2", + "tracing", + "tracing-indicatif", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "zeroize", +] + +[[package]] +name = "nym-node-metrics" +version = "0.1.0" +dependencies = [ + "dashmap", + "futures", + "nym-metrics", + "nym-statistics-common", + "strum", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "nym-node-requests" +version = "0.1.0" +dependencies = [ + "async-trait", + "celes", + "humantime", + "humantime-serde", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-exit-policy 0.1.0", + "nym-http-api-client", + "nym-noise-keys 0.1.0", + "nym-wireguard-types 0.1.0", + "rand_chacha 0.3.1", + "schemars 0.8.22", + "serde", + "serde_json", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", + "time", + "tokio", + "utoipa", +] + +[[package]] +name = "nym-node-requests" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "celes", + "humantime", + "humantime-serde", + "nym-bin-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-exit-policy 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-noise-keys 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-wireguard-types 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "schemars 0.8.22", + "serde", + "serde_json", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", + "time", + "utoipa", +] + +[[package]] +name = "nym-node-status-agent" +version = "1.0.7" +dependencies = [ + "anyhow", + "clap", + "futures", + "nym-bin-common 0.6.0", + "nym-crypto 0.4.0", + "nym-node-status-client", + "rand 0.8.5", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "nym-node-status-api" +version = "4.0.10" +dependencies = [ + "ammonia", + "anyhow", + "axum", + "axum-test", + "bip39", + "bs58", + "celes", + "clap", + "cosmwasm-std", + "futures-util", + "humantime", + "itertools 0.14.0", + "moka", + "nym-bin-common 0.6.0", + "nym-contracts-common", + "nym-credential-proxy-lib", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "nym-http-api-client", + "nym-http-api-common", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-node-metrics", + "nym-node-requests 0.1.0", + "nym-node-status-client", + "nym-serde-helpers 0.1.0", + "nym-statistics-common", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "regex", + "reqwest 0.12.24", + "semver 1.0.27", + "serde", + "serde_json", + "serde_json_path", + "sqlx", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-log 0.2.0", + "tracing-subscriber", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", + "zeroize", +] + +[[package]] +name = "nym-node-status-client" +version = "0.2.0" +dependencies = [ + "anyhow", + "bincode", + "bs58", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "reqwest 0.12.24", + "serde", + "serde_json", + "time", + "tracing", +] + +[[package]] +name = "nym-node-tester-utils" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "nym-crypto 0.4.0", + "nym-sphinx", + "nym-sphinx-params", + "nym-task", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "wasm-utils", +] + +[[package]] +name = "nym-node-tester-wasm" +version = "1.3.0-rc.0" +dependencies = [ + "futures", + "js-sys", + "nym-node-tester-utils", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "tokio", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-client-core", + "wasm-utils", + "wasmtimer", +] + +[[package]] +name = "nym-noise" +version = "0.1.0" +dependencies = [ + "anyhow", + "arc-swap", + "bytes", + "futures", + "nym-crypto 0.4.0", + "nym-noise-keys 0.1.0", + "nym-test-utils", + "pin-project", + "rand_chacha 0.3.1", + "sha2 0.10.9", + "snow", + "strum", + "strum_macros 0.27.2", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-noise-keys" +version = "0.1.0" +dependencies = [ + "nym-crypto 0.4.0", + "schemars 0.8.22", + "serde", + "utoipa", +] + +[[package]] +name = "nym-noise-keys" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "schemars 0.8.22", + "serde", + "utoipa", +] + +[[package]] +name = "nym-nonexhaustive-delayqueue" +version = "0.1.0" +dependencies = [ + "tokio", + "tokio-stream", + "tokio-util", + "wasmtimer", +] + +[[package]] +name = "nym-nr-query" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "log", + "nym-bin-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-sdk", + "nym-service-providers-common", + "nym-socks5-requests", + "serde", + "tokio", +] + +[[package]] +name = "nym-offline-monitor" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" +dependencies = [ + "async-trait", + "debounced", + "dispatch2", + "futures", + "nym-apple-network", + "nym-common 1.17.0-beta", + "nym-routing", + "nym-windows", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-ordered-buffer" +version = "0.1.0" +dependencies = [ + "log", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-outfox" +version = "0.1.0" +dependencies = [ + "blake3", + "chacha20", + "chacha20poly1305", + "criterion", + "fastrand 2.3.0", + "getrandom 0.2.16", + "log", + "rand 0.8.5", + "rayon", + "sphinx-packet", + "thiserror 2.0.17", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "nym-pemstore" +version = "0.3.0" +dependencies = [ + "pem", + "tracing", + "zeroize", +] + +[[package]] +name = "nym-pemstore" +version = "0.3.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "pem", + "tracing", + "zeroize", +] + +[[package]] +name = "nym-performance-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "nym-contracts-common", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-performance-contract-common" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "nym-contracts-common", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-pool-contract-common" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", + "time", +] + +[[package]] +name = "nym-registration-client" +version = "0.1.0" +dependencies = [ + "futures", + "nym-authenticator-client", + "nym-bandwidth-controller", + "nym-credential-storage", + "nym-credentials-interface 0.1.0", + "nym-ip-packet-client", + "nym-registration-common", + "nym-sdk", + "nym-validator-client 0.1.0", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-registration-common" +version = "0.1.0" +dependencies = [ + "nym-authenticator-requests", + "nym-crypto 0.4.0", + "nym-ip-packet-requests", + "nym-sphinx", + "tokio-util", +] + +[[package]] +name = "nym-routing" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" +dependencies = [ + "bitflags 2.10.0", + "futures", + "ipnetwork 0.21.1", + "libc", + "netlink-packet-core 0.8.1", + "netlink-packet-route 0.25.1", + "netlink-sys", + "nix 0.30.1", + "nym-common 1.17.0-beta", + "nym-windows", + "rtnetlink", + "system-configuration 0.6.1", + "thiserror 2.0.17", + "tokio", + "tracing", + "widestring", + "windows", +] + +[[package]] +name = "nym-sdk" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bip39", + "bytecodec", + "bytes", + "clap", + "dashmap", + "dirs", + "dotenvy", + "futures", + "hex", + "http 1.3.1", + "httpcodec", + "log", + "nym-bandwidth-controller", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credential-utils", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-directory", + "nym-gateway-requests", + "nym-http-api-client", + "nym-ip-packet-requests", + "nym-network-defaults 0.1.0", + "nym-ordered-buffer", + "nym-service-providers-common", + "nym-socks5-client-core", + "nym-socks5-requests", + "nym-sphinx", + "nym-sphinx-addressing", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client 0.1.0", + "nym-vpn-api-client", + "parking_lot", + "pnet_packet", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "tap", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "toml 0.8.23", + "tracing", + "tracing-subscriber", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "nym-serde-helpers" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "bs58", + "hex", + "serde", + "time", +] + +[[package]] +name = "nym-serde-helpers" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "base64 0.22.1", + "bs58", + "hex", + "serde", + "time", +] + +[[package]] +name = "nym-service-provider-requests-common" +version = "0.1.0" +dependencies = [ + "bincode", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-service-providers-common" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "log", + "nym-bin-common 0.6.0", + "nym-sdk", + "nym-socks5-requests", + "nym-sphinx-anonymous-replies", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", +] + +[[package]] +name = "nym-signers-monitor" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "humantime", + "itertools 0.14.0", + "nym-bin-common 0.6.0", + "nym-ecash-signer-check", + "nym-network-defaults 0.1.0", + "nym-task", + "nym-validator-client 0.1.0", + "time", + "tokio", + "tracing", + "url", + "zulip-client", +] + +[[package]] +name = "nym-socks5-client" +version = "1.1.64" +dependencies = [ + "bs58", + "clap", + "log", + "nym-bin-common 0.6.0", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-id", + "nym-network-defaults 0.1.0", + "nym-ordered-buffer", + "nym-pemstore 0.3.0", + "nym-socks5-client-core", + "nym-sphinx", + "nym-topology", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", + "time", + "tokio", + "url", + "zeroize", +] + +[[package]] +name = "nym-socks5-client-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "dirs", + "futures", + "log", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credential-storage", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-service-providers-common", + "nym-socks5-proxy-helpers", + "nym-socks5-requests", + "nym-sphinx", + "nym-task", + "nym-validator-client 0.1.0", + "pin-project", + "rand 0.8.5", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "tap", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "nym-socks5-proxy-helpers" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "log", + "nym-ordered-buffer", + "nym-socks5-requests", + "nym-task", + "tokio", + "tokio-test", + "tokio-util", +] + +[[package]] +name = "nym-socks5-requests" +version = "0.1.0" +dependencies = [ + "bincode", + "log", + "nym-exit-policy 0.1.0", + "nym-service-providers-common", + "nym-sphinx-addressing", + "serde", + "serde_json", + "tap", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx" +version = "0.1.0" +dependencies = [ + "bincode", + "log", + "nym-crypto 0.4.0", + "nym-metrics", + "nym-mixnet-contract-common 0.6.0", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-anonymous-replies", + "nym-sphinx-chunking", + "nym-sphinx-cover", + "nym-sphinx-forwarding", + "nym-sphinx-framing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "serde", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-sphinx-acknowledgements" +version = "0.1.0" +dependencies = [ + "generic-array 0.14.9", + "nym-crypto 0.4.0", + "nym-pemstore 0.3.0", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-topology", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-sphinx-addressing" +version = "0.1.0" +dependencies = [ + "bincode", + "nym-crypto 0.4.0", + "nym-sphinx-types 0.2.0", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-anonymous-replies" +version = "0.1.0" +dependencies = [ + "bs58", + "nym-crypto 0.4.0", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-topology", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "thiserror 2.0.17", + "tracing", + "wasm-bindgen", +] + +[[package]] +name = "nym-sphinx-chunking" +version = "0.1.0" +dependencies = [ + "dashmap", + "log", + "nym-crypto 0.4.0", + "nym-metrics", + "nym-sphinx-addressing", + "nym-sphinx-params", + "nym-sphinx-types 0.2.0", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "utoipa", + "wasmtimer", +] + +[[package]] +name = "nym-sphinx-cover" +version = "0.1.0" +dependencies = [ + "nym-crypto 0.4.0", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-chunking", + "nym-sphinx-forwarding", + "nym-sphinx-params", + "nym-sphinx-routing", + "nym-sphinx-types 0.2.0", + "nym-topology", + "rand 0.8.5", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-forwarding" +version = "0.1.0" +dependencies = [ + "nym-sphinx-addressing", + "nym-sphinx-anonymous-replies", + "nym-sphinx-params", + "nym-sphinx-types 0.2.0", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-framing" +version = "0.1.0" +dependencies = [ + "bytes", + "nym-sphinx-acknowledgements", + "nym-sphinx-addressing", + "nym-sphinx-forwarding", + "nym-sphinx-params", + "nym-sphinx-types 0.2.0", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "nym-sphinx-params" +version = "0.1.0" +dependencies = [ + "nym-crypto 0.4.0", + "nym-sphinx-types 0.2.0", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-routing" +version = "0.1.0" +dependencies = [ + "nym-sphinx-addressing", + "nym-sphinx-types 0.2.0", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-types" +version = "0.2.0" +dependencies = [ + "nym-outfox", + "sphinx-packet", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-sphinx-types" +version = "0.2.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "thiserror 2.0.17", +] + +[[package]] +name = "nym-statistics-api" +version = "0.2.1" +dependencies = [ + "anyhow", + "axum", + "axum-client-ip", + "axum-extra", + "celes", + "clap", + "nym-bin-common 0.6.0", + "nym-http-api-client", + "nym-http-api-common", + "nym-statistics-common", + "nym-task", + "nym-validator-client 0.1.0", + "serde", + "serde_json", + "sqlx", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "url", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nym-statistics-common" +version = "0.1.0" +dependencies = [ + "futures", + "log", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-metrics", + "nym-sphinx", + "nym-task", + "serde", + "serde_json", + "sha2 0.10.9", + "si-scale", + "strum", + "strum_macros 0.27.2", + "sysinfo", + "thiserror 2.0.17", + "time", + "tokio", + "utoipa", + "wasmtimer", +] + +[[package]] +name = "nym-store-cipher" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "argon2", + "generic-array 0.14.9", + "getrandom 0.2.16", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "nym-task" +version = "0.1.0" +dependencies = [ + "anyhow", + "cfg-if", + "futures", + "log", + "nym-test-utils", + "serde", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasmtimer", +] + +[[package]] +name = "nym-test-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "futures", + "rand_chacha 0.3.1", + "tokio", +] + +[[package]] +name = "nym-ticketbooks-merkle" +version = "0.1.0" +dependencies = [ + "nym-credentials-interface 0.1.0", + "nym-serde-helpers 0.1.0", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rs_merkle", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "time", + "utoipa", +] + +[[package]] +name = "nym-ticketbooks-merkle" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "rs_merkle", + "schemars 0.8.22", + "serde", + "sha2 0.10.9", + "time", + "utoipa", +] + +[[package]] +name = "nym-topology" +version = "0.1.0" +dependencies = [ + "async-trait", + "nym-api-requests 0.1.0", + "nym-crypto 0.4.0", + "nym-mixnet-contract-common 0.6.0", + "nym-sphinx-addressing", + "nym-sphinx-types 0.2.0", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tracing", + "tsify", + "wasm-bindgen", + "wasm-utils", +] + +[[package]] +name = "nym-tun" +version = "0.1.0" +dependencies = [ + "etherparse", + "log", + "nym-wireguard-types 0.1.0", + "thiserror 2.0.17", + "tokio", + "tokio-tun", +] + +[[package]] +name = "nym-types" +version = "1.0.0" +dependencies = [ + "base64 0.22.1", + "cosmrs", + "cosmwasm-std", + "eyre", + "hmac", + "itertools 0.14.0", + "log", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-mixnet-contract-common 0.6.0", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "serde_json", + "sha2 0.10.9", + "strum", + "strum_macros 0.27.2", + "tempfile", + "thiserror 2.0.17", + "ts-rs", + "url", + "utoipa", + "x25519-dalek", +] + +[[package]] +name = "nym-upgrade-mode-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "jwt-simple", + "nym-crypto 0.4.0", + "nym-http-api-client", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "time", + "tracing", +] + +[[package]] +name = "nym-validator-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bip32", + "bip39", + "colored", + "cosmrs", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "cw3", + "cw4", + "eyre", + "flate2", + "futures", + "itertools 0.14.0", + "nym-api-requests 0.1.0", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-ecash-contract-common 0.1.0", + "nym-group-contract-common 0.1.0", + "nym-http-api-client", + "nym-mixnet-contract-common 0.6.0", + "nym-multisig-contract-common 0.1.0", + "nym-network-defaults 0.1.0", + "nym-performance-contract-common 0.1.0", + "nym-serde-helpers 0.1.0", + "nym-vesting-contract-common 0.7.0", + "prost", + "reqwest 0.12.24", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "ts-rs", + "url", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-validator-client" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bip32", + "bip39", + "colored", + "cosmrs", + "cosmwasm-std", + "cw-controllers", + "cw-utils", + "cw2", + "cw3", + "cw4", + "eyre", + "flate2", + "futures", + "itertools 0.14.0", + "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-contracts-common", + "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-group-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-http-api-client", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-performance-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-vesting-contract-common 0.7.0 (git+https://github.com/nymtech/nym?branch=develop)", + "prost", + "reqwest 0.12.24", + "serde", + "serde_json", + "sha2 0.10.9", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "nym-validator-rewarder" +version = "0.3.0" +dependencies = [ + "anyhow", + "bip39", + "clap", + "cosmwasm-std", + "futures", + "humantime", + "humantime-serde", + "nym-bin-common 0.6.0", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "nym-http-api-client", + "nym-network-defaults 0.1.0", + "nym-pemstore 0.3.0", + "nym-serde-helpers 0.1.0", + "nym-task", + "nym-ticketbooks-merkle 0.1.0", + "nym-validator-client 0.1.0", + "nyxd-scraper", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "serde_with", + "sha2 0.10.9", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-verloc" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "humantime", + "nym-api-requests 0.1.0", + "nym-crypto 0.4.0", + "nym-http-api-client", + "nym-task", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "nym-vesting-contract-common" +version = "0.7.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "nym-contracts-common", + "nym-mixnet-contract-common 0.6.0", + "serde", + "thiserror 2.0.17", + "ts-rs", +] + +[[package]] +name = "nym-vesting-contract-common" +version = "0.7.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "nym-contracts-common", + "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "nym-vpn-api-client" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" +dependencies = [ + "backon", + "base64-url", + "bip39", + "bs58", + "chrono", + "itertools 0.13.0", + "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-contracts-common", + "nym-credential-proxy-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-http-api-client", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "serde", + "serde_json", + "sha2 0.10.9", + "strum", + "strum_macros 0.26.4", + "thiserror 2.0.17", + "time", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "nym-vpn-api-lib-wasm" +version = "0.1.0" +dependencies = [ + "bs58", + "getrandom 0.2.16", + "js-sys", + "nym-bin-common 0.6.0", + "nym-compact-ecash 0.1.0", + "nym-credential-proxy-requests 0.1.0", + "nym-credentials 0.1.0", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-ecash-time 0.1.0", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_json", + "thiserror 2.0.17", + "time", + "tsify", + "wasm-bindgen", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "nym-wallet-types" +version = "1.0.0" +dependencies = [ + "cosmrs", + "cosmwasm-std", + "hex-literal", + "nym-config 0.1.0", + "nym-mixnet-contract-common 0.6.0", + "nym-network-defaults 0.1.0", + "nym-types", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "serde", + "serde_json", + "strum", + "strum_macros 0.27.2", + "ts-rs", +] + +[[package]] +name = "nym-windows" +version = "1.17.0-beta" +source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" +dependencies = [ + "bitflags 2.10.0", + "futures", + "thiserror 2.0.17", + "tokio", + "tracing", + "windows", +] + +[[package]] +name = "nym-wireguard" +version = "0.1.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bincode", + "chrono", + "dashmap", + "defguard_wireguard_rs", + "dyn-clone", + "futures", + "ip_network", + "log", + "nym-authenticator-requests", + "nym-credential-verification", + "nym-credentials-interface 0.1.0", + "nym-crypto 0.4.0", + "nym-gateway-requests", + "nym-gateway-storage", + "nym-network-defaults 0.1.0", + "nym-node-metrics", + "nym-task", + "nym-wireguard-types 0.1.0", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tracing", + "x25519-dalek", +] + +[[package]] +name = "nym-wireguard-private-metadata-client" +version = "1.0.0" +dependencies = [ + "async-trait", + "nym-http-api-client", + "nym-wireguard-private-metadata-shared", + "tracing", +] + +[[package]] +name = "nym-wireguard-private-metadata-server" +version = "1.0.0" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "futures", + "nym-credential-verification", + "nym-credentials-interface 0.1.0", + "nym-http-api-common", + "nym-wireguard", + "nym-wireguard-private-metadata-shared", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "utoipa", + "utoipa-swagger-ui", +] + +[[package]] +name = "nym-wireguard-private-metadata-shared" +version = "1.0.0" +dependencies = [ + "axum", + "bincode", + "nym-credentials-interface 0.1.0", + "schemars 0.8.22", + "serde", + "thiserror 2.0.17", + "utoipa", +] + +[[package]] +name = "nym-wireguard-private-metadata-tests" +version = "1.0.0" +dependencies = [ + "async-trait", + "axum", + "nym-credential-verification", + "nym-credentials-interface 0.1.0", + "nym-http-api-client", + "nym-http-api-common", + "nym-wireguard", + "nym-wireguard-private-metadata-client", + "nym-wireguard-private-metadata-server", + "nym-wireguard-private-metadata-shared", + "tokio", + "tower-http 0.5.2", + "utoipa", +] + +[[package]] +name = "nym-wireguard-types" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "log", + "nym-config 0.1.0", + "nym-crypto 0.4.0", + "nym-network-defaults 0.1.0", + "rand 0.8.5", + "serde", + "thiserror 2.0.17", + "x25519-dalek", +] + +[[package]] +name = "nym-wireguard-types" +version = "0.1.0" +source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +dependencies = [ + "base64 0.22.1", + "log", + "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "serde", + "thiserror 2.0.17", + "x25519-dalek", +] + +[[package]] +name = "nymvisor" +version = "0.1.29" +dependencies = [ + "anyhow", + "bytes", + "clap", + "dotenvy", + "flate2", + "futures", + "hex", + "humantime", + "humantime-serde", + "nix 0.27.1", + "nym-async-file-watcher", + "nym-bin-common 0.6.0", + "nym-config 0.1.0", + "nym-task", + "reqwest 0.12.24", + "serde", + "serde_json", + "sha2 0.10.9", + "tar", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "nyx-chain-watcher" +version = "0.1.14" +dependencies = [ + "anyhow", + "async-trait", + "axum", + "chrono", + "clap", + "nym-bin-common 0.6.0", + "nym-config 0.1.0", + "nym-network-defaults 0.1.0", + "nym-task", + "nym-validator-client 0.1.0", + "nyxd-scraper", + "reqwest 0.12.24", + "schemars 0.8.22", + "serde", + "sqlx", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-util", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "utoipa", + "utoipa-swagger-ui", + "utoipauto", +] + +[[package]] +name = "nyxd-scraper" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "const_format", + "cosmrs", + "eyre", + "futures", + "humantime", + "serde", + "sha2 0.10.9", + "sqlx", + "tendermint", + "tendermint-rpc", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.10.0", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.10.0", + "block2", + "libc", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "libc", + "objc2-core-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "critical-section", + "portable-atomic", +] + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[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.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.110" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-http" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" +dependencies = [ + "async-trait", + "bytes", + "http 0.2.12", + "isahc", + "opentelemetry_api", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "http 0.2.12", + "isahc", + "once_cell", + "opentelemetry", + "opentelemetry-http", + "opentelemetry-semantic-conventions", + "thiserror 1.0.69", + "thrift", + "tokio", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "once_cell", + "pin-project-lite", + "thiserror 1.0.69", + "urlencoding", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand 0.8.5", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "peg" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9928cfca101b36ec5163e70049ee5368a8a1c3c6efc9ca9c5f9cc2f816152477" +dependencies = [ + "peg-macros", + "peg-runtime", +] + +[[package]] +name = "peg-macros" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6298ab04c202fa5b5d52ba03269fb7b74550b150323038878fe6c372d8280f71" +dependencies = [ + "peg-runtime", + "proc-macro2", + "quote", +] + +[[package]] +name = "peg-runtime" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "132dca9b868d927b35b5dd728167b2dee150eb1ad686008fc71ccb298b776fca" + +[[package]] +name = "pem" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +dependencies = [ + "base64 0.13.1", + "once_cell", + "regex", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pest" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "pest_meta" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" +dependencies = [ + "pest", + "sha2 0.10.9", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.12.0", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "plotters" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" + +[[package]] +name = "plotters-svg" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "pnet_base" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" +dependencies = [ + "no-std-net", +] + +[[package]] +name = "pnet_macros" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.107", +] + +[[package]] +name = "pnet_macros_support" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" +dependencies = [ + "pnet_base", +] + +[[package]] +name = "pnet_packet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" +dependencies = [ + "glob", + "pnet_base", + "pnet_macros", + "pnet_macros_support", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[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 0.3.1", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "postgres-protocol" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes", + "fallible-iterator", + "hmac", + "md-5", + "memchr", + "rand 0.9.2", + "sha2 0.10.9", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" +dependencies = [ + "bytes", + "fallible-iterator", + "postgres-protocol", +] + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc_pidinfo" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" +dependencies = [ + "libc", +] + +[[package]] +name = "prometheus" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror 2.0.17", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "prost-types" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" +dependencies = [ + "once_cell", + "protobuf-support", + "thiserror 1.0.69", +] + +[[package]] +name = "protobuf-support" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" +dependencies = [ + "thiserror 1.0.69", +] + +[[package]] +name = "psl" +version = "2.1.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd2e88c2c28854abe53489ce679f9dad712e2ac01a342dbeccae851cf0654d9" +dependencies = [ + "psl-types", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.33", + "socket2 0.6.1", + "thiserror 2.0.17", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash", + "rustls 0.23.33", + "rustls-pki-types", + "slab", + "thiserror 2.0.17", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.6.1", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.10.0", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.17", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +dependencies = [ + "async-compression", + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-rustls 0.27.7", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.33", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "tower 0.5.2", + "tower-http 0.6.6", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots 1.0.3", +] + +[[package]] +name = "reserve-port" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21918d6644020c6f6ef1993242989bf6d4952d2e025617744f184c02df51c356" +dependencies = [ + "thiserror 2.0.17", +] + +[[package]] +name = "resolv-conf" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle 2.6.1", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rs_merkle" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" +dependencies = [ + "sha2 0.10.9", +] + +[[package]] +name = "rsa" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "sha2 0.10.9", + "signature", + "spki", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rtnetlink" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08fd15aa4c64c34d0b3178e45ec6dad313a9f02b193376d501668a7950264bb7" +dependencies = [ + "futures", + "log", + "netlink-packet-core 0.8.1", + "netlink-packet-route 0.25.1", + "netlink-proto", + "netlink-sys", + "nix 0.29.0", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "rust-embed" +version = "8.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb44e1917075637ee8c7bcb865cf8830e3a92b5b1189e44e3a0ab5a0d5be314b" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382499b49db77a7c19abd2a574f85ada7e9dbe125d5d1160fa5cad7c4cf71fc9" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.107", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21fcbee55c2458836bcdbfffb6ec9ba74bbc23ca7aa6816015a3dd2c4d8fc185" +dependencies = [ + "sha2 0.10.9", + "walkdir", +] + +[[package]] +name = "rust-multipart-rfc7578_2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" +dependencies = [ + "bytes", + "futures-core", + "futures-util", + "http 0.2.12", + "mime", + "mime_guess", + "rand 0.8.5", + "thiserror 1.0.69", +] + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.103.7", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals 0.29.1", + "syn 2.0.107", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sealed" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.9", + "pkcs8", + "serdect 0.2.0", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" +dependencies = [ + "cc", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.10.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "serde_derive_internals" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_json_path" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b992cea3194eea663ba99a042d61cea4bd1872da37021af56f6a37e0359b9d33" +dependencies = [ + "inventory", + "nom", + "regex", + "serde", + "serde_json", + "serde_json_path_core", + "serde_json_path_macros", + "thiserror 2.0.17", +] + +[[package]] +name = "serde_json_path_core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde67d8dfe7d4967b5a95e247d4148368ddd1e753e500adb34b3ffe40c6bc1bc" +dependencies = [ + "inventory", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "serde_json_path_macros" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "517acfa7f77ddaf5c43d5f119c44a683774e130b4247b7d3210f8924506cfac8" +dependencies = [ + "inventory", + "serde_json_path_core", + "serde_json_path_macros_internal", +] + +[[package]] +name = "serde_json_path_macros_internal" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[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", +] + +[[package]] +name = "serde_plain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.12.0", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.12.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "serdect" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "si-scale" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio 0.8.11", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "smoltcp" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "cfg-if", + "defmt 0.3.100", + "heapless", + "managed", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2 0.10.6", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "rustc_version 0.4.1", + "sha2 0.10.9", + "subtle 2.6.1", +] + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "sphinx-packet" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" +dependencies = [ + "aes", + "arrayref", + "blake2 0.8.1", + "bs58", + "byteorder", + "chacha", + "ctr", + "curve25519-dalek", + "digest 0.10.7", + "hkdf", + "hmac", + "lioness", + "rand 0.8.5", + "rand_distr", + "sha2 0.10.9", + "subtle 2.6.1", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlx" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +dependencies = [ + "base64 0.22.1", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.4.1", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.15.5", + "hashlink", + "indexmap 2.12.0", + "log", + "memchr", + "once_cell", + "percent-encoding", + "rustls 0.23.33", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "thiserror 2.0.17", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.107", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.107", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.10.0", + "byteorder", + "bytes", + "chrono", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array 0.14.9", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.17", + "time", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-pool-guard" +version = "0.1.0" +dependencies = [ + "proc_pidinfo", + "sqlx", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", + "windows", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.10.0", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.17", + "time", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "thiserror 2.0.17", + "time", + "tracing", + "url", +] + +[[package]] +name = "ssl-inject" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "hex", + "tokio", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros 0.27.2", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.107", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "subtle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "superboring" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "515cce34a781d7250b8a65706e0f2a5b99236ea605cb235d4baed6685820478f" +dependencies = [ + "getrandom 0.2.16", + "hmac-sha256", + "hmac-sha512", + "rand 0.8.5", + "rsa", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "sysinfo" +version = "0.37.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "objc2-io-kit", + "windows", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.10.0", + "core-foundation", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand 2.3.0", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendermint" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" +dependencies = [ + "bytes", + "digest 0.10.7", + "ed25519", + "ed25519-consensus", + "flex-error", + "futures", + "k256", + "num-traits", + "once_cell", + "prost", + "ripemd", + "serde", + "serde_bytes", + "serde_json", + "serde_repr", + "sha2 0.10.9", + "signature", + "subtle 2.6.1", + "subtle-encoding", + "tendermint-proto", + "time", + "zeroize", +] + +[[package]] +name = "tendermint-config" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" +dependencies = [ + "flex-error", + "serde", + "serde_json", + "tendermint", + "toml 0.8.23", + "url", +] + +[[package]] +name = "tendermint-proto" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" +dependencies = [ + "bytes", + "flex-error", + "prost", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "tendermint-rpc" +version = "0.40.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" +dependencies = [ + "async-trait", + "async-tungstenite", + "bytes", + "flex-error", + "futures", + "getrandom 0.2.16", + "peg", + "pin-project", + "rand 0.8.5", + "reqwest 0.11.27", + "semver 1.0.27", + "serde", + "serde_bytes", + "serde_json", + "subtle 2.6.1", + "subtle-encoding", + "tendermint", + "tendermint-config", + "tendermint-proto", + "thiserror 1.0.69", + "time", + "tokio", + "tracing", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "test-with" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f370b9efbfbbc5f057cbce9888373eaeb146a3095bb8cc869b199c94d15559" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "regex", + "syn 2.0.107", +] + +[[package]] +name = "testnet-manager" +version = "0.1.0" +dependencies = [ + "anyhow", + "bip39", + "bs58", + "clap", + "console", + "cw-utils", + "dkg-bypass-contract", + "humantime", + "indicatif", + "nym-bin-common 0.6.0", + "nym-coconut-dkg-common 0.1.0", + "nym-compact-ecash 0.1.0", + "nym-config 0.1.0", + "nym-contracts-common", + "nym-crypto 0.4.0", + "nym-ecash-contract-common 0.1.0", + "nym-group-contract-common 0.1.0", + "nym-http-api-client", + "nym-mixnet-contract-common 0.6.0", + "nym-multisig-contract-common 0.1.0", + "nym-pemstore 0.3.0", + "nym-performance-contract-common 0.1.0", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "rand 0.8.5", + "serde", + "serde_json", + "sqlx", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "toml 0.8.23", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "textwrap" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" +dependencies = [ + "smawk", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "js-sys", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio 1.1.0", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.1", + "tokio-macros", + "tracing", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf 0.13.1", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "rand 0.9.2", + "socket2 0.6.1", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls 0.23.33", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-tun" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5381752d5832fc811f89d54fc334951aa435022f494190ba7151661f206df" +dependencies = [ + "libc", + "nix 0.29.0", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", + "webpki-roots 0.25.4", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "futures-util", + "pin-project-lite", + "slab", + "tokio", +] + +[[package]] +name = "tokio_with_wasm" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dfba9b946459940fb564dcf576631074cdfb0bfe4c962acd4c31f0dca7897e6" +dependencies = [ + "js-sys", + "tokio", + "tokio_with_wasm_proc", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "tokio_with_wasm_proc" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e04c1865c281139e5ccf633cb9f76ffdaabeebfe53b703984cf82878e2aabb" +dependencies = [ + "quote", + "syn 2.0.107", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap 2.12.0", + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.12.0", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.22.1", + "bytes", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "socket2 0.5.10", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "async-compression", + "bitflags 2.10.0", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.10.0", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "iri-string", + "pin-project-lite", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-indicatif" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d4e11e0e27acef25a47f27e9435355fecdc488867fa2bc90e75b0700d2823d" +dependencies = [ + "indicatif", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "matchers", + "nu-ansi-term 0.50.3", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote", + "syn 2.0.107", +] + +[[package]] +name = "tracing-tree" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ec6adcab41b1391b08a308cc6302b79f8095d1673f6947c2dc65ffb028b0b2d" +dependencies = [ + "nu-ansi-term 0.46.0", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "trackable" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" +dependencies = [ + "trackable 1.3.0", + "trackable_derive", +] + +[[package]] +name = "trackable" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" +dependencies = [ + "trackable_derive", +] + +[[package]] +name = "trackable_derive" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "ts-rs" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e640d9b0964e9d39df633548591090ab92f7a4567bc31d3891af23471a3365c6" +dependencies = [ + "lazy_static", + "thiserror 2.0.17", + "ts-rs-macros", +] + +[[package]] +name = "ts-rs-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "nym-api-requests 0.1.0", + "nym-mixnet-contract-common 0.6.0", + "nym-types", + "nym-validator-client 0.1.0", + "nym-vesting-contract-common 0.7.0", + "nym-wallet-types", + "ts-rs", + "walkdir", +] + +[[package]] +name = "ts-rs-macros" +version = "10.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9d8656589772eeec2cf7a8264d9cda40fb28b9bc53118ceb9e8c07f8f38730" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", + "termcolor", +] + +[[package]] +name = "tsify" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" +dependencies = [ + "gloo-utils 0.1.7", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_json", + "tsify-macros", + "wasm-bindgen", +] + +[[package]] +name = "tsify-macros" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals 0.28.0", + "syn 2.0.107", +] + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.21.12", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", + "webpki-roots 0.24.0", +] + +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.3.1", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.22.4", + "rustls-pki-types", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "uniffi" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6d968cb62160c11f2573e6be724ef8b1b18a277aededd17033f8a912d73e2b4" +dependencies = [ + "anyhow", + "camino", + "cargo_metadata 0.19.2", + "clap", + "uniffi_bindgen", + "uniffi_build", + "uniffi_core", + "uniffi_macros", + "uniffi_pipeline", +] + +[[package]] +name = "uniffi_bindgen" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b39ef1acbe1467d5d210f274fae344cb6f8766339330cb4c9688752899bf6b" +dependencies = [ + "anyhow", + "askama", + "camino", + "cargo_metadata 0.19.2", + "fs-err", + "glob", + "goblin", + "heck 0.5.0", + "indexmap 2.12.0", + "once_cell", + "serde", + "tempfile", + "textwrap", + "toml 0.5.11", + "uniffi_internal_macros", + "uniffi_meta", + "uniffi_pipeline", + "uniffi_udl", +] + +[[package]] +name = "uniffi_build" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6683e6b665423cddeacd89a3f97312cf400b2fb245a26f197adaf65c45d505b2" +dependencies = [ + "anyhow", + "camino", + "uniffi_bindgen", +] + +[[package]] +name = "uniffi_core" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d990b553d6b9a7ee9c3ae71134674739913d52350b56152b0e613595bb5a6f" +dependencies = [ + "anyhow", + "bytes", + "once_cell", + "static_assertions", +] + +[[package]] +name = "uniffi_internal_macros" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f4f224becf14885c10e6e400b95cc4d1985738140cb194ccc2044563f8a56b" +dependencies = [ + "anyhow", + "indexmap 2.12.0", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "uniffi_macros" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b481d385af334871d70904e6a5f129be7cd38c18fcf8dd8fd1f646b426a56d58" +dependencies = [ + "camino", + "fs-err", + "once_cell", + "proc-macro2", + "quote", + "serde", + "syn 2.0.107", + "toml 0.5.11", + "uniffi_meta", +] + +[[package]] +name = "uniffi_meta" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f817868a3b171bb7bf259e882138d104deafde65684689b4694c846d322491" +dependencies = [ + "anyhow", + "siphasher 0.3.11", + "uniffi_internal_macros", + "uniffi_pipeline", +] + +[[package]] +name = "uniffi_pipeline" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b147e133ad7824e32426b90bc41fda584363563f2ba747f590eca1fd6fd14e6" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.12.0", + "tempfile", + "uniffi_internal_macros", +] + +[[package]] +name = "uniffi_udl" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caed654fb73da5abbc7a7e9c741532284532ba4762d6fe5071372df22a41730a" +dependencies = [ + "anyhow", + "textwrap", + "uniffi_meta", + "weedle2", +] + +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "utoipa" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" +dependencies = [ + "indexmap 2.12.0", + "serde", + "serde_json", + "utoipa-gen", +] + +[[package]] +name = "utoipa-gen" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.107", + "uuid", +] + +[[package]] +name = "utoipa-swagger-ui" +version = "8.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4b5ac679cc6dfc5ea3f2823b0291c777750ffd5e13b21137e0f7ac0e8f9617" +dependencies = [ + "axum", + "base64 0.22.1", + "mime_guess", + "regex", + "rust-embed", + "serde", + "serde_json", + "url", + "utoipa", + "zip", +] + +[[package]] +name = "utoipauto" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cba36db2c397c614110554a60fbb4bb97d5f8c6823775c766e6f455e37377047" +dependencies = [ + "utoipauto-macro", +] + +[[package]] +name = "utoipauto-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "268d76aaebb80eba79240b805972e52d7d410d4bcc52321b951318b0f440cd60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "utoipauto-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382673bda1d05c85b4550d32fd4192ccd4cffe9a908543a0795d1e7682b36246" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", + "utoipauto-core", +] + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "getrandom 0.3.4", + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "validator-status-check" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "comfy-table", + "nym-bin-common 0.6.0", + "nym-http-api-client", + "nym-network-defaults 0.1.0", + "nym-validator-client 0.1.0", + "serde", + "serde_json", + "strum", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +dependencies = [ + "anyhow", + "cargo_metadata 0.18.1", + "cfg-if", + "regex", + "rustc_version 0.4.1", + "rustversion", + "time", +] + +[[package]] +name = "vergen" +version = "9.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b2bf58be11fc9414104c6d3a2e464163db5ef74b12296bda593cac37b6e4777" +dependencies = [ + "anyhow", + "cargo_metadata 0.19.2", + "derive_builder", + "regex", + "rustc_version 0.4.1", + "rustversion", + "time", + "vergen-lib", +] + +[[package]] +name = "vergen-gitcl" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9dfc1de6eb2e08a4ddf152f1b179529638bedc0ea95e6d667c014506377aefe" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", + "time", + "vergen 9.0.6", + "vergen-lib", +] + +[[package]] +name = "vergen-lib" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vt100" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" +dependencies = [ + "itoa", + "log", + "unicode-width 0.1.14", + "vte", +] + +[[package]] +name = "vte" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" +dependencies = [ + "arrayvec", + "utf8parse", + "vte_generate_state_changes", +] + +[[package]] +name = "vte_generate_state_changes" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.107", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" +dependencies = [ + "js-sys", + "minicov", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "wasm-client-core" +version = "0.1.0" +dependencies = [ + "async-trait", + "console_error_panic_hook", + "js-sys", + "nym-bandwidth-controller", + "nym-client-core", + "nym-config 0.1.0", + "nym-credential-storage", + "nym-crypto 0.4.0", + "nym-gateway-client", + "nym-http-api-client", + "nym-sphinx", + "nym-sphinx-acknowledgements", + "nym-statistics-common", + "nym-task", + "nym-topology", + "nym-validator-client 0.1.0", + "rand 0.8.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "time", + "tsify", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-storage", + "wasm-utils", + "zeroize", +] + +[[package]] +name = "wasm-storage" +version = "0.1.0" +dependencies = [ + "async-trait", + "getrandom 0.2.16", + "indexed_db_futures", + "js-sys", + "nym-store-cipher", + "serde", + "serde-wasm-bindgen 0.6.5", + "thiserror 2.0.17", + "wasm-bindgen", + "wasm-utils", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm-utils" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "futures", + "getrandom 0.2.16", + "gloo-net", + "gloo-utils 0.2.0", + "js-sys", + "tungstenite 0.20.1", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmtimer" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "slab", + "wasm-bindgen", +] + +[[package]] +name = "web-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414" +dependencies = [ + "phf 0.11.3", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webpki-roots" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +dependencies = [ + "rustls-webpki 0.101.7", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.3", +] + +[[package]] +name = "webpki-roots" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "weedle2" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" +dependencies = [ + "nom", +] + +[[package]] +name = "whoami" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" +dependencies = [ + "libredox", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[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", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "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", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[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-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", +] + +[[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", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[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_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "zip" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", + "flate2", + "indexmap 2.12.0", + "memchr", + "thiserror 2.0.17", + "zopfli", +] + +[[package]] +name = "zknym-lib" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bs58", + "getrandom 0.2.16", + "js-sys", + "nym-bin-common 0.6.0", + "nym-compact-ecash 0.1.0", + "nym-credentials 0.1.0", + "nym-crypto 0.4.0", + "nym-http-api-client", + "rand 0.8.5", + "reqwest 0.12.24", + "serde", + "thiserror 2.0.17", + "tokio", + "tsify", + "uuid", + "wasm-bindgen", + "wasm-utils", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "zopfli" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zulip-client" +version = "0.1.0" +dependencies = [ + "itertools 0.14.0", + "nym-bin-common 0.6.0", + "nym-http-api-client", + "reqwest 0.12.24", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tracing", + "url", + "zeroize", +] From 5c62618b8b2fe1e42fdb0d93ca40683cf962cddc Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 21 Oct 2025 12:22:55 +0100 Subject: [PATCH 085/139] lint --- service-providers/network-requester/src/core.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service-providers/network-requester/src/core.rs b/service-providers/network-requester/src/core.rs index fd7f31cb4c0..9b6cf866552 100644 --- a/service-providers/network-requester/src/core.rs +++ b/service-providers/network-requester/src/core.rs @@ -7,9 +7,9 @@ use crate::reply::MixnetMessage; use crate::request_filter::RequestFilter; use crate::{reply, socks5}; use async_trait::async_trait; +use futures::SinkExt; use futures::channel::{mpsc, oneshot}; use futures::stream::StreamExt; -use futures::SinkExt; use log::{debug, error, warn}; use nym_bin_common::bin_info_owned; use nym_client_core::HardcodedTopologyProvider; From 00cd6d734fcd212e0f54b1e2575b5fdb5fc84b82 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 21 Oct 2025 17:49:54 +0100 Subject: [PATCH 086/139] remove external dep on nymvpn repo in sdk --- sdk/rust/nym-sdk/Cargo.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index b4e25d6fd1e..e5fa543c493 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -47,9 +47,7 @@ nym-sphinx-addressing = { path = "../../../common/nymsphinx/addressing" } nym-bin-common = { path = "../../../common/bin-common", features = [ "basic_tracing", ] } - nym-gateway-directory = { path = "../../../nym-gateway-directory" } -nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } bytecodec = { workspace = true } httpcodec = { workspace = true } From c86d9d87677c8197e9b908adf5348a74f12da9ee Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Tue, 21 Oct 2025 17:50:08 +0100 Subject: [PATCH 087/139] added stream module to mixnet readme --- sdk/rust/nym-sdk/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/README.md b/sdk/rust/nym-sdk/README.md index 16f19894145..a3cf022683f 100644 --- a/sdk/rust/nym-sdk/README.md +++ b/sdk/rust/nym-sdk/README.md @@ -2,7 +2,8 @@ This repo contains several components: - `mixnet`: exposes Nym Client builders and methods. This is useful if you want to interact directly with the Client, or build transport abstractions. -- `tcp_proxy`: exposes functionality to set up client/server instances that expose a localhost TcpSocket to read/write to like a 'normal' socket connection. `tcp_proxy/bin/` contains standalone `nym-proxy-client` and `nym-proxy-server` binaries. +- `tcp_proxy`: exposes functionality to set up client/server instances that expose a localhost TcpSocket to read/write to like a 'normal' socket connection. `tcp_proxy/bin/` contains standalone `nym-proxy-client` and `nym-proxy-server` binaries. *Note: this module is being superceded by the `stream_wrapper` module, and this module will not have features added to it in the future.* - `clientpool`: a configurable pool of ephemeral Nym Clients which can be created as a background process and quickly grabbed. +- `stream_wrapper`: made up of two parts: a TCP-Socket-like abstraction (`mixnet_stream_wrapper.rs`) for a Nym Client, and an abstraction built on top of this (`mixnet_stream_wrapper_ipr`) which allows for client-side integrations to send IP packets through Exit Gateways' IpPacketRouter, and use the Mixnet as a proxy. For an example of where this is used, see the `mixtcp` crate. Documentation can be found [here](https://nym.com/docs/developers/rust). From dc754734ea7af52905b395f4b6895b61cfb60923 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 22 Oct 2025 13:41:04 +0100 Subject: [PATCH 088/139] remove unused --- Cargo.lock | 100 ++---- .../src/entries/exit_point.rs | 3 +- nym-gateway-directory/src/entries/gateway.rs | 14 +- nym-gateway-directory/src/gateway_cache.rs | 310 ------------------ nym-gateway-directory/src/gateway_client.rs | 23 +- nym-gateway-directory/src/helpers.rs | 81 +---- nym-gateway-directory/src/lib.rs | 10 +- 7 files changed, 49 insertions(+), 492 deletions(-) delete mode 100644 nym-gateway-directory/src/gateway_cache.rs diff --git a/Cargo.lock b/Cargo.lock index cd92d02c3cf..cd57e393571 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3705,7 +3705,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core", ] [[package]] @@ -5111,7 +5111,7 @@ dependencies = [ [[package]] name = "nym-api-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "bs58", "cosmrs", @@ -5259,7 +5259,7 @@ dependencies = [ [[package]] name = "nym-bin-common" version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "const-str", "log", @@ -5565,7 +5565,7 @@ dependencies = [ [[package]] name = "nym-coconut-dkg-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "nym-compact-ecash" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "bincode", "bls12_381", @@ -5657,7 +5657,7 @@ dependencies = [ [[package]] name = "nym-config" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "dirs", "handlebars", @@ -5842,7 +5842,7 @@ dependencies = [ [[package]] name = "nym-credential-proxy-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "async-trait", "nym-credentials 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -5952,7 +5952,7 @@ dependencies = [ [[package]] name = "nym-credentials" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "bincode", "bls12_381", @@ -5993,7 +5993,7 @@ dependencies = [ [[package]] name = "nym-credentials-interface" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "bls12_381", "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -6042,7 +6042,7 @@ dependencies = [ [[package]] name = "nym-crypto" version = "0.4.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "aes", "base64 0.22.1", @@ -6100,7 +6100,7 @@ dependencies = [ [[package]] name = "nym-ecash-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "bs58", "cosmwasm-schema", @@ -6145,7 +6145,7 @@ dependencies = [ [[package]] name = "nym-ecash-signer-check-types" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -6169,7 +6169,7 @@ dependencies = [ [[package]] name = "nym-ecash-time" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "time", @@ -6190,7 +6190,7 @@ dependencies = [ [[package]] name = "nym-exit-policy" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "serde", "serde_json", @@ -6480,7 +6480,7 @@ dependencies = [ [[package]] name = "nym-group-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "cosmwasm-schema", "cw-controllers", @@ -6730,7 +6730,7 @@ dependencies = [ [[package]] name = "nym-mixnet-contract-common" version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "bs58", "cosmwasm-schema", @@ -6793,7 +6793,7 @@ dependencies = [ [[package]] name = "nym-multisig-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -6823,7 +6823,7 @@ dependencies = [ [[package]] name = "nym-network-defaults" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "cargo_metadata 0.19.2", "dotenvy", @@ -7049,7 +7049,7 @@ dependencies = [ [[package]] name = "nym-node-requests" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "celes", "humantime", @@ -7238,7 +7238,7 @@ dependencies = [ [[package]] name = "nym-noise-keys" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", "schemars 0.8.22", @@ -7331,7 +7331,7 @@ dependencies = [ [[package]] name = "nym-pemstore" version = "0.3.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "pem", "tracing", @@ -7354,7 +7354,7 @@ dependencies = [ [[package]] name = "nym-performance-contract-common" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -7476,7 +7476,6 @@ dependencies = [ "nym-task", "nym-topology", "nym-validator-client 0.1.0", - "nym-vpn-api-client", "parking_lot", "pnet_packet", "rand 0.8.5", @@ -7511,7 +7510,7 @@ dependencies = [ [[package]] name = "nym-serde-helpers" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "base64 0.22.1", "bs58", @@ -7836,7 +7835,7 @@ dependencies = [ [[package]] name = "nym-sphinx-types" version = "0.2.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "thiserror 2.0.17", ] @@ -7961,7 +7960,7 @@ dependencies = [ [[package]] name = "nym-ticketbooks-merkle" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", @@ -8107,7 +8106,7 @@ dependencies = [ [[package]] name = "nym-validator-client" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "async-trait", "base64 0.22.1", @@ -8235,7 +8234,7 @@ dependencies = [ [[package]] name = "nym-vesting-contract-common" version = "0.7.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -8446,7 +8445,7 @@ dependencies = [ [[package]] name = "nym-wireguard-types" version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#88c4e0ce6c4ccfe291c7f7c970d5598f97fd28cc" +source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" dependencies = [ "base64 0.22.1", "log", @@ -13127,7 +13126,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ "windows-collections", - "windows-core 0.61.2", + "windows-core", "windows-future", "windows-link 0.1.3", "windows-numerics", @@ -13139,7 +13138,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-core 0.61.2", + "windows-core", ] [[package]] @@ -13151,21 +13150,8 @@ dependencies = [ "windows-implement", "windows-interface", "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", + "windows-result", + "windows-strings", ] [[package]] @@ -13174,7 +13160,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "windows-core 0.61.2", + "windows-core", "windows-link 0.1.3", "windows-threading", ] @@ -13219,7 +13205,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-core 0.61.2", + "windows-core", "windows-link 0.1.3", ] @@ -13232,15 +13218,6 @@ 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", -] - [[package]] name = "windows-strings" version = "0.4.2" @@ -13250,15 +13227,6 @@ 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", -] - [[package]] name = "windows-sys" version = "0.45.0" diff --git a/nym-gateway-directory/src/entries/exit_point.rs b/nym-gateway-directory/src/entries/exit_point.rs index 4a5518f8ebd..a7213b30a09 100644 --- a/nym-gateway-directory/src/entries/exit_point.rs +++ b/nym-gateway-directory/src/entries/exit_point.rs @@ -3,9 +3,8 @@ use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::addressing::nodes::NodeIdentity; -use std::fmt::{Display, Formatter}; -// use nym_sdk::mixnet::{NodeIdentity, Recipient}; use serde::{Deserialize, Serialize}; +use std::fmt::{Display, Formatter}; use crate::{ Error, IpPacketRouterAddress, ScoreValue, diff --git a/nym-gateway-directory/src/entries/gateway.rs b/nym-gateway-directory/src/entries/gateway.rs index e84d7679856..1c99a3a73d4 100644 --- a/nym-gateway-directory/src/entries/gateway.rs +++ b/nym-gateway-directory/src/entries/gateway.rs @@ -24,7 +24,7 @@ use crate::{ helpers, }; -pub type NymNode = Gateway; +// pub type NymNode = Gateway; pub const COUNTRY_WITH_REGION_SELECTOR: &str = "US"; @@ -604,7 +604,7 @@ impl GatewayList { .collect() } - pub fn node_with_identity(&self, identity: &NodeIdentity) -> Option<&NymNode> { + pub fn node_with_identity(&self, identity: &NodeIdentity) -> Option<&Gateway> { // Not using self.filter() here as find() will stop at the first match self.gateways .iter() @@ -732,11 +732,11 @@ pub enum GatewayFilter { Vpn, // Has an authenticator address } -#[derive(Debug, Clone, PartialEq)] -pub struct GatewayFilters { - pub gw_type: GatewayType, - pub filters: Vec, -} +// #[derive(Debug, Clone, PartialEq)] +// pub struct GatewayFilters { +// pub gw_type: GatewayType, +// pub filters: Vec, +// } #[cfg(test)] mod tests { diff --git a/nym-gateway-directory/src/gateway_cache.rs b/nym-gateway-directory/src/gateway_cache.rs deleted file mode 100644 index e0afa312881..00000000000 --- a/nym-gateway-directory/src/gateway_cache.rs +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright 2025 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::{ - collections::HashMap, - net::IpAddr, - time::{Duration, Instant}, -}; - -use nym_offline_monitor::ConnectivityHandle; -use nym_sphinx::addressing::nodes::NodeIdentity; -use strum::IntoEnumIterator; -use tokio::task::JoinHandle; -use tokio_util::sync::CancellationToken; - -use crate::{ - Error, Gateway, GatewayClient, GatewayFilters, GatewayList, GatewayType, error::Result, -}; - -/// The maximum age of the cache before it is considered stale. -const MAX_CACHE_AGE: Duration = Duration::from_secs(5 * 60); - -#[derive(Clone)] -pub struct GatewayCacheHandle { - tx: tokio::sync::mpsc::UnboundedSender, -} - -impl GatewayCacheHandle { - fn new(tx: tokio::sync::mpsc::UnboundedSender) -> Self { - Self { tx } - } - - /// Refresh all gateways and countries without blocking until the operation is complete. - pub async fn refresh_all(&self) -> Result<()> { - self.tx - .send(Command::RefreshAll) - .map_err(|_| Error::Cancelled) - } - - /// Lookup gateways waiting for any pending fetch request or initiating one if needed. - pub async fn lookup_gateways(&self, gw_type: GatewayType) -> Result { - let (tx, rx) = tokio::sync::oneshot::channel(); - self.tx - .send(Command::LookupGateways(gw_type, tx)) - .map_err(|_| Error::Cancelled)?; - rx.await.map_err(|_| Error::Cancelled)? - } - - pub async fn lookup_filtered_gateways(&self, filters: GatewayFilters) -> Result> { - let (tx, rx) = tokio::sync::oneshot::channel(); - self.tx - .send(Command::LookupFilteredGateways(filters, tx)) - .map_err(|_| Error::Cancelled)?; - rx.await.map_err(|_| Error::Cancelled)? - } - - /// Lookup gateway IP address waiting for any pending fetch request or initiating one if needed. - pub async fn lookup_gateway_ip(&self, gateway_identity: String) -> Result { - let (tx, rx) = tokio::sync::oneshot::channel(); - self.tx - .send(Command::LookupGatewayIp(gateway_identity, tx)) - .map_err(|_| Error::Cancelled)?; - rx.await.map_err(|_| Error::Cancelled)? - } - - pub fn replace_gateway_client(&mut self, gateway_client: GatewayClient) -> Result<()> { - self.tx - .send(Command::ReplaceGatewayClient(Box::new(gateway_client))) - .map_err(|_| Error::Cancelled) - } -} - -enum Command { - RefreshAll, - LookupGateways( - GatewayType, - tokio::sync::oneshot::Sender>, - ), - LookupFilteredGateways( - GatewayFilters, - tokio::sync::oneshot::Sender>>, - ), - LookupGatewayIp( - String, // gateway_identity - tokio::sync::oneshot::Sender>, - ), - ReplaceGatewayClient(Box), -} - -pub struct GatewayCache { - // The channel for receiving commands - command_rx: tokio::sync::mpsc::UnboundedReceiver, - - // The underlying client that actually does the work - gateway_client: GatewayClient, - - // The cached gateways and their last updated time - cached_gateways: HashMap, - - // The connectivity handle to check if we are online - connectivity_handle: ConnectivityHandle, - - /// Whether the initial refresh has been performed - is_performed_initial_refresh: bool, - - // Shutdown token - shutdown_token: CancellationToken, -} - -impl GatewayCache { - pub fn spawn( - gateway_client: GatewayClient, - connectivity_handle: ConnectivityHandle, - shutdown_token: CancellationToken, - ) -> (GatewayCacheHandle, JoinHandle<()>) { - let (command_tx, command_rx) = tokio::sync::mpsc::unbounded_channel(); - - let inner = Self { - gateway_client, - connectivity_handle, - command_rx, - cached_gateways: HashMap::default(), - is_performed_initial_refresh: false, - shutdown_token, - }; - let join_handle = tokio::spawn(inner.run()); - (GatewayCacheHandle::new(command_tx), join_handle) - } - - async fn run(mut self) { - if self.connectivity_handle.connectivity().await.is_online() { - self.perform_initial_fetch_once().await; - } - - loop { - tokio::select! { - Some(cmd) = self.command_rx.recv() => { - match cmd { - Command::RefreshAll => { - self.refresh_all().await; - } - Command::LookupGateways(gw_type, tx) => { - tx.send(self.lookup_gateways(gw_type).await).ok(); - } - Command::LookupFilteredGateways(filters, tx) => { - let gw_vec = self.lookup_filtered_gateways(filters).await; - tx.send(gw_vec).ok(); - } - Command::LookupGatewayIp(gateway_identity, tx) => { - tx.send(self.lookup_gateway_ip(&gateway_identity).await).ok(); - } - Command::ReplaceGatewayClient(gateway_client) => { - self.replace_gateway_client(*gateway_client) - } - } - } - Some(status) = self.connectivity_handle.next() => { - if status.is_online() { - self.perform_initial_fetch_once().await; - } - } - _ = self.shutdown_token.cancelled() => { - break; - } - } - } - } - - async fn perform_initial_fetch_once(&mut self) { - if !self.is_performed_initial_refresh { - tracing::info!("Performing initial refresh"); - self.is_performed_initial_refresh = true; - self.refresh_all().await; - } - } - - fn replace_gateway_client(&mut self, gateway_client: GatewayClient) { - let old_config = self.gateway_client.get_config(); - let new_config = gateway_client.get_config(); - - self.gateway_client = gateway_client; - - // Invalidate cache immediately if gateway performance or thresholds change - if new_config.min_gateway_performance != old_config.min_gateway_performance - || new_config.mix_score_thresholds != old_config.mix_score_thresholds - || new_config.wg_score_thresholds != old_config.wg_score_thresholds - { - self.cached_gateways.clear(); - } - } - - async fn refresh_all(&mut self) { - let gw_types = self.get_stale_gateway_list_types(); - - if !gw_types.is_empty() { - tracing::info!("Refreshing gateways: {:?}", gw_types,); - self.refresh(gw_types).await; - } - } - - fn get_stale_gateway_list_types(&self) -> Vec { - GatewayType::iter() - .filter(|gw_type| !self.is_gateways_current(gw_type)) - .collect() - } - - async fn refresh(&mut self, gw_list_types: Vec) { - if self.connectivity_handle.connectivity().await.is_offline() { - tracing::debug!("Not refreshing gateways because we are not connected"); - return; - } - - tracing::info!("Refreshing gateway lists: {gw_list_types:?}"); - - let mut tasks = tokio::task::JoinSet::new(); - - for gw_type in gw_list_types { - let client = self.gateway_client.clone(); - tasks.spawn(async move { - let res = client.lookup_gateways(gw_type).await; - (gw_type, res) - }); - } - - while let Some(res) = tasks.join_next().await { - match res { - Ok((gw_type, r)) => match r { - Ok(refreshed_gateways) => { - tracing::info!("Refreshed gateways for {gw_type:?}"); - self.cached_gateways - .insert(gw_type, (refreshed_gateways, Instant::now())); - } - Err(err) => { - tracing::warn!("Failed to refresh gateways for {gw_type:?}: {err}"); - } - }, - Err(err) => { - tracing::error!("Failed to join on refresh task: {err}"); - } - } - } - } - - fn is_gateways_current(&self, gw_type: &GatewayType) -> bool { - self.cached_gateways - .get(gw_type) - .as_ref() - .map(|(_, last_updated)| last_updated.elapsed() < MAX_CACHE_AGE) - .unwrap_or_default() - } - - async fn refresh_gateways(&mut self, gw_type: GatewayType) -> Result { - if let Some((gw_list, last_updated)) = self.cached_gateways.get(&gw_type) - && last_updated.elapsed() < MAX_CACHE_AGE - { - Ok(gw_list.clone()) - } else { - if self.connectivity_handle.connectivity().await.is_offline() { - tracing::warn!("Not refreshing countries because we are not connected"); - return Err(Error::Offline); - } - - let refreshed_gateways = self.gateway_client.lookup_gateways(gw_type).await?; - - self.cached_gateways - .insert(gw_type, (refreshed_gateways.clone(), Instant::now())); - - Ok(refreshed_gateways) - } - } - - async fn lookup_gateways(&mut self, gw_type: GatewayType) -> Result { - let refresh_result = self.refresh_gateways(gw_type).await; - - // Regardless of if we managed to refresh the cache, we return the cached gateways if they - // exist. They should be the most recent one we can muster - if let Some((gateways, _)) = self.cached_gateways.get(&gw_type) { - Ok(gateways.clone()) - } else { - refresh_result - } - } - - async fn lookup_filtered_gateways(&mut self, filters: GatewayFilters) -> Result> { - let gw_list = self.lookup_gateways(filters.gw_type).await?; - Ok(gw_list.filter(&filters.filters)) - } - - async fn lookup_gateway_ip(&mut self, gateway_identity: &str) -> Result { - // If we have a populated list of gateways, we should always be able to find the IP there. - if let Ok(identity) = NodeIdentity::from_base58_string(gateway_identity) { - for (_, (gateways, _)) in self.cached_gateways.iter() { - if let Some(ip) = gateways - .node_with_identity(&identity) - .and_then(Gateway::lookup_ip) - { - return Ok(ip); - } - } - } else { - tracing::warn!("Failed to parse gateway identity: {gateway_identity}"); - } - - // Fallback - tracing::warn!("Using fallback to lookup gateway IP"); - self.gateway_client - .lookup_gateway_ip(gateway_identity) - .await - } -} diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index 3913f732076..6dadb0365f2 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -16,7 +16,7 @@ use tracing::{debug, error, warn}; use url::Url; use crate::{ - Error, NymNode, + Error, entries::gateway::{Gateway, GatewayList, GatewayType, NymNodeList}, error::Result, }; @@ -87,25 +87,6 @@ impl Config { } } -#[derive(Debug, Clone)] -pub struct ResolvedConfig { - pub nyxd_socket_addrs: Vec, - pub api_socket_addrs: Vec, - pub nym_vpn_api_socket_addrs: Option>, -} - -impl ResolvedConfig { - pub fn all_socket_addrs(&self) -> Vec { - let mut socket_addrs = vec![]; - socket_addrs.extend(self.nyxd_socket_addrs.iter()); - socket_addrs.extend(self.api_socket_addrs.iter()); - if let Some(vpn_api_socket_addrs) = &self.nym_vpn_api_socket_addrs { - socket_addrs.extend(vpn_api_socket_addrs.iter()); - } - socket_addrs - } -} - #[derive(Clone)] pub struct GatewayClient { api_client: nym_http_api_client::Client, @@ -333,7 +314,7 @@ impl GatewayClient { .await? .into_iter() .filter_map(|gw| { - NymNode::try_from_node_description(gw, key_rotation_id) + Gateway::try_from_node_description(gw, key_rotation_id) .inspect_err(|err| error!("Failed to parse node: {err}")) .ok() }) diff --git a/nym-gateway-directory/src/helpers.rs b/nym-gateway-directory/src/helpers.rs index 07f1e07fbaa..4c023d4ef59 100644 --- a/nym-gateway-directory/src/helpers.rs +++ b/nym-gateway-directory/src/helpers.rs @@ -1,86 +1,7 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use std::{ - net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}, - time::Duration, -}; - -use nym_common::trace_err_chain; -use nym_http_api_client::HickoryDnsResolver; - -use crate::{Config, Error, error::Result, gateway_client::ResolvedConfig}; - -// be generous with the resolution timeout -const HOSTNAME_RESOLUTION_TIMEOUT: Duration = Duration::from_secs(10); - -async fn try_resolve_hostname(hostname: &str) -> Result> { - tracing::debug!("Trying to resolve hostname: {hostname}"); - let resolver = HickoryDnsResolver::default(); - - let addrs = - match tokio::time::timeout(HOSTNAME_RESOLUTION_TIMEOUT, resolver.resolve_str(hostname)) - .await - { - Ok(Ok(addrs)) => addrs, - Ok(Err(err)) => { - trace_err_chain!(err, "Failed to resolve hostname"); - return Err(Error::FailedToDnsResolveGateway { - hostname: hostname.to_string(), - source: err, - }); - } - Err(_timeout) => { - return Err(Error::HostnameResolutionTimeout { - hostname: hostname.to_string(), - }); - } - }; - - tracing::debug!("Resolved to: {addrs:?}"); - - let ips = addrs.iter().collect::>(); - if ips.is_empty() { - return Err(Error::ResolvedHostnameButNoIp(hostname.to_string())); - } - - Ok(ips) -} - -async fn url_to_socket_addr(unresolved_url: &url::Url) -> Result> { - let port = unresolved_url - .port_or_known_default() - .ok_or(Error::UrlError { - url: unresolved_url.clone(), - reason: "missing port".to_string(), - })?; - let hostname = unresolved_url.host_str().ok_or(Error::UrlError { - url: unresolved_url.clone(), - reason: "missing hostname".to_string(), - })?; - - Ok(try_resolve_hostname(hostname) - .await? - .into_iter() - .map(|ip| SocketAddr::new(ip, port)) - .collect()) -} - -pub async fn resolve_config(config: &Config) -> Result { - let nyxd_socket_addrs = url_to_socket_addr(config.nyxd_url()).await?; - let api_socket_addrs = url_to_socket_addr(config.api_url()).await?; - let nym_vpn_api_socket_addrs = if let Some(vpn_api_url) = config.nym_vpn_api_url() { - Some(url_to_socket_addr(vpn_api_url).await?) - } else { - None - }; - - Ok(ResolvedConfig { - nyxd_socket_addrs, - api_socket_addrs, - nym_vpn_api_socket_addrs, - }) -} +use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; pub fn split_ips(ips: Vec) -> (Vec, Vec) { ips.into_iter() diff --git a/nym-gateway-directory/src/lib.rs b/nym-gateway-directory/src/lib.rs index 661a1d40ece..1ca4741d8cf 100644 --- a/nym-gateway-directory/src/lib.rs +++ b/nym-gateway-directory/src/lib.rs @@ -3,7 +3,6 @@ mod entries; mod error; -pub mod gateway_cache; mod gateway_client; mod helpers; pub use nym_vpn_api_client::types::{GatewayMinPerformance, NaiveFloat, Percent}; @@ -15,14 +14,13 @@ pub use crate::{ entry_point::EntryPoint, exit_point::ExitPoint, gateway::{ - Asn, AsnKind, Entry, Exit, Gateway, GatewayFilter, GatewayFilters, GatewayList, - GatewayType, Location, NymNode, Performance, Probe, ProbeOutcome, ScoreValue, + Asn, AsnKind, Entry, Exit, Gateway, GatewayFilter, GatewayList, GatewayType, Location, + Performance, Probe, ProbeOutcome, ScoreValue, }, ipr_addresses::IpPacketRouterAddress, score::Score, }, error::Error, - gateway_cache::{GatewayCache, GatewayCacheHandle}, - gateway_client::{Config, GatewayClient, ResolvedConfig}, - helpers::{resolve_config, split_ips}, + gateway_client::{Config, GatewayClient}, + helpers::split_ips, }; From c4467734c4c134a76eac326c7a69504034bcf704 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 22 Oct 2025 14:04:17 +0100 Subject: [PATCH 089/139] cont removing unnecessary types --- Cargo.lock | 262 ++----------------------------- nym-gateway-directory/Cargo.toml | 3 - nym-gateway-directory/README.md | 3 + 3 files changed, 13 insertions(+), 255 deletions(-) create mode 100644 nym-gateway-directory/README.md diff --git a/Cargo.lock b/Cargo.lock index cd57e393571..46d64c42f56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -895,15 +895,6 @@ dependencies = [ "generic-array 0.14.9", ] -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - [[package]] name = "bloomfilter" version = "3.0.1" @@ -2103,16 +2094,6 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" -[[package]] -name = "debounced" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107e5cd9b5163c19751e53eef634cae25cf5ed5f6d0c81125feaa92e43703cc7" -dependencies = [ - "futures-timer", - "futures-util", -] - [[package]] name = "defguard_wireguard_rs" version = "0.4.7" @@ -2121,9 +2102,9 @@ dependencies = [ "base64 0.22.1", "libc", "log", - "netlink-packet-core 0.7.0", + "netlink-packet-core", "netlink-packet-generic", - "netlink-packet-route 0.20.1", + "netlink-packet-route", "netlink-packet-utils", "netlink-packet-wireguard", "netlink-sys", @@ -2360,18 +2341,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "dispatch2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" -dependencies = [ - "bitflags 2.10.0", - "block2", - "libc", - "objc2", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -2962,12 +2931,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - [[package]] name = "futures-util" version = "0.3.31" @@ -4050,12 +4013,6 @@ dependencies = [ "serde", ] -[[package]] -name = "ipnetwork" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf370abdafd54d13e54a620e8c3e1145f28e46cc9d704bc6d94414559df41763" - [[package]] name = "iri-string" version = "0.7.8" @@ -4678,15 +4635,6 @@ dependencies = [ "netlink-packet-utils", ] -[[package]] -name = "netlink-packet-core" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" -dependencies = [ - "paste", -] - [[package]] name = "netlink-packet-generic" version = "0.3.3" @@ -4695,7 +4643,7 @@ checksum = "1cd7eb8ad331c84c6b8cb7f685b448133e5ad82e1ffd5acafac374af4a5a308b" dependencies = [ "anyhow", "byteorder", - "netlink-packet-core 0.7.0", + "netlink-packet-core", "netlink-packet-utils", ] @@ -4710,22 +4658,10 @@ dependencies = [ "byteorder", "libc", "log", - "netlink-packet-core 0.7.0", + "netlink-packet-core", "netlink-packet-utils", ] -[[package]] -name = "netlink-packet-route" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec2f5b6839be2a19d7fa5aab5bc444380f6311c2b693551cb80f45caaa7b5ef" -dependencies = [ - "bitflags 2.10.0", - "libc", - "log", - "netlink-packet-core 0.8.1", -] - [[package]] name = "netlink-packet-utils" version = "0.5.2" @@ -4752,20 +4688,6 @@ dependencies = [ "netlink-packet-utils", ] -[[package]] -name = "netlink-proto" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core 0.8.1", - "netlink-sys", - "thiserror 2.0.17", -] - [[package]] name = "netlink-sys" version = "0.8.7" @@ -4773,10 +4695,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ "bytes", - "futures", "libc", "log", - "tokio", ] [[package]] @@ -4818,19 +4738,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - [[package]] name = "no-std-compat" version = "0.4.1" @@ -5145,19 +5052,6 @@ dependencies = [ "utoipa", ] -[[package]] -name = "nym-apple-network" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "block2", - "dispatch2", - "nix 0.30.1", - "objc2", - "objc2-foundation", - "thiserror 2.0.17", -] - [[package]] name = "nym-async-file-watcher" version = "0.1.0" @@ -5576,15 +5470,6 @@ dependencies = [ "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", ] -[[package]] -name = "nym-common" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "tracing", - "tracing-test", -] - [[package]] name = "nym-common" version = "1.18.0" @@ -5676,7 +5561,7 @@ dependencies = [ "bincode", "bytes", "futures", - "nym-common 1.18.0", + "nym-common", "nym-config 0.1.0", "nym-ip-packet-requests", "nym-sdk", @@ -6228,7 +6113,7 @@ dependencies = [ "defguard_wireguard_rs", "fastrand 2.3.0", "futures", - "ipnetwork 0.20.0", + "ipnetwork", "mock_instant", "nym-api-requests 0.1.0", "nym-authenticator-requests", @@ -6316,11 +6201,9 @@ version = "0.0.0" dependencies = [ "itertools 0.14.0", "nym-client-core", - "nym-common 1.17.0-beta", "nym-crypto 0.4.0", "nym-http-api-client", "nym-network-defaults 0.1.0", - "nym-offline-monitor", "nym-sphinx", "nym-sphinx-addressing", "nym-topology", @@ -6882,7 +6765,7 @@ dependencies = [ "dirs", "futures", "humantime-serde", - "ipnetwork 0.20.0", + "ipnetwork", "log", "nym-async-file-watcher", "nym-bin-common 0.6.0", @@ -6949,7 +6832,7 @@ dependencies = [ "human-repr", "humantime-serde", "indicatif", - "ipnetwork 0.20.0", + "ipnetwork", "lioness", "nym-bin-common 0.6.0", "nym-client-core-config-types", @@ -7272,26 +7155,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "nym-offline-monitor" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "async-trait", - "debounced", - "dispatch2", - "futures", - "nym-apple-network", - "nym-common 1.17.0-beta", - "nym-routing", - "nym-windows", - "thiserror 2.0.17", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - [[package]] name = "nym-ordered-buffer" version = "0.1.0" @@ -7409,30 +7272,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "nym-routing" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "bitflags 2.10.0", - "futures", - "ipnetwork 0.21.1", - "libc", - "netlink-packet-core 0.8.1", - "netlink-packet-route 0.25.1", - "netlink-sys", - "nix 0.30.1", - "nym-common 1.17.0-beta", - "nym-windows", - "rtnetlink", - "system-configuration 0.6.1", - "thiserror 2.0.17", - "tokio", - "tracing", - "widestring", - "windows", -] - [[package]] name = "nym-sdk" version = "0.1.0" @@ -8320,19 +8159,6 @@ dependencies = [ "ts-rs", ] -[[package]] -name = "nym-windows" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "bitflags 2.10.0", - "futures", - "thiserror 2.0.17", - "tokio", - "tracing", - "windows", -] - [[package]] name = "nym-wireguard" version = "0.1.0" @@ -8542,15 +8368,6 @@ dependencies = [ "url", ] -[[package]] -name = "objc2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" -dependencies = [ - "objc2-encode", -] - [[package]] name = "objc2-core-foundation" version = "0.3.2" @@ -8558,27 +8375,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags 2.10.0", - "dispatch2", - "objc2", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" -dependencies = [ - "bitflags 2.10.0", - "block2", - "libc", - "objc2", - "objc2-core-foundation", ] [[package]] @@ -9679,7 +9475,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", - "system-configuration 0.5.1", + "system-configuration", "tokio", "tokio-rustls 0.24.1", "tower-service", @@ -9832,23 +9628,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rtnetlink" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08fd15aa4c64c34d0b3178e45ec6dad313a9f02b193376d501668a7950264bb7" -dependencies = [ - "futures", - "log", - "netlink-packet-core 0.8.1", - "netlink-packet-route 0.25.1", - "netlink-proto", - "netlink-sys", - "nix 0.29.0", - "thiserror 1.0.69", - "tokio", -] - [[package]] name = "rust-embed" version = "8.8.0" @@ -11224,18 +11003,7 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys 0.5.0", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.10.0", - "core-foundation", - "system-configuration-sys 0.6.0", + "system-configuration-sys", ] [[package]] @@ -11248,16 +11016,6 @@ dependencies = [ "libc", ] -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "tagptr" version = "0.2.0" diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 86254574c43..7c476172105 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -12,16 +12,13 @@ workspace = true [dependencies] itertools.workspace = true nym-client-core = { path = "../common/client-core" } -nym-common = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } nym-http-api-client = { path = "../common/http-api-client" } -nym-offline-monitor = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo nym-validator-client = { path = "../common/client-libs/validator-client" } nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } nym-crypto = { path = "../common/crypto" } nym-sphinx-addressing = { path = "../common/nymsphinx/addressing" } - nym-network-defaults = { path = "../common/network-defaults" } rand.workspace = true diff --git a/nym-gateway-directory/README.md b/nym-gateway-directory/README.md new file mode 100644 index 00000000000..a5b4ab276a9 --- /dev/null +++ b/nym-gateway-directory/README.md @@ -0,0 +1,3 @@ +# `nym-gateway-directory` + +This is a stripped down version of the `nym-gateway-directory` crate from the `nym-vpn-client` repository exposing functions and types related to IPRs. This is for use by the Rust SDK's `stream_wrapper` module. From fb2b2eaab0734aa2d15bb8c0c8819b2def87a824 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 22 Oct 2025 15:44:05 +0100 Subject: [PATCH 090/139] temp before big mod --- Cargo.lock | 1362 +++++------------ nym-gateway-directory/Cargo.toml | 3 +- nym-gateway-directory/src/entries/country.rs | 6 +- nym-gateway-directory/src/entries/gateway.rs | 462 ++---- .../src/entries/ipr_addresses.rs | 1 - nym-gateway-directory/src/entries/score.rs | 2 +- nym-gateway-directory/src/gateway_client.rs | 13 +- nym-gateway-directory/src/helpers.rs | 119 ++ nym-gateway-directory/src/lib.rs | 6 +- 9 files changed, 680 insertions(+), 1294 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 46d64c42f56..e3aee9e08a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -662,17 +662,6 @@ dependencies = [ "url", ] -[[package]] -name = "backon" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" -dependencies = [ - "fastrand 2.3.0", - "gloo-timers", - "tokio", -] - [[package]] name = "base16ct" version = "0.2.0" @@ -697,15 +686,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64-url" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2b6c78c06f7288d5e3c3d683bde35a79531127c83b087e5d0d77c974b4b28" -dependencies = [ - "base64 0.22.1", -] - [[package]] name = "base64ct" version = "1.8.0" @@ -2359,7 +2339,7 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus", - "nym-coconut-dkg-common 0.1.0", + "nym-coconut-dkg-common", "nym-contracts-common", ] @@ -2441,8 +2421,8 @@ dependencies = [ "dashmap", "dirs", "futures", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", + "nym-bin-common", + "nym-crypto", "nym-sdk", "serde", "tempfile", @@ -3813,11 +3793,11 @@ dependencies = [ "clap", "dirs", "importer-contract", - "nym-bin-common 0.6.0", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", + "nym-bin-common", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-validator-client", + "nym-vesting-contract-common", "serde", "serde_json", "tokio", @@ -4074,15 +4054,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.14.0" @@ -4527,7 +4498,7 @@ dependencies = [ "async-trait", "futures", "js-sys", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-http-api-client", "nym-ordered-buffer", "nym-service-providers-common", @@ -4552,9 +4523,9 @@ dependencies = [ "anyhow", "clap", "futures", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-network-defaults 0.1.0", + "nym-bin-common", + "nym-crypto", + "nym-network-defaults", "nym-sdk", "tokio", "tracing", @@ -4566,7 +4537,7 @@ version = "0.0.1" dependencies = [ "bytes", "dirs", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-ip-packet-requests", "nym-sdk", "reqwest 0.12.24", @@ -4918,37 +4889,37 @@ dependencies = [ "futures", "humantime-serde", "moka", - "nym-api-requests 0.1.0", + "nym-api-requests", "nym-bandwidth-controller", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-cache", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", "nym-contracts-common", "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", "nym-dkg", - "nym-ecash-contract-common 0.1.0", + "nym-ecash-contract-common", "nym-ecash-signer-check", - "nym-ecash-time 0.1.0", + "nym-ecash-time", "nym-gateway-client", "nym-http-api-client", "nym-http-api-common", - "nym-mixnet-contract-common 0.6.0", - "nym-node-requests 0.1.0", + "nym-mixnet-contract-common", + "nym-node-requests", "nym-node-tester-utils", - "nym-pemstore 0.3.0", - "nym-serde-helpers 0.1.0", + "nym-pemstore", + "nym-serde-helpers", "nym-sphinx", "nym-statistics-common", "nym-task", - "nym-ticketbooks-merkle 0.1.0", + "nym-ticketbooks-merkle", "nym-topology", "nym-types", - "nym-validator-client 0.1.0", + "nym-validator-client", "pin-project", "rand 0.8.5", "rand_chacha 0.3.1", @@ -4987,20 +4958,20 @@ dependencies = [ "ecdsa", "hex", "humantime-serde", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", "nym-contracts-common", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-signer-check-types 0.1.0", - "nym-ecash-time 0.1.0", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", - "nym-node-requests 0.1.0", - "nym-noise-keys 0.1.0", - "nym-serde-helpers 0.1.0", - "nym-ticketbooks-merkle 0.1.0", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-signer-check-types", + "nym-ecash-time", + "nym-mixnet-contract-common", + "nym-network-defaults", + "nym-node-requests", + "nym-noise-keys", + "nym-serde-helpers", + "nym-ticketbooks-merkle", "rand_chacha 0.3.1", "schemars 0.8.22", "serde", @@ -5015,43 +4986,6 @@ dependencies = [ "utoipa", ] -[[package]] -name = "nym-api-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "bs58", - "cosmrs", - "cosmwasm-std", - "ecdsa", - "hex", - "humantime-serde", - "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-contracts-common", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-signer-check-types 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-node-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-noise-keys 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ticketbooks-merkle 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "schemars 0.8.22", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tracing", - "utoipa", -] - [[package]] name = "nym-async-file-watcher" version = "0.1.0" @@ -5070,13 +5004,13 @@ dependencies = [ "futures", "nym-authenticator-requests", "nym-bandwidth-controller", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials-interface", + "nym-crypto", "nym-registration-common", "nym-sdk", "nym-service-provider-requests-common", - "nym-validator-client 0.1.0", - "nym-wireguard-types 0.1.0", + "nym-validator-client", + "nym-wireguard-types", "semver 1.0.27", "thiserror 2.0.17", "tokio", @@ -5091,17 +5025,17 @@ dependencies = [ "base64 0.22.1", "bincode", "hmac", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-network-defaults 0.1.0", + "nym-credentials-interface", + "nym-crypto", + "nym-network-defaults", "nym-service-provider-requests-common", "nym-sphinx", - "nym-wireguard-types 0.1.0", + "nym-wireguard-types", "rand 0.8.5", "semver 1.0.27", "serde", "sha2 0.10.9", - "strum_macros 0.27.2", + "strum_macros", "thiserror 2.0.17", "x25519-dalek", ] @@ -5114,14 +5048,14 @@ dependencies = [ "bip39", "log", "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-time 0.1.0", - "nym-network-defaults 0.1.0", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", + "nym-network-defaults", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "thiserror 2.0.17", "url", @@ -5150,19 +5084,6 @@ dependencies = [ "vergen 8.3.1", ] -[[package]] -name = "nym-bin-common" -version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "const-str", - "log", - "schemars 0.8.22", - "serde", - "utoipa", - "vergen 8.3.1", -] - [[package]] name = "nym-cache" version = "0.1.0" @@ -5184,10 +5105,10 @@ dependencies = [ "dotenvy", "inquire", "log", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-cli-commands", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", + "nym-network-defaults", + "nym-validator-client", "serde", "serde_json", "tap", @@ -5217,29 +5138,29 @@ dependencies = [ "k256", "log", "nym-bandwidth-controller", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core", - "nym-coconut-dkg-common 0.1.0", - "nym-config 0.1.0", + "nym-coconut-dkg-common", + "nym-config", "nym-contracts-common", - "nym-credential-proxy-requests 0.1.0", + "nym-credential-proxy-requests", "nym-credential-storage", "nym-credential-utils", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-time 0.1.0", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", "nym-http-api-client", "nym-id", - "nym-mixnet-contract-common 0.6.0", - "nym-multisig-contract-common 0.1.0", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-network-defaults", + "nym-pemstore", "nym-sphinx", "nym-types", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", + "nym-validator-client", + "nym-vesting-contract-common", "rand 0.8.5", "serde", "serde_json", @@ -5263,21 +5184,21 @@ dependencies = [ "futures", "log", "nym-bandwidth-controller", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core", "nym-client-websocket-requests", - "nym-config 0.1.0", + "nym-config", "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials", + "nym-crypto", "nym-gateway-requests", "nym-id", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", + "nym-network-defaults", + "nym-pemstore", "nym-sphinx", "nym-task", "nym-topology", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "serde", "serde_json", @@ -5312,23 +5233,23 @@ dependencies = [ "nym-client-core-gateways-storage", "nym-client-core-surb-storage", "nym-credential-storage", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", "nym-gateway-client", "nym-gateway-requests", "nym-http-api-client", "nym-id", "nym-mixnet-client", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", + "nym-mixnet-contract-common", + "nym-network-defaults", "nym-nonexhaustive-delayqueue", - "nym-pemstore 0.3.0", + "nym-pemstore", "nym-sphinx", "nym-statistics-common", "nym-task", "nym-topology", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "rand_chacha 0.3.1", "serde", @@ -5358,8 +5279,8 @@ name = "nym-client-core-config-types" version = "0.1.0" dependencies = [ "humantime-serde", - "nym-config 0.1.0", - "nym-pemstore 0.3.0", + "nym-config", + "nym-pemstore", "nym-sphinx-addressing", "nym-sphinx-params", "nym-statistics-common", @@ -5375,7 +5296,7 @@ dependencies = [ "anyhow", "async-trait", "cosmrs", - "nym-crypto 0.4.0", + "nym-crypto", "nym-gateway-requests", "serde", "sqlx", @@ -5394,7 +5315,7 @@ dependencies = [ "anyhow", "async-trait", "dashmap", - "nym-crypto 0.4.0", + "nym-crypto", "nym-sphinx", "nym-task", "sqlx", @@ -5413,7 +5334,7 @@ dependencies = [ "futures", "gloo-timers", "js-sys", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-gateway-requests", "nym-node-tester-utils", "nym-node-tester-wasm", @@ -5453,21 +5374,7 @@ dependencies = [ "cw2", "cw4", "nym-contracts-common", - "nym-multisig-contract-common 0.1.0", -] - -[[package]] -name = "nym-coconut-dkg-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw4", - "nym-contracts-common", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-multisig-contract-common", ] [[package]] @@ -5491,8 +5398,8 @@ dependencies = [ "ff", "group", "itertools 0.14.0", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", + "nym-network-defaults", + "nym-pemstore", "rand 0.8.5", "rayon", "serde", @@ -5502,29 +5409,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "nym-compact-ecash" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "bincode", - "bls12_381", - "bs58", - "cfg-if", - "digest 0.10.7", - "ff", - "group", - "itertools 0.14.0", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=develop)", - "rand 0.8.5", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "thiserror 2.0.17", - "zeroize", -] - [[package]] name = "nym-config" version = "0.1.0" @@ -5532,22 +5416,7 @@ dependencies = [ "dirs", "handlebars", "log", - "nym-network-defaults 0.1.0", - "serde", - "thiserror 2.0.17", - "toml 0.8.23", - "url", -] - -[[package]] -name = "nym-config" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "dirs", - "handlebars", - "log", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-network-defaults", "serde", "thiserror 2.0.17", "toml 0.8.23", @@ -5562,7 +5431,7 @@ dependencies = [ "bytes", "futures", "nym-common", - "nym-config 0.1.0", + "nym-config", "nym-ip-packet-requests", "nym-sdk", "pnet_packet", @@ -5610,7 +5479,7 @@ dependencies = [ "anyhow", "bs58", "lazy_static", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-ffi-shared", "nym-sdk", "nym-sphinx-anonymous-replies", @@ -5629,26 +5498,26 @@ dependencies = [ "clap", "futures", "humantime", - "nym-bin-common 0.6.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", + "nym-bin-common", + "nym-compact-ecash", + "nym-config", "nym-credential-proxy-lib", - "nym-credential-proxy-requests 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", "nym-ecash-signer-check", "nym-http-api-common", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", + "nym-network-defaults", + "nym-validator-client", "rand 0.8.5", "reqwest 0.12.24", "serde", "serde_json", "sqlx", "strum", - "strum_macros 0.27.2", + "strum_macros", "tempfile", "thiserror 2.0.17", "time", @@ -5674,22 +5543,22 @@ dependencies = [ "futures", "humantime", "nym-cache", - "nym-compact-ecash 0.1.0", - "nym-credential-proxy-requests 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", + "nym-compact-ecash", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", "nym-ecash-signer-check", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", + "nym-network-defaults", + "nym-validator-client", "rand 0.8.5", "reqwest 0.12.24", "serde", "serde_json", "sqlx", "strum", - "strum_macros 0.27.2", + "strum_macros", "tempfile", "thiserror 2.0.17", "time", @@ -5706,11 +5575,11 @@ name = "nym-credential-proxy-requests" version = "0.1.0" dependencies = [ "async-trait", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", + "nym-credentials", + "nym-credentials-interface", "nym-http-api-client", "nym-http-api-common", - "nym-serde-helpers 0.1.0", + "nym-serde-helpers", "reqwest 0.12.24", "schemars 0.8.22", "serde", @@ -5724,26 +5593,6 @@ dependencies = [ "wasmtimer", ] -[[package]] -name = "nym-credential-proxy-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "async-trait", - "nym-credentials 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-http-api-client", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "reqwest 0.12.24", - "schemars 0.8.22", - "serde", - "serde_json", - "serde_with", - "time", - "uuid", - "wasmtimer", -] - [[package]] name = "nym-credential-storage" version = "0.1.0" @@ -5752,11 +5601,11 @@ dependencies = [ "async-trait", "bincode", "log", - "nym-compact-ecash 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", + "nym-compact-ecash", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", "nym-test-utils", "serde", "sqlx", @@ -5773,12 +5622,12 @@ dependencies = [ "log", "nym-bandwidth-controller", "nym-client-core", - "nym-config 0.1.0", + "nym-config", "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-ecash-time 0.1.0", - "nym-validator-client 0.1.0", + "nym-credentials", + "nym-credentials-interface", + "nym-ecash-time", + "nym-validator-client", "thiserror 2.0.17", "time", "tokio", @@ -5794,14 +5643,14 @@ dependencies = [ "cw-utils", "dyn-clone", "futures", - "nym-api-requests 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-ecash-contract-common 0.1.0", + "nym-api-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-ecash-contract-common", "nym-gateway-requests", "nym-gateway-storage", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "si-scale", "thiserror 2.0.17", @@ -5818,15 +5667,15 @@ dependencies = [ "bls12_381", "cosmrs", "log", - "nym-api-requests 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-ecash-time 0.1.0", + "nym-api-requests", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-contract-common", + "nym-ecash-time", "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-serde-helpers 0.1.0", - "nym-validator-client 0.1.0", + "nym-network-defaults", + "nym-serde-helpers", + "nym-validator-client", "rand 0.8.5", "serde", "thiserror 2.0.17", @@ -5834,60 +5683,18 @@ dependencies = [ "zeroize", ] -[[package]] -name = "nym-credentials" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "bincode", - "bls12_381", - "cosmrs", - "log", - "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-http-api-client", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "thiserror 2.0.17", - "time", - "zeroize", -] - [[package]] name = "nym-credentials-interface" version = "0.1.0" dependencies = [ "bls12_381", - "nym-compact-ecash 0.1.0", - "nym-ecash-time 0.1.0", - "nym-network-defaults 0.1.0", + "nym-compact-ecash", + "nym-ecash-time", + "nym-network-defaults", "rand 0.8.5", "serde", "strum", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "time", - "utoipa", -] - -[[package]] -name = "nym-credentials-interface" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "bls12_381", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-ecash-time 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "rand 0.8.5", - "serde", - "strum", - "strum_macros 0.27.2", + "strum_macros", "thiserror 2.0.17", "time", "utoipa", @@ -5911,8 +5718,8 @@ dependencies = [ "hkdf", "hmac", "jwt-simple", - "nym-pemstore 0.3.0", - "nym-sphinx-types 0.2.0", + "nym-pemstore", + "nym-sphinx-types", "rand 0.8.5", "rand_chacha 0.3.1", "serde", @@ -5924,28 +5731,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "nym-crypto" -version = "0.4.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "aes", - "base64 0.22.1", - "bs58", - "cipher", - "ctr", - "ed25519-dalek", - "generic-array 0.14.9", - "nym-pemstore 0.3.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-sphinx-types 0.2.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "serde_bytes", - "subtle-encoding", - "thiserror 2.0.17", - "x25519-dalek", - "zeroize", -] - [[package]] name = "nym-dkg" version = "0.1.0" @@ -5957,7 +5742,7 @@ dependencies = [ "ff", "group", "nym-contracts-common", - "nym-pemstore 0.3.0", + "nym-pemstore", "rand 0.8.5", "rand_chacha 0.3.1", "rand_core 0.6.4", @@ -5978,21 +5763,7 @@ dependencies = [ "cw-controllers", "cw-utils", "cw2", - "nym-multisig-contract-common 0.1.0", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-ecash-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-multisig-contract-common", "thiserror 2.0.17", ] @@ -6001,10 +5772,10 @@ name = "nym-ecash-signer-check" version = "0.1.0" dependencies = [ "futures", - "nym-ecash-signer-check-types 0.1.0", + "nym-ecash-signer-check-types", "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", + "nym-network-defaults", + "nym-validator-client", "semver 1.0.27", "thiserror 2.0.17", "tokio", @@ -6016,24 +5787,8 @@ dependencies = [ name = "nym-ecash-signer-check-types" version = "0.1.0" dependencies = [ - "nym-coconut-dkg-common 0.1.0", - "nym-crypto 0.4.0", - "semver 1.0.27", - "serde", - "thiserror 2.0.17", - "time", - "tracing", - "url", - "utoipa", -] - -[[package]] -name = "nym-ecash-signer-check-types" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-coconut-dkg-common", + "nym-crypto", "semver 1.0.27", "serde", "thiserror 2.0.17", @@ -6047,16 +5802,7 @@ dependencies = [ name = "nym-ecash-time" version = "0.1.0" dependencies = [ - "nym-compact-ecash 0.1.0", - "time", -] - -[[package]] -name = "nym-ecash-time" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-compact-ecash", "time", ] @@ -6072,18 +5818,6 @@ dependencies = [ "utoipa", ] -[[package]] -name = "nym-exit-policy" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "serde", - "serde_json", - "thiserror 2.0.17", - "tracing", - "utoipa", -] - [[package]] name = "nym-ffi-shared" version = "0.2.1" @@ -6091,8 +5825,8 @@ dependencies = [ "anyhow", "bs58", "lazy_static", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", + "nym-bin-common", + "nym-crypto", "nym-sdk", "nym-sphinx-anonymous-replies", "tokio", @@ -6115,13 +5849,13 @@ dependencies = [ "futures", "ipnetwork", "mock_instant", - "nym-api-requests 0.1.0", + "nym-api-requests", "nym-authenticator-requests", "nym-client-core", "nym-credential-verification", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", "nym-gateway-requests", "nym-gateway-stats-storage", "nym-gateway-storage", @@ -6129,7 +5863,7 @@ dependencies = [ "nym-ip-packet-router", "nym-mixnet-client", "nym-mixnode-common", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-network-requester", "nym-node-metrics", "nym-sdk", @@ -6139,10 +5873,10 @@ dependencies = [ "nym-task", "nym-topology", "nym-types", - "nym-validator-client 0.1.0", + "nym-validator-client", "nym-wireguard", "nym-wireguard-private-metadata-server", - "nym-wireguard-types 0.1.0", + "nym-wireguard-types", "rand 0.8.5", "serde", "sha2 0.10.9", @@ -6166,17 +5900,17 @@ dependencies = [ "gloo-utils 0.2.0", "nym-bandwidth-controller", "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", "nym-gateway-requests", "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", + "nym-network-defaults", + "nym-pemstore", "nym-sphinx", "nym-statistics-common", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "serde", "si-scale", @@ -6201,14 +5935,14 @@ version = "0.0.0" dependencies = [ "itertools 0.14.0", "nym-client-core", - "nym-crypto 0.4.0", + "nym-contracts-common", + "nym-crypto", "nym-http-api-client", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-sphinx", "nym-sphinx-addressing", "nym-topology", - "nym-validator-client 0.1.0", - "nym-vpn-api-client", + "nym-validator-client", "rand 0.8.5", "serde", "serde_json", @@ -6235,14 +5969,14 @@ dependencies = [ "nym-authenticator-client", "nym-authenticator-requests", "nym-bandwidth-controller", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core", - "nym-config 0.1.0", + "nym-config", "nym-connection-monitor", "nym-credential-utils", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", "nym-http-api-client", "nym-http-api-client-macro", "nym-ip-packet-client", @@ -6250,7 +5984,7 @@ dependencies = [ "nym-node-status-client", "nym-sdk", "nym-topology", - "nym-validator-client 0.1.0", + "nym-validator-client", "pnet_packet", "rand 0.8.5", "serde", @@ -6273,12 +6007,12 @@ dependencies = [ "bs58", "futures", "generic-array 0.14.9", - "nym-compact-ecash 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-pemstore 0.3.0", - "nym-serde-helpers 0.1.0", + "nym-compact-ecash", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-pemstore", + "nym-serde-helpers", "nym-sphinx", "nym-statistics-common", "nym-task", @@ -6322,7 +6056,7 @@ dependencies = [ "bincode", "defguard_wireguard_rs", "dyn-clone", - "nym-credentials-interface 0.1.0", + "nym-credentials-interface", "nym-gateway-requests", "nym-sphinx", "sqlx", @@ -6338,8 +6072,8 @@ version = "0.2.2" dependencies = [ "anyhow", "lazy_static", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", + "nym-bin-common", + "nym-crypto", "nym-ffi-shared", "nym-sdk", "nym-sphinx-anonymous-replies", @@ -6360,18 +6094,6 @@ dependencies = [ "serde", ] -[[package]] -name = "nym-group-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "cosmwasm-schema", - "cw-controllers", - "cw4", - "schemars 0.8.22", - "serde", -] - [[package]] name = "nym-http-api-client" version = "0.1.0" @@ -6386,10 +6108,10 @@ dependencies = [ "inventory", "itertools 0.14.0", "mime", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-http-api-client-macro", "nym-http-api-common", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "once_cell", "reqwest 0.12.24", "serde", @@ -6443,7 +6165,7 @@ name = "nym-id" version = "0.1.0" dependencies = [ "nym-credential-storage", - "nym-credentials 0.1.0", + "nym-credentials", "thiserror 2.0.17", "time", "tracing", @@ -6457,7 +6179,7 @@ dependencies = [ "anyhow", "bs58", "clap", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-credential-storage", "nym-id", "tokio", @@ -6494,8 +6216,8 @@ version = "0.1.0" dependencies = [ "bincode", "bytes", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", + "nym-bin-common", + "nym-crypto", "nym-service-provider-requests-common", "nym-sphinx", "rand 0.8.5", @@ -6519,14 +6241,14 @@ dependencies = [ "etherparse", "futures", "log", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core", - "nym-config 0.1.0", - "nym-crypto 0.4.0", - "nym-exit-policy 0.1.0", + "nym-config", + "nym-crypto", + "nym-exit-policy", "nym-id", "nym-ip-packet-requests", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-network-requester", "nym-sdk", "nym-service-provider-requests-common", @@ -6536,7 +6258,7 @@ dependencies = [ "nym-tun", "nym-types", "nym-wireguard", - "nym-wireguard-types 0.1.0", + "nym-wireguard-types", "rand 0.8.5", "reqwest 0.12.24", "serde", @@ -6576,7 +6298,7 @@ version = "0.1.0" dependencies = [ "dashmap", "futures", - "nym-crypto 0.4.0", + "nym-crypto", "nym-noise", "nym-sphinx", "nym-task", @@ -6610,27 +6332,6 @@ dependencies = [ "utoipa", ] -[[package]] -name = "nym-mixnet-contract-common" -version = "0.6.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "bs58", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-storage-plus", - "humantime-serde", - "nym-contracts-common", - "schemars 0.8.22", - "semver 1.0.27", - "serde", - "serde_repr", - "thiserror 2.0.17", - "time", - "utoipa", -] - [[package]] name = "nym-mixnode-common" version = "0.1.0" @@ -6639,15 +6340,15 @@ dependencies = [ "futures", "humantime-serde", "log", - "nym-crypto 0.4.0", + "nym-crypto", "nym-metrics", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-sphinx-acknowledgements", "nym-sphinx-addressing", "nym-sphinx-forwarding", "nym-sphinx-framing", "nym-sphinx-params", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "nym-task", "rand 0.8.5", "serde", @@ -6673,22 +6374,6 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "nym-multisig-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "cw3", - "cw4", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - [[package]] name = "nym-network-defaults" version = "0.1.0" @@ -6703,21 +6388,6 @@ dependencies = [ "utoipa", ] -[[package]] -name = "nym-network-defaults" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "cargo_metadata 0.19.2", - "dotenvy", - "log", - "regex", - "schemars 0.8.22", - "serde", - "url", - "utoipa", -] - [[package]] name = "nym-network-monitor" version = "1.0.2" @@ -6728,18 +6398,18 @@ dependencies = [ "dashmap", "futures", "log", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core", - "nym-crypto 0.4.0", + "nym-crypto", "nym-gateway-requests", "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", + "nym-mixnet-contract-common", + "nym-network-defaults", "nym-sdk", "nym-sphinx", "nym-topology", "nym-types", - "nym-validator-client 0.1.0", + "nym-validator-client", "petgraph", "rand 0.8.5", "rand_chacha 0.3.1", @@ -6768,16 +6438,16 @@ dependencies = [ "ipnetwork", "log", "nym-async-file-watcher", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core", "nym-client-websocket-requests", - "nym-config 0.1.0", + "nym-config", "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", - "nym-exit-policy 0.1.0", + "nym-credentials", + "nym-crypto", + "nym-exit-policy", "nym-id", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-ordered-buffer", "nym-sdk", "nym-service-providers-common", @@ -6834,10 +6504,10 @@ dependencies = [ "indicatif", "ipnetwork", "lioness", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core-config-types", - "nym-config 0.1.0", - "nym-crypto 0.4.0", + "nym-config", + "nym-crypto", "nym-gateway", "nym-gateway-stats-storage", "nym-http-api-client", @@ -6847,26 +6517,26 @@ dependencies = [ "nym-mixnet-client", "nym-network-requester", "nym-node-metrics", - "nym-node-requests 0.1.0", + "nym-node-requests", "nym-noise", - "nym-noise-keys 0.1.0", + "nym-noise-keys", "nym-nonexhaustive-delayqueue", - "nym-pemstore 0.3.0", + "nym-pemstore", "nym-sphinx-acknowledgements", "nym-sphinx-addressing", "nym-sphinx-forwarding", "nym-sphinx-framing", "nym-sphinx-params", "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "nym-statistics-common", "nym-task", "nym-topology", "nym-types", - "nym-validator-client 0.1.0", + "nym-validator-client", "nym-verloc", "nym-wireguard", - "nym-wireguard-types 0.1.0", + "nym-wireguard-types", "rand 0.8.5", "rand_chacha 0.3.1", "serde", @@ -6911,47 +6581,24 @@ dependencies = [ "celes", "humantime", "humantime-serde", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", - "nym-exit-policy 0.1.0", + "nym-bin-common", + "nym-crypto", + "nym-exit-policy", "nym-http-api-client", - "nym-noise-keys 0.1.0", - "nym-wireguard-types 0.1.0", + "nym-noise-keys", + "nym-wireguard-types", "rand_chacha 0.3.1", "schemars 0.8.22", "serde", "serde_json", "strum", - "strum_macros 0.27.2", + "strum_macros", "thiserror 2.0.17", "time", "tokio", "utoipa", ] -[[package]] -name = "nym-node-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "celes", - "humantime", - "humantime-serde", - "nym-bin-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-exit-policy 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-noise-keys 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-wireguard-types 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "schemars 0.8.22", - "serde", - "serde_json", - "strum", - "strum_macros 0.27.2", - "thiserror 2.0.17", - "time", - "utoipa", -] - [[package]] name = "nym-node-status-agent" version = "1.0.7" @@ -6959,8 +6606,8 @@ dependencies = [ "anyhow", "clap", "futures", - "nym-bin-common 0.6.0", - "nym-crypto 0.4.0", + "nym-bin-common", + "nym-crypto", "nym-node-status-client", "rand 0.8.5", "tempfile", @@ -6986,23 +6633,23 @@ dependencies = [ "humantime", "itertools 0.14.0", "moka", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-contracts-common", "nym-credential-proxy-lib", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", + "nym-credentials", + "nym-crypto", + "nym-ecash-time", "nym-http-api-client", "nym-http-api-common", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", + "nym-mixnet-contract-common", + "nym-network-defaults", "nym-node-metrics", - "nym-node-requests 0.1.0", + "nym-node-requests", "nym-node-status-client", - "nym-serde-helpers 0.1.0", + "nym-serde-helpers", "nym-statistics-common", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "rand_chacha 0.3.1", "regex", @@ -7013,7 +6660,7 @@ dependencies = [ "serde_json_path", "sqlx", "strum", - "strum_macros 0.27.2", + "strum_macros", "thiserror 2.0.17", "time", "tokio", @@ -7036,8 +6683,8 @@ dependencies = [ "anyhow", "bincode", "bs58", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials", + "nym-crypto", "reqwest 0.12.24", "serde", "serde_json", @@ -7051,7 +6698,7 @@ version = "0.1.0" dependencies = [ "futures", "log", - "nym-crypto 0.4.0", + "nym-crypto", "nym-sphinx", "nym-sphinx-params", "nym-task", @@ -7093,15 +6740,15 @@ dependencies = [ "arc-swap", "bytes", "futures", - "nym-crypto 0.4.0", - "nym-noise-keys 0.1.0", + "nym-crypto", + "nym-noise-keys", "nym-test-utils", "pin-project", "rand_chacha 0.3.1", "sha2 0.10.9", "snow", "strum", - "strum_macros 0.27.2", + "strum_macros", "thiserror 2.0.17", "tokio", "tokio-util", @@ -7112,18 +6759,7 @@ dependencies = [ name = "nym-noise-keys" version = "0.1.0" dependencies = [ - "nym-crypto 0.4.0", - "schemars 0.8.22", - "serde", - "utoipa", -] - -[[package]] -name = "nym-noise-keys" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", + "nym-crypto", "schemars 0.8.22", "serde", "utoipa", @@ -7146,8 +6782,8 @@ dependencies = [ "anyhow", "clap", "log", - "nym-bin-common 0.6.0", - "nym-network-defaults 0.1.0", + "nym-bin-common", + "nym-network-defaults", "nym-sdk", "nym-service-providers-common", "nym-socks5-requests", @@ -7191,16 +6827,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "nym-pemstore" -version = "0.3.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "pem", - "tracing", - "zeroize", -] - [[package]] name = "nym-performance-contract-common" version = "0.1.0" @@ -7214,20 +6840,6 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "nym-performance-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "nym-contracts-common", - "schemars 0.8.22", - "serde", - "thiserror 2.0.17", -] - [[package]] name = "nym-pool-contract-common" version = "0.1.0" @@ -7249,11 +6861,11 @@ dependencies = [ "nym-authenticator-client", "nym-bandwidth-controller", "nym-credential-storage", - "nym-credentials-interface 0.1.0", + "nym-credentials-interface", "nym-ip-packet-client", "nym-registration-common", "nym-sdk", - "nym-validator-client 0.1.0", + "nym-validator-client", "thiserror 2.0.17", "tokio", "tokio-util", @@ -7266,7 +6878,7 @@ name = "nym-registration-common" version = "0.1.0" dependencies = [ "nym-authenticator-requests", - "nym-crypto 0.4.0", + "nym-crypto", "nym-ip-packet-requests", "nym-sphinx", "tokio-util", @@ -7292,19 +6904,19 @@ dependencies = [ "httpcodec", "log", "nym-bandwidth-controller", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core", - "nym-config 0.1.0", + "nym-config", "nym-credential-storage", "nym-credential-utils", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", "nym-gateway-directory", "nym-gateway-requests", "nym-http-api-client", "nym-ip-packet-requests", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-ordered-buffer", "nym-service-providers-common", "nym-socks5-client-core", @@ -7314,7 +6926,7 @@ dependencies = [ "nym-statistics-common", "nym-task", "nym-topology", - "nym-validator-client 0.1.0", + "nym-validator-client", "parking_lot", "pnet_packet", "rand 0.8.5", @@ -7346,18 +6958,6 @@ dependencies = [ "time", ] -[[package]] -name = "nym-serde-helpers" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "base64 0.22.1", - "bs58", - "hex", - "serde", - "time", -] - [[package]] name = "nym-service-provider-requests-common" version = "0.1.0" @@ -7374,7 +6974,7 @@ dependencies = [ "anyhow", "async-trait", "log", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-sdk", "nym-socks5-requests", "nym-sphinx-anonymous-replies", @@ -7392,11 +6992,11 @@ dependencies = [ "clap", "humantime", "itertools 0.14.0", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-ecash-signer-check", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "time", "tokio", "tracing", @@ -7411,21 +7011,21 @@ dependencies = [ "bs58", "clap", "log", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-client-core", - "nym-config 0.1.0", + "nym-config", "nym-credential-storage", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials", + "nym-crypto", "nym-gateway-requests", "nym-id", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-ordered-buffer", - "nym-pemstore 0.3.0", + "nym-pemstore", "nym-socks5-client-core", "nym-sphinx", "nym-topology", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "serde", "serde_json", @@ -7447,17 +7047,17 @@ dependencies = [ "log", "nym-bandwidth-controller", "nym-client-core", - "nym-config 0.1.0", + "nym-config", "nym-contracts-common", "nym-credential-storage", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", + "nym-mixnet-contract-common", + "nym-network-defaults", "nym-service-providers-common", "nym-socks5-proxy-helpers", "nym-socks5-requests", "nym-sphinx", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "pin-project", "rand 0.8.5", "reqwest 0.12.24", @@ -7491,7 +7091,7 @@ version = "0.1.0" dependencies = [ "bincode", "log", - "nym-exit-policy 0.1.0", + "nym-exit-policy", "nym-service-providers-common", "nym-sphinx-addressing", "serde", @@ -7506,9 +7106,9 @@ version = "0.1.0" dependencies = [ "bincode", "log", - "nym-crypto 0.4.0", + "nym-crypto", "nym-metrics", - "nym-mixnet-contract-common 0.6.0", + "nym-mixnet-contract-common", "nym-sphinx-acknowledgements", "nym-sphinx-addressing", "nym-sphinx-anonymous-replies", @@ -7518,7 +7118,7 @@ dependencies = [ "nym-sphinx-framing", "nym-sphinx-params", "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "nym-topology", "rand 0.8.5", "rand_chacha 0.3.1", @@ -7535,12 +7135,12 @@ name = "nym-sphinx-acknowledgements" version = "0.1.0" dependencies = [ "generic-array 0.14.9", - "nym-crypto 0.4.0", - "nym-pemstore 0.3.0", + "nym-crypto", + "nym-pemstore", "nym-sphinx-addressing", "nym-sphinx-params", "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "nym-topology", "rand 0.8.5", "serde", @@ -7553,8 +7153,8 @@ name = "nym-sphinx-addressing" version = "0.1.0" dependencies = [ "bincode", - "nym-crypto 0.4.0", - "nym-sphinx-types 0.2.0", + "nym-crypto", + "nym-sphinx-types", "rand 0.8.5", "serde", "serde_json", @@ -7566,11 +7166,11 @@ name = "nym-sphinx-anonymous-replies" version = "0.1.0" dependencies = [ "bs58", - "nym-crypto 0.4.0", + "nym-crypto", "nym-sphinx-addressing", "nym-sphinx-params", "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "nym-topology", "rand 0.8.5", "rand_chacha 0.3.1", @@ -7586,11 +7186,11 @@ version = "0.1.0" dependencies = [ "dashmap", "log", - "nym-crypto 0.4.0", + "nym-crypto", "nym-metrics", "nym-sphinx-addressing", "nym-sphinx-params", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "rand 0.8.5", "serde", "thiserror 2.0.17", @@ -7602,14 +7202,14 @@ dependencies = [ name = "nym-sphinx-cover" version = "0.1.0" dependencies = [ - "nym-crypto 0.4.0", + "nym-crypto", "nym-sphinx-acknowledgements", "nym-sphinx-addressing", "nym-sphinx-chunking", "nym-sphinx-forwarding", "nym-sphinx-params", "nym-sphinx-routing", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "nym-topology", "rand 0.8.5", "thiserror 2.0.17", @@ -7622,7 +7222,7 @@ dependencies = [ "nym-sphinx-addressing", "nym-sphinx-anonymous-replies", "nym-sphinx-params", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "serde", "thiserror 2.0.17", ] @@ -7636,7 +7236,7 @@ dependencies = [ "nym-sphinx-addressing", "nym-sphinx-forwarding", "nym-sphinx-params", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "thiserror 2.0.17", "tokio", "tokio-util", @@ -7647,8 +7247,8 @@ dependencies = [ name = "nym-sphinx-params" version = "0.1.0" dependencies = [ - "nym-crypto 0.4.0", - "nym-sphinx-types 0.2.0", + "nym-crypto", + "nym-sphinx-types", "serde", "thiserror 2.0.17", ] @@ -7658,7 +7258,7 @@ name = "nym-sphinx-routing" version = "0.1.0" dependencies = [ "nym-sphinx-addressing", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "thiserror 2.0.17", ] @@ -7671,14 +7271,6 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "nym-sphinx-types" -version = "0.2.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "thiserror 2.0.17", -] - [[package]] name = "nym-statistics-api" version = "0.2.1" @@ -7689,12 +7281,12 @@ dependencies = [ "axum-extra", "celes", "clap", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-http-api-client", "nym-http-api-common", "nym-statistics-common", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "serde", "serde_json", "sqlx", @@ -7716,8 +7308,8 @@ version = "0.1.0" dependencies = [ "futures", "log", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials-interface", + "nym-crypto", "nym-metrics", "nym-sphinx", "nym-task", @@ -7726,7 +7318,7 @@ dependencies = [ "sha2 0.10.9", "si-scale", "strum", - "strum_macros 0.27.2", + "strum_macros", "sysinfo", "thiserror 2.0.17", "time", @@ -7783,8 +7375,8 @@ dependencies = [ name = "nym-ticketbooks-merkle" version = "0.1.0" dependencies = [ - "nym-credentials-interface 0.1.0", - "nym-serde-helpers 0.1.0", + "nym-credentials-interface", + "nym-serde-helpers", "rand 0.8.5", "rand_chacha 0.3.1", "rs_merkle", @@ -7796,31 +7388,16 @@ dependencies = [ "utoipa", ] -[[package]] -name = "nym-ticketbooks-merkle" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "nym-credentials-interface 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "rs_merkle", - "schemars 0.8.22", - "serde", - "sha2 0.10.9", - "time", - "utoipa", -] - [[package]] name = "nym-topology" version = "0.1.0" dependencies = [ "async-trait", - "nym-api-requests 0.1.0", - "nym-crypto 0.4.0", - "nym-mixnet-contract-common 0.6.0", + "nym-api-requests", + "nym-crypto", + "nym-mixnet-contract-common", "nym-sphinx-addressing", - "nym-sphinx-types 0.2.0", + "nym-sphinx-types", "rand 0.8.5", "reqwest 0.12.24", "serde", @@ -7839,7 +7416,7 @@ version = "0.1.0" dependencies = [ "etherparse", "log", - "nym-wireguard-types 0.1.0", + "nym-wireguard-types", "thiserror 2.0.17", "tokio", "tokio-tun", @@ -7856,18 +7433,18 @@ dependencies = [ "hmac", "itertools 0.14.0", "log", - "nym-config 0.1.0", - "nym-crypto 0.4.0", - "nym-mixnet-contract-common 0.6.0", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", + "nym-config", + "nym-crypto", + "nym-mixnet-contract-common", + "nym-validator-client", + "nym-vesting-contract-common", "reqwest 0.12.24", "schemars 0.8.22", "serde", "serde_json", "sha2 0.10.9", "strum", - "strum_macros 0.27.2", + "strum_macros", "tempfile", "thiserror 2.0.17", "ts-rs", @@ -7882,7 +7459,7 @@ version = "0.1.0" dependencies = [ "anyhow", "jwt-simple", - "nym-crypto 0.4.0", + "nym-crypto", "nym-http-api-client", "reqwest 0.12.24", "serde", @@ -7912,20 +7489,20 @@ dependencies = [ "flate2", "futures", "itertools 0.14.0", - "nym-api-requests 0.1.0", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", + "nym-api-requests", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", "nym-contracts-common", - "nym-ecash-contract-common 0.1.0", - "nym-group-contract-common 0.1.0", + "nym-ecash-contract-common", + "nym-group-contract-common", "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0", - "nym-multisig-contract-common 0.1.0", - "nym-network-defaults 0.1.0", - "nym-performance-contract-common 0.1.0", - "nym-serde-helpers 0.1.0", - "nym-vesting-contract-common 0.7.0", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-network-defaults", + "nym-performance-contract-common", + "nym-serde-helpers", + "nym-vesting-contract-common", "prost", "reqwest 0.12.24", "serde", @@ -7942,56 +7519,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "nym-validator-client" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bip32", - "bip39", - "colored", - "cosmrs", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "cw3", - "cw4", - "eyre", - "flate2", - "futures", - "itertools 0.14.0", - "nym-api-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-coconut-dkg-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-contracts-common", - "nym-ecash-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-group-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-multisig-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-performance-contract-common 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-serde-helpers 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-vesting-contract-common 0.7.0 (git+https://github.com/nymtech/nym?branch=develop)", - "prost", - "reqwest 0.12.24", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint-rpc", - "thiserror 2.0.17", - "time", - "tokio", - "tracing", - "url", - "wasmtimer", - "zeroize", -] - [[package]] name = "nym-validator-rewarder" version = "0.3.0" @@ -8003,22 +7530,22 @@ dependencies = [ "futures", "humantime", "humantime-serde", - "nym-bin-common 0.6.0", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", + "nym-bin-common", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", "nym-contracts-common", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-pemstore 0.3.0", - "nym-serde-helpers 0.1.0", + "nym-network-defaults", + "nym-pemstore", + "nym-serde-helpers", "nym-task", - "nym-ticketbooks-merkle 0.1.0", - "nym-validator-client 0.1.0", + "nym-ticketbooks-merkle", + "nym-validator-client", "nyxd-scraper", "rand 0.8.5", "rand_chacha 0.3.1", @@ -8042,11 +7569,11 @@ dependencies = [ "bytes", "futures", "humantime", - "nym-api-requests 0.1.0", - "nym-crypto 0.4.0", + "nym-api-requests", + "nym-crypto", "nym-http-api-client", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "thiserror 2.0.17", "time", @@ -8064,56 +7591,12 @@ dependencies = [ "cosmwasm-std", "cw2", "nym-contracts-common", - "nym-mixnet-contract-common 0.6.0", + "nym-mixnet-contract-common", "serde", "thiserror 2.0.17", "ts-rs", ] -[[package]] -name = "nym-vesting-contract-common" -version = "0.7.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "nym-contracts-common", - "nym-mixnet-contract-common 0.6.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "nym-vpn-api-client" -version = "1.17.0-beta" -source = "git+https://github.com/nymtech/nym-vpn-client/?rev=5ab01ba06057449614dd6a8450d04358c5ec33d1#5ab01ba06057449614dd6a8450d04358c5ec33d1" -dependencies = [ - "backon", - "base64-url", - "bip39", - "bs58", - "chrono", - "itertools 0.13.0", - "nym-compact-ecash 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-contracts-common", - "nym-credential-proxy-requests 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-crypto 0.4.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-http-api-client", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-validator-client 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "serde_json", - "sha2 0.10.9", - "strum", - "strum_macros 0.26.4", - "thiserror 2.0.17", - "time", - "tracing", - "url", - "zeroize", -] - [[package]] name = "nym-vpn-api-lib-wasm" version = "0.1.0" @@ -8121,13 +7604,13 @@ dependencies = [ "bs58", "getrandom 0.2.16", "js-sys", - "nym-bin-common 0.6.0", - "nym-compact-ecash 0.1.0", - "nym-credential-proxy-requests 0.1.0", - "nym-credentials 0.1.0", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", - "nym-ecash-time 0.1.0", + "nym-bin-common", + "nym-compact-ecash", + "nym-credential-proxy-requests", + "nym-credentials", + "nym-credentials-interface", + "nym-crypto", + "nym-ecash-time", "serde", "serde-wasm-bindgen 0.6.5", "serde_json", @@ -8146,16 +7629,16 @@ dependencies = [ "cosmrs", "cosmwasm-std", "hex-literal", - "nym-config 0.1.0", - "nym-mixnet-contract-common 0.6.0", - "nym-network-defaults 0.1.0", + "nym-config", + "nym-mixnet-contract-common", + "nym-network-defaults", "nym-types", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", + "nym-validator-client", + "nym-vesting-contract-common", "serde", "serde_json", "strum", - "strum_macros 0.27.2", + "strum_macros", "ts-rs", ] @@ -8175,14 +7658,14 @@ dependencies = [ "log", "nym-authenticator-requests", "nym-credential-verification", - "nym-credentials-interface 0.1.0", - "nym-crypto 0.4.0", + "nym-credentials-interface", + "nym-crypto", "nym-gateway-requests", "nym-gateway-storage", - "nym-network-defaults 0.1.0", + "nym-network-defaults", "nym-node-metrics", "nym-task", - "nym-wireguard-types 0.1.0", + "nym-wireguard-types", "thiserror 2.0.17", "time", "tokio", @@ -8210,7 +7693,7 @@ dependencies = [ "axum", "futures", "nym-credential-verification", - "nym-credentials-interface 0.1.0", + "nym-credentials-interface", "nym-http-api-common", "nym-wireguard", "nym-wireguard-private-metadata-shared", @@ -8227,7 +7710,7 @@ version = "1.0.0" dependencies = [ "axum", "bincode", - "nym-credentials-interface 0.1.0", + "nym-credentials-interface", "schemars 0.8.22", "serde", "thiserror 2.0.17", @@ -8241,7 +7724,7 @@ dependencies = [ "async-trait", "axum", "nym-credential-verification", - "nym-credentials-interface 0.1.0", + "nym-credentials-interface", "nym-http-api-client", "nym-http-api-common", "nym-wireguard", @@ -8259,29 +7742,15 @@ version = "0.1.0" dependencies = [ "base64 0.22.1", "log", - "nym-config 0.1.0", - "nym-crypto 0.4.0", - "nym-network-defaults 0.1.0", + "nym-config", + "nym-crypto", + "nym-network-defaults", "rand 0.8.5", "serde", "thiserror 2.0.17", "x25519-dalek", ] -[[package]] -name = "nym-wireguard-types" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?branch=develop#9f9639950b93369ecdbd0874f775b21ab8c65662" -dependencies = [ - "base64 0.22.1", - "log", - "nym-config 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "nym-network-defaults 0.1.0 (git+https://github.com/nymtech/nym?branch=develop)", - "serde", - "thiserror 2.0.17", - "x25519-dalek", -] - [[package]] name = "nymvisor" version = "0.1.29" @@ -8297,8 +7766,8 @@ dependencies = [ "humantime-serde", "nix 0.27.1", "nym-async-file-watcher", - "nym-bin-common 0.6.0", - "nym-config 0.1.0", + "nym-bin-common", + "nym-config", "nym-task", "reqwest 0.12.24", "serde", @@ -8321,11 +7790,11 @@ dependencies = [ "axum", "chrono", "clap", - "nym-bin-common 0.6.0", - "nym-config 0.1.0", - "nym-network-defaults 0.1.0", + "nym-bin-common", + "nym-config", + "nym-network-defaults", "nym-task", - "nym-validator-client 0.1.0", + "nym-validator-client", "nyxd-scraper", "reqwest 0.12.24", "schemars 0.8.22", @@ -10865,20 +10334,7 @@ version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "strum_macros 0.27.2", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.107", + "strum_macros", ] [[package]] @@ -11191,21 +10647,21 @@ dependencies = [ "dkg-bypass-contract", "humantime", "indicatif", - "nym-bin-common 0.6.0", - "nym-coconut-dkg-common 0.1.0", - "nym-compact-ecash 0.1.0", - "nym-config 0.1.0", + "nym-bin-common", + "nym-coconut-dkg-common", + "nym-compact-ecash", + "nym-config", "nym-contracts-common", - "nym-crypto 0.4.0", - "nym-ecash-contract-common 0.1.0", - "nym-group-contract-common 0.1.0", + "nym-crypto", + "nym-ecash-contract-common", + "nym-group-contract-common", "nym-http-api-client", - "nym-mixnet-contract-common 0.6.0", - "nym-multisig-contract-common 0.1.0", - "nym-pemstore 0.3.0", - "nym-performance-contract-common 0.1.0", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", + "nym-mixnet-contract-common", + "nym-multisig-contract-common", + "nym-pemstore", + "nym-performance-contract-common", + "nym-validator-client", + "nym-vesting-contract-common", "rand 0.8.5", "serde", "serde_json", @@ -11942,11 +11398,11 @@ name = "ts-rs-cli" version = "0.1.0" dependencies = [ "anyhow", - "nym-api-requests 0.1.0", - "nym-mixnet-contract-common 0.6.0", + "nym-api-requests", + "nym-mixnet-contract-common", "nym-types", - "nym-validator-client 0.1.0", - "nym-vesting-contract-common 0.7.0", + "nym-validator-client", + "nym-vesting-contract-common", "nym-wallet-types", "ts-rs", "walkdir", @@ -12392,10 +11848,10 @@ dependencies = [ "anyhow", "clap", "comfy-table", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-http-api-client", - "nym-network-defaults 0.1.0", - "nym-validator-client 0.1.0", + "nym-network-defaults", + "nym-validator-client", "serde", "serde_json", "strum", @@ -12671,9 +12127,9 @@ dependencies = [ "js-sys", "nym-bandwidth-controller", "nym-client-core", - "nym-config 0.1.0", + "nym-config", "nym-credential-storage", - "nym-crypto 0.4.0", + "nym-crypto", "nym-gateway-client", "nym-http-api-client", "nym-sphinx", @@ -12681,7 +12137,7 @@ dependencies = [ "nym-statistics-common", "nym-task", "nym-topology", - "nym-validator-client 0.1.0", + "nym-validator-client", "rand 0.8.5", "serde", "serde-wasm-bindgen 0.6.5", @@ -13503,10 +12959,10 @@ dependencies = [ "bs58", "getrandom 0.2.16", "js-sys", - "nym-bin-common 0.6.0", - "nym-compact-ecash 0.1.0", - "nym-credentials 0.1.0", - "nym-crypto 0.4.0", + "nym-bin-common", + "nym-compact-ecash", + "nym-credentials", + "nym-crypto", "nym-http-api-client", "rand 0.8.5", "reqwest 0.12.24", @@ -13566,7 +13022,7 @@ name = "zulip-client" version = "0.1.0" dependencies = [ "itertools 0.14.0", - "nym-bin-common 0.6.0", + "nym-bin-common", "nym-http-api-client", "reqwest 0.12.24", "serde", diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 7c476172105..744ed703a41 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -16,10 +16,11 @@ nym-http-api-client = { path = "../common/http-api-client" } nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo nym-validator-client = { path = "../common/client-libs/validator-client" } -nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } +# nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } nym-crypto = { path = "../common/crypto" } nym-sphinx-addressing = { path = "../common/nymsphinx/addressing" } nym-network-defaults = { path = "../common/network-defaults" } +nym-contracts-common = { path = "../common/cosmwasm-smart-contracts/contracts-common" } rand.workspace = true serde.workspace = true diff --git a/nym-gateway-directory/src/entries/country.rs b/nym-gateway-directory/src/entries/country.rs index 0a93685e7bf..537c3deb6bf 100644 --- a/nym-gateway-directory/src/entries/country.rs +++ b/nym-gateway-directory/src/entries/country.rs @@ -1,7 +1,7 @@ // Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use crate::Location; +use crate::{Location, NymDirectoryCountry}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Country { @@ -14,8 +14,8 @@ impl Country { } } -impl From for Country { - fn from(country: nym_vpn_api_client::response::NymDirectoryCountry) -> Self { +impl From for Country { + fn from(country: NymDirectoryCountry) -> Self { Self { iso_code: country.iso_code().to_string(), } diff --git a/nym-gateway-directory/src/entries/gateway.rs b/nym-gateway-directory/src/entries/gateway.rs index 1c99a3a73d4..c64f5ee2625 100644 --- a/nym-gateway-directory/src/entries/gateway.rs +++ b/nym-gateway-directory/src/entries/gateway.rs @@ -1,15 +1,12 @@ // Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only - use itertools::Itertools; +use nym_contracts_common::Percent; use nym_sphinx::addressing::nodes::NodeIdentity; use nym_topology::{NodeId, RoutingNode}; use nym_validator_client::models::{KeyRotationId, NymNodeDescription}; -use nym_vpn_api_client::{ - response::{BridgeInformation, BridgeParameters}, - types::{Percent, ScoreThresholds}, -}; use rand::seq::IteratorRandom; +use serde::{Deserialize, Serialize}; use std::{ fmt::{self, Display}, net::{IpAddr, Ipv4Addr, Ipv6Addr}, @@ -18,14 +15,13 @@ use std::{ use tracing::error; use crate::{ - AuthAddress, Country, Error, IpPacketRouterAddress, + AuthAddress, BridgeInformation, BridgeParameters, Country, Error, IpPacketRouterAddress, + ScoreThresholds, entries::score::{HIGH_SCORE_THRESHOLD, LOW_SCORE_THRESHOLD, MEDIUM_SCORE_THRESHOLD, Score}, error::Result, helpers, }; -// pub type NymNode = Gateway; - pub const COUNTRY_WITH_REGION_SELECTOR: &str = "US"; #[derive(Clone)] @@ -286,7 +282,7 @@ pub struct Location { pub asn: Option, } -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] pub enum ScoreValue { Offline, Low, @@ -391,17 +387,17 @@ pub struct WgProbeResults { pub ping_ips_performance: f32, } -impl From for AsnKind { - fn from(value: nym_vpn_api_client::response::AsnKind) -> Self { +impl From for AsnKind { + fn from(value: helpers::AsnKind) -> Self { match value { - nym_vpn_api_client::response::AsnKind::Residential => AsnKind::Residential, - nym_vpn_api_client::response::AsnKind::Other => AsnKind::Other, + helpers::AsnKind::Residential => AsnKind::Residential, + helpers::AsnKind::Other => AsnKind::Other, } } } -impl From for Asn { - fn from(location: nym_vpn_api_client::response::Asn) -> Self { +impl From for Asn { + fn from(location: helpers::Asn) -> Self { Asn { asn: location.asn, name: location.name, @@ -410,8 +406,8 @@ impl From for Asn { } } -impl From for Location { - fn from(location: nym_vpn_api_client::response::Location) -> Self { +impl From for Location { + fn from(location: helpers::Location) -> Self { Location { two_letter_iso_country_code: location.two_letter_iso_country_code, latitude: location.latitude, @@ -423,36 +419,36 @@ impl From for Location { } } -impl From for ScoreValue { - fn from(value: nym_vpn_api_client::response::ScoreValue) -> Self { - match value { - nym_vpn_api_client::response::ScoreValue::Offline => ScoreValue::Offline, - nym_vpn_api_client::response::ScoreValue::Low => ScoreValue::Low, - nym_vpn_api_client::response::ScoreValue::Medium => ScoreValue::Medium, - nym_vpn_api_client::response::ScoreValue::High => ScoreValue::High, - } - } -} +// impl From for ScoreValue { +// fn from(value: nym_vpn_api_client::response::ScoreValue) -> Self { +// match value { +// nym_vpn_api_client::response::ScoreValue::Offline => ScoreValue::Offline, +// nym_vpn_api_client::response::ScoreValue::Low => ScoreValue::Low, +// nym_vpn_api_client::response::ScoreValue::Medium => ScoreValue::Medium, +// nym_vpn_api_client::response::ScoreValue::High => ScoreValue::High, +// } +// } +// } -impl From for Performance { - fn from(value: nym_vpn_api_client::response::DVpnGatewayPerformance) -> Self { - Performance { - last_updated_utc: value.last_updated_utc, - score: value.score.into(), - load: value.load.into(), - uptime_percentage_last_24_hours: value.uptime_percentage_last_24_hours, - } - } -} +// impl From for Performance { +// fn from(value: nym_vpn_api_client::response::DVpnGatewayPerformance) -> Self { +// Performance { +// last_updated_utc: value.last_updated_utc, +// score: value.score.into(), +// load: value.load.into(), +// uptime_percentage_last_24_hours: value.uptime_percentage_last_24_hours, +// } +// } +// } -impl From for Probe { - fn from(probe: nym_vpn_api_client::response::Probe) -> Self { - Probe { - last_updated_utc: probe.last_updated_utc, - outcome: ProbeOutcome::from(probe.outcome), - } - } -} +// impl From for Probe { +// fn from(probe: nym_vpn_api_client::response::Probe) -> Self { +// Probe { +// last_updated_utc: probe.last_updated_utc, +// outcome: ProbeOutcome::from(probe.outcome), +// } +// } +// } impl From for Score { fn from(percent: Percent) -> Self { @@ -469,96 +465,96 @@ impl From for Score { } } -impl From for ProbeOutcome { - fn from(outcome: nym_vpn_api_client::response::ProbeOutcome) -> Self { - ProbeOutcome { - as_entry: Entry::from(outcome.as_entry), - as_exit: outcome.as_exit.map(Exit::from), - wg: outcome.wg.map(WgProbeResults::from), - } - } -} - -impl From for Entry { - fn from(entry: nym_vpn_api_client::response::Entry) -> Self { - Entry { - can_connect: entry.can_connect, - can_route: entry.can_route, - } - } -} - -impl From for Exit { - fn from(exit: nym_vpn_api_client::response::Exit) -> Self { - Exit { - can_connect: exit.can_connect, - can_route_ip_v4: exit.can_route_ip_v4, - can_route_ip_external_v4: exit.can_route_ip_external_v4, - can_route_ip_v6: exit.can_route_ip_v6, - can_route_ip_external_v6: exit.can_route_ip_external_v6, - } - } -} - -impl From for WgProbeResults { - fn from(results: nym_vpn_api_client::response::WgProbeResults) -> Self { - WgProbeResults { - can_register: results.can_register, - can_handshake: results.can_handshake, - can_resolve_dns: results.can_resolve_dns, - ping_hosts_performance: results.ping_hosts_performance, - ping_ips_performance: results.ping_ips_performance, - } - } -} - -impl TryFrom for Gateway { - type Error = Error; - - fn try_from(gateway: nym_vpn_api_client::response::NymDirectoryGateway) -> Result { - let identity = - NodeIdentity::from_base58_string(&gateway.identity_key).map_err(|source| { - Error::NodeIdentityFormattingError { - identity: gateway.identity_key, - source, - } - })?; +// impl From for ProbeOutcome { +// fn from(outcome: nym_vpn_api_client::response::ProbeOutcome) -> Self { +// ProbeOutcome { +// as_entry: Entry::from(outcome.as_entry), +// as_exit: outcome.as_exit.map(Exit::from), +// wg: outcome.wg.map(WgProbeResults::from), +// } +// } +// } - let ipr_address = gateway - .ip_packet_router - .and_then(|ipr| IpPacketRouterAddress::try_from_base58_string(&ipr.address).ok()); +// impl From for Entry { +// fn from(entry: nym_vpn_api_client::response::Entry) -> Self { +// Entry { +// can_connect: entry.can_connect, +// can_route: entry.can_route, +// } +// } +// } - let authenticator_address = gateway - .authenticator - .and_then(|auth| AuthAddress::try_from_base58_string(&auth.address).ok()); +// impl From for Exit { +// fn from(exit: nym_vpn_api_client::response::Exit) -> Self { +// Exit { +// can_connect: exit.can_connect, +// can_route_ip_v4: exit.can_route_ip_v4, +// can_route_ip_external_v4: exit.can_route_ip_external_v4, +// can_route_ip_v6: exit.can_route_ip_v6, +// can_route_ip_external_v6: exit.can_route_ip_external_v6, +// } +// } +// } - let hostname = gateway.entry.hostname; - let first_ip_address = gateway - .ip_addresses - .first() - .cloned() - .map(|ip| ip.to_string()); - let host = hostname.or(first_ip_address); +// impl From for WgProbeResults { +// fn from(results: nym_vpn_api_client::response::WgProbeResults) -> Self { +// WgProbeResults { +// can_register: results.can_register, +// can_handshake: results.can_handshake, +// can_resolve_dns: results.can_resolve_dns, +// ping_hosts_performance: results.ping_hosts_performance, +// ping_ips_performance: results.ping_ips_performance, +// } +// } +// } - Ok(Gateway { - identity, - moniker: gateway.name, - location: Some(gateway.location.into()), - ipr_address, - authenticator_address, - bridge_params: gateway.bridges, - last_probe: gateway.last_probe.map(Probe::from), - ips: gateway.ip_addresses, - host, - clients_ws_port: Some(gateway.entry.ws_port), - clients_wss_port: gateway.entry.wss_port, - mixnet_performance: Some(gateway.performance), - mixnet_score: Some(Score::from(gateway.performance)), - wg_performance: gateway.performance_v2.map(Performance::from), - version: gateway.build_information.map(|info| info.build_version), - }) - } -} +// impl TryFrom for Gateway { +// type Error = Error; + +// fn try_from(gateway: nym_vpn_api_client::response::NymDirectoryGateway) -> Result { +// let identity = +// NodeIdentity::from_base58_string(&gateway.identity_key).map_err(|source| { +// Error::NodeIdentityFormattingError { +// identity: gateway.identity_key, +// source, +// } +// })?; + +// let ipr_address = gateway +// .ip_packet_router +// .and_then(|ipr| IpPacketRouterAddress::try_from_base58_string(&ipr.address).ok()); + +// let authenticator_address = gateway +// .authenticator +// .and_then(|auth| AuthAddress::try_from_base58_string(&auth.address).ok()); + +// let hostname = gateway.entry.hostname; +// let first_ip_address = gateway +// .ip_addresses +// .first() +// .cloned() +// .map(|ip| ip.to_string()); +// let host = hostname.or(first_ip_address); + +// Ok(Gateway { +// identity, +// moniker: gateway.name, +// location: Some(gateway.location.into()), +// ipr_address, +// authenticator_address, +// bridge_params: gateway.bridges, +// last_probe: gateway.last_probe.map(Probe::from), +// ips: gateway.ip_addresses, +// host, +// clients_ws_port: Some(gateway.entry.ws_port), +// clients_wss_port: gateway.entry.wss_port, +// mixnet_performance: Some(gateway.performance), +// mixnet_score: Some(Score::from(gateway.performance)), +// wg_performance: gateway.performance_v2.map(Performance::from), +// version: gateway.build_information.map(|info| info.build_version), +// }) +// } +// } pub type NymNodeList = GatewayList; @@ -702,22 +698,22 @@ impl fmt::Display for GatewayType { } } -impl From for GatewayType { - fn from(gateway_type: nym_vpn_api_client::types::GatewayType) -> Self { +impl From for GatewayType { + fn from(gateway_type: helpers::GatewayType) -> Self { match gateway_type { - nym_vpn_api_client::types::GatewayType::MixnetEntry => GatewayType::MixnetEntry, - nym_vpn_api_client::types::GatewayType::MixnetExit => GatewayType::MixnetExit, - nym_vpn_api_client::types::GatewayType::Wg => GatewayType::Wg, + helpers::GatewayType::MixnetEntry => GatewayType::MixnetEntry, + helpers::GatewayType::MixnetExit => GatewayType::MixnetExit, + helpers::GatewayType::Wg => GatewayType::Wg, } } } -impl From for nym_vpn_api_client::types::GatewayType { +impl From for helpers::GatewayType { fn from(gateway_type: GatewayType) -> Self { match gateway_type { - GatewayType::MixnetEntry => nym_vpn_api_client::types::GatewayType::MixnetEntry, - GatewayType::MixnetExit => nym_vpn_api_client::types::GatewayType::MixnetExit, - GatewayType::Wg => nym_vpn_api_client::types::GatewayType::Wg, + GatewayType::MixnetEntry => helpers::GatewayType::MixnetEntry, + GatewayType::MixnetExit => helpers::GatewayType::MixnetExit, + GatewayType::Wg => helpers::GatewayType::Wg, } } } @@ -731,189 +727,3 @@ pub enum GatewayFilter { Exit, // Has an IPR address Vpn, // Has an authenticator address } - -// #[derive(Debug, Clone, PartialEq)] -// pub struct GatewayFilters { -// pub gw_type: GatewayType, -// pub filters: Vec, -// } - -#[cfg(test)] -mod tests { - use super::*; - - // Create a list of Gateways with different properties set for testing - fn sample_gateway_list(gw_type: GatewayType) -> GatewayList { - let asn = Asn { - asn: "AS12345".to_string(), - name: "Test ASN".to_string(), - kind: AsnKind::Residential, - }; - let addr = "MNrmKzuKjNdbEhfPUzVNfjw63oBQNSayqoQKGL4JjAV.6fDcSN6faGpvA3pd3riCwjpzXc7RQfWmGMa82UVoEwKE@d5adfJNtcdZW2XwK85JAAU8nXAs9JCPYn2RNvDLZn4e"; - let ipr = IpPacketRouterAddress::try_from_base58_string(addr).unwrap(); - let aa = AuthAddress::try_from_base58_string(addr).unwrap(); - let variables = [ - ("US", "CA", None, Some(ipr), Some(aa)), // Gateway 1 - ("US", "NY", Some(asn.clone()), None, None), // Gateway 2 - ("DE", "BE", None, None, Some(aa)), // Gateway 3 - ("FR", "Aquitaine", Some(asn.clone()), None, Some(aa)), // Gateway 4 - ("US", "TX", Some(asn.clone()), Some(ipr), None), // Gateway 5 - ("GB", "Hampshire", None, None, None), // Gateway 6 - ]; - - let mut instance = 0; - let gateways: Vec = variables - .into_iter() - .map(|(country, region, asn, ipr, aa)| { - instance += 1; - Gateway { - identity: NodeIdentity::from_base58_string( - "7CWjY3QFoA9dgE535u9bQiXCfzgMZvSpJu842GA1Wn42", - ) - .unwrap(), - moniker: format!("Gateway {instance}"), - location: Some(Location { - two_letter_iso_country_code: country.to_string(), - region: region.to_string(), - asn, - ..Default::default() - }), - ipr_address: ipr, - authenticator_address: aa, - bridge_params: None, - last_probe: None, - ips: Vec::new(), - host: None, - clients_ws_port: None, - clients_wss_port: None, - mixnet_performance: Some(Percent::from_percentage_value(75).unwrap()), - mixnet_score: None, - wg_performance: Some(Performance { - last_updated_utc: "2024-01-01T00:00:00Z".to_string(), - score: ScoreValue::High, - load: ScoreValue::Low, - uptime_percentage_last_24_hours: 0.75, - }), - version: None, - } - }) - .collect(); - GatewayList::new(Some(gw_type), gateways) - } - - #[test] - fn test_gateway_filter_score() { - let wg_list = sample_gateway_list(GatewayType::Wg); - let mixnet_entry_list = sample_gateway_list(GatewayType::MixnetEntry); - let mixnet_exit_list = sample_gateway_list(GatewayType::MixnetExit); - - let gws = wg_list.filter(&[GatewayFilter::MinScore(ScoreValue::High)]); - assert_eq!(gws.len(), 6); - let gws = wg_list.filter(&[GatewayFilter::MinScore(ScoreValue::Medium)]); - assert_eq!(gws.len(), 6); - let gws = wg_list.filter(&[GatewayFilter::MinScore(ScoreValue::Low)]); - assert_eq!(gws.len(), 6); - - let gws = mixnet_entry_list.filter(&[GatewayFilter::MinScore(ScoreValue::High)]); - assert_eq!(gws.len(), 0); - let gws = mixnet_entry_list.filter(&[GatewayFilter::MinScore(ScoreValue::Medium)]); - assert_eq!(gws.len(), 6); - let gws = mixnet_entry_list.filter(&[GatewayFilter::MinScore(ScoreValue::Low)]); - assert_eq!(gws.len(), 6); - - let gws = mixnet_exit_list.filter(&[GatewayFilter::MinScore(ScoreValue::High)]); - assert_eq!(gws.len(), 0); - let gws = mixnet_exit_list.filter(&[GatewayFilter::MinScore(ScoreValue::Medium)]); - assert_eq!(gws.len(), 6); - let gws = mixnet_exit_list.filter(&[GatewayFilter::MinScore(ScoreValue::Low)]); - assert_eq!(gws.len(), 6); - } - - #[test] - fn test_gateway_filter_exit_nodes() { - let gateway_list = sample_gateway_list(GatewayType::MixnetEntry); - let exit_gws = gateway_list.filter(&[GatewayFilter::Exit]); - assert_eq!(exit_gws.len(), 2); - assert_eq!(exit_gws[0].moniker, "Gateway 1"); - assert_eq!(exit_gws[1].moniker, "Gateway 5"); - } - - #[test] - fn test_gateway_filter_vpn_nodes() { - let gateway_list = sample_gateway_list(GatewayType::MixnetExit); - let vpn_gws = gateway_list.filter(&[GatewayFilter::Vpn]); - assert_eq!(vpn_gws.len(), 3); - assert_eq!(vpn_gws[0].moniker, "Gateway 1"); - assert_eq!(vpn_gws[1].moniker, "Gateway 3"); - assert_eq!(vpn_gws[2].moniker, "Gateway 4"); - } - - #[test] - fn test_gateway_filter_residential() { - let gateway_list = sample_gateway_list(GatewayType::Wg); - let residential_gws = gateway_list.filter(&[GatewayFilter::Residential]); - assert_eq!(residential_gws.len(), 3); - assert_eq!(residential_gws[0].moniker, "Gateway 2"); - assert_eq!(residential_gws[1].moniker, "Gateway 4"); - assert_eq!(residential_gws[2].moniker, "Gateway 5"); - } - - #[test] - fn test_gateway_random_country() { - let gateway_list = sample_gateway_list(GatewayType::MixnetEntry); - - assert!( - gateway_list - .choose_random(&[GatewayFilter::Country("US".into())]) - .unwrap() - .is_in_country("US") - ); - - assert!( - gateway_list - .choose_random(&[GatewayFilter::Country("DE".into())]) - .unwrap() - .is_in_country("DE") - ); - - assert!( - gateway_list - .choose_random(&[GatewayFilter::Country("BE".into())]) - .is_none() - ); - } - - #[test] - fn test_gateway_random_region() { - let gateway_list = sample_gateway_list(GatewayType::MixnetExit); - - assert!( - gateway_list - .choose_random(&[ - GatewayFilter::Country("US".into()), - GatewayFilter::Region("CA".into()) - ]) - .unwrap() - .is_in_region("CA") - ); - - assert!( - gateway_list - .choose_random(&[ - GatewayFilter::Country("GB".into()), - GatewayFilter::Region("Hampshire".into()) - ]) - .unwrap() - .is_in_region("Hampshire") - ); - - assert!( - gateway_list - .choose_random(&[ - GatewayFilter::Country("DE".into()), - GatewayFilter::Region("XZ".into()) - ]) - .is_none() - ); - } -} diff --git a/nym-gateway-directory/src/entries/ipr_addresses.rs b/nym-gateway-directory/src/entries/ipr_addresses.rs index 37c596f5c0a..42de5ef8787 100644 --- a/nym-gateway-directory/src/entries/ipr_addresses.rs +++ b/nym-gateway-directory/src/entries/ipr_addresses.rs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: GPL-3.0-only use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::addressing::nodes::NodeIdentity; -// use nym_sdk::mixnet::{NodeIdentity, Recipient}; use nym_validator_client::models::NymNodeData; use crate::{Error, error::Result}; diff --git a/nym-gateway-directory/src/entries/score.rs b/nym-gateway-directory/src/entries/score.rs index 490be6c8cbf..5024ffab3d4 100644 --- a/nym-gateway-directory/src/entries/score.rs +++ b/nym-gateway-directory/src/entries/score.rs @@ -1,7 +1,7 @@ // Copyright 2025 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use nym_vpn_api_client::types::ScoreThresholds; +use crate::helpers::ScoreThresholds; pub(crate) const HIGH_SCORE_THRESHOLD: u8 = 80; pub(crate) const MEDIUM_SCORE_THRESHOLD: u8 = 60; diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index 6dadb0365f2..0eed52fba3f 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -6,21 +6,20 @@ use std::{ net::{IpAddr, SocketAddr}, }; +use crate::{ + Error, GatewayMinPerformance, ScoreThresholds, + entries::gateway::{Gateway, GatewayList, GatewayType, NymNodeList}, + error::Result, +}; +use nym_contracts_common::Percent; use nym_http_api_client::UserAgent; use nym_validator_client::{ models::NymNodeDescription, nym_api::NymApiClientExt, nym_nodes::SkimmedNodesWithMetadata, }; -use nym_vpn_api_client::types::{GatewayMinPerformance, Percent, ScoreThresholds}; use rand::{prelude::SliceRandom, thread_rng}; use tracing::{debug, error, warn}; use url::Url; -use crate::{ - Error, - entries::gateway::{Gateway, GatewayList, GatewayType, NymNodeList}, - error::Result, -}; - #[derive(Clone, Debug)] pub struct Config { pub nyxd_url: Url, diff --git a/nym-gateway-directory/src/helpers.rs b/nym-gateway-directory/src/helpers.rs index 4c023d4ef59..ba6995f6551 100644 --- a/nym-gateway-directory/src/helpers.rs +++ b/nym-gateway-directory/src/helpers.rs @@ -1,6 +1,9 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only +use crate::ScoreValue; +use nym_contracts_common::Percent; +use serde::{Deserialize, Serialize}; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; pub fn split_ips(ips: Vec) -> (Vec, Vec) { @@ -13,3 +16,119 @@ pub fn split_ips(ips: Vec) -> (Vec, Vec) { (v4, v6) }) } + +// Types copied in from nym-vpn-client/nym-vpn-core/crates/nym-vpn-api-client + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct NymDirectoryCountry(String); + +impl NymDirectoryCountry { + pub fn iso_code(&self) -> &str { + &self.0 + } + pub fn into_string(self) -> String { + self.0 + } +} + +impl From for NymDirectoryCountry { + fn from(s: String) -> Self { + Self(s) + } +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct ScoreThresholds { + pub high: u8, + pub medium: u8, + pub low: u8, +} + +#[derive(Clone, Debug)] +pub enum GatewayType { + MixnetEntry, + MixnetExit, + Wg, +} + +#[derive(Clone, Copy, Default, Debug, Eq, PartialEq)] +pub struct GatewayMinPerformance { + pub mixnet_min_performance: Option, + pub vpn_min_performance: Option, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct BridgeInformation { + pub version: String, + pub transports: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(tag = "transport_type", content = "args")] +#[serde(rename_all = "snake_case")] +pub enum BridgeParameters { + QuicPlain(QuicClientOptions), +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct QuicClientOptions { + /// Address describing the remote transport server. This is a vec to support multiple addresses + /// so as to support both IPv4 and IPv6. These addresses are meant to describe a single bridge + /// as the key material should not be used across multiple instances. + pub addresses: Vec, + + /// Override hostname used for certificate verification + pub host: Option, + + /// Use identity public key to verify server self signed certificate + pub id_pubkey: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum AsnKind { + Residential, + Other, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Asn { + pub asn: String, + pub name: String, + pub kind: AsnKind, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Entry { + pub can_connect: bool, + pub can_route: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Exit { + pub can_connect: bool, + pub can_route_ip_v4: bool, + pub can_route_ip_external_v4: bool, + pub can_route_ip_v6: bool, + pub can_route_ip_external_v6: bool, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Location { + pub two_letter_iso_country_code: String, + pub latitude: f64, + pub longitude: f64, + + pub city: String, + pub region: String, + + pub asn: Option, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct DVpnGatewayPerformance { + pub last_updated_utc: String, + pub score: ScoreValue, + pub load: ScoreValue, + pub uptime_percentage_last_24_hours: f32, +} diff --git a/nym-gateway-directory/src/lib.rs b/nym-gateway-directory/src/lib.rs index 1ca4741d8cf..25b97bcb226 100644 --- a/nym-gateway-directory/src/lib.rs +++ b/nym-gateway-directory/src/lib.rs @@ -5,7 +5,6 @@ mod entries; mod error; mod gateway_client; mod helpers; -pub use nym_vpn_api_client::types::{GatewayMinPerformance, NaiveFloat, Percent}; pub use crate::{ entries::{ @@ -22,5 +21,8 @@ pub use crate::{ }, error::Error, gateway_client::{Config, GatewayClient}, - helpers::split_ips, + helpers::{ + BridgeInformation, BridgeParameters, GatewayMinPerformance, NymDirectoryCountry, + QuicClientOptions, ScoreThresholds, split_ips, + }, }; From 8661cec8a00cb4a11ab92acaf94761de0d117a4e Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 22 Oct 2025 16:14:10 +0100 Subject: [PATCH 091/139] remove nymvpnapi - always use http fallback --- nym-gateway-directory/src/gateway_client.rs | 140 ++------------------ 1 file changed, 14 insertions(+), 126 deletions(-) diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index 0eed52fba3f..180f6cf1c95 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -24,7 +24,6 @@ use url::Url; pub struct Config { pub nyxd_url: Url, pub api_url: Url, - pub nym_vpn_api_url: Option, pub min_gateway_performance: Option, pub mix_score_thresholds: Option, pub wg_score_thresholds: Option, @@ -39,13 +38,7 @@ fn to_string(value: &Option) -> String { impl fmt::Display for Config { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "nyxd_url: {}, api_url: {}, nym_vpn_api_url: {}", - self.nyxd_url, - self.api_url, - to_string(&self.nym_vpn_api_url), - ) + write!(f, "nyxd_url: {}, api_url: {}", self.nyxd_url, self.api_url,) } } @@ -68,15 +61,6 @@ impl Config { self } - pub fn nym_vpn_api_url(&self) -> Option<&Url> { - self.nym_vpn_api_url.as_ref() - } - - pub fn with_custom_nym_vpn_api_url(mut self, nym_vpn_api_url: Url) -> Self { - self.nym_vpn_api_url = Some(nym_vpn_api_url); - self - } - pub fn with_min_gateway_performance( mut self, min_gateway_performance: GatewayMinPerformance, @@ -89,7 +73,6 @@ impl Config { #[derive(Clone)] pub struct GatewayClient { api_client: nym_http_api_client::Client, - nym_vpn_api_client: Option, nyxd_url: Url, min_gateway_performance: Option, mix_score_thresholds: Option, @@ -104,27 +87,16 @@ impl GatewayClient { pub fn new_with_resolver_overrides( config: Config, user_agent: UserAgent, - static_nym_api_ip_addresses: Option<&[SocketAddr]>, + _static_nym_api_ip_addresses: Option<&[SocketAddr]>, ) -> Result { let api_client = nym_http_api_client::Client::builder(config.api_url.clone()) .map_err(|e| Error::FailedToLookupDescribedGateways(e.into()))? .with_user_agent(user_agent.clone()) .build() .map_err(|e| Error::FailedToLookupDescribedGateways(e.into()))?; - let nym_vpn_api_client = config - .nym_vpn_api_url - .map(|url| { - nym_vpn_api_client::VpnApiClient::new_with_resolver_overrides( - url, - user_agent.clone(), - static_nym_api_ip_addresses, - ) - }) - .transpose()?; Ok(GatewayClient { api_client, - nym_vpn_api_client, nyxd_url: config.nyxd_url, min_gateway_performance: config.min_gateway_performance, mix_score_thresholds: config.mix_score_thresholds, @@ -136,39 +108,16 @@ impl GatewayClient { config: Config, network_details: &nym_network_defaults::NymNetworkDetails, user_agent: UserAgent, - static_nym_api_ip_addresses: Option<&[SocketAddr]>, + _static_nym_api_ip_addresses: Option<&[SocketAddr]>, ) -> Result { - // Use the new unified HTTP client with domain fronting for the main API client let api_client = nym_http_api_client::ClientBuilder::from_network(network_details) .map_err(Box::new)? .with_user_agent(user_agent.clone()) .build() .map_err(Box::new)?; - // Gets around diff version imports compiler issue for the moment - #[allow(clippy::expect_used)] - let network_details_compat = { - let json = serde_json::to_string(network_details) - .expect("Failed to serialize network details"); - serde_json::from_str(&json).expect("Failed to deserialize network details") - }; - - // Use domain fronting with resolver overrides for VPN API client - let nym_vpn_api_client = if config.nym_vpn_api_url.is_some() { - Some( - nym_vpn_api_client::VpnApiClient::from_network_with_resolver_overrides( - &network_details_compat, - user_agent.clone(), - static_nym_api_ip_addresses, - )?, - ) - } else { - None - }; - Ok(GatewayClient { api_client, - nym_vpn_api_client, nyxd_url: config.nyxd_url, min_gateway_performance: config.min_gateway_performance, mix_score_thresholds: config.mix_score_thresholds, @@ -180,10 +129,6 @@ impl GatewayClient { pub fn get_config(&self) -> Config { Config { api_url: self.api_client.api_url().clone(), - nym_vpn_api_url: self - .nym_vpn_api_client - .as_ref() - .map(|client| client.current_url().clone()), nyxd_url: self.nyxd_url.clone(), min_gateway_performance: self.min_gateway_performance, mix_score_thresholds: self.mix_score_thresholds, @@ -301,6 +246,7 @@ impl GatewayClient { .collect::>(); append_performance(&mut gateways, skimmed_gateways.nodes); filter_on_mixnet_min_performance(&mut gateways, &self.min_gateway_performance); + update_thresholds(&mut gateways, self.mix_score_thresholds); Ok(GatewayList::new(None, gateways)) } @@ -320,6 +266,7 @@ impl GatewayClient { .collect::>(); append_performance(&mut nodes, skimmed_nodes.nodes); filter_on_mixnet_min_performance(&mut nodes, &self.min_gateway_performance); + update_thresholds(&mut nodes, self.mix_score_thresholds); Ok(GatewayList::new(None, nodes)) } @@ -331,7 +278,6 @@ impl GatewayClient { } } - // This is currently the same as the set of all gateways, but it doesn't have to be. async fn lookup_entry_gateways_from_nym_api(&self) -> Result { self.lookup_all_gateways_from_nym_api().await } @@ -349,82 +295,18 @@ impl GatewayClient { } pub async fn lookup_gateway_ip(&self, gateway_identity: &str) -> Result { - if let Some(nym_vpn_api_client) = &self.nym_vpn_api_client { - debug!("Fetching gateway ip from nym-vpn-api..."); - let gateway = nym_vpn_api_client - .get_gateways(None) - .await? - .into_iter() - .find_map(|gw| { - if gw.identity_key != gateway_identity { - None - } else { - Gateway::try_from(gw) - .inspect_err(|err| error!("Failed to parse gateway: {err}")) - .ok() - } - }) - .ok_or_else(|| Error::RequestedGatewayIdNotFound(gateway_identity.to_string()))?; - gateway - .lookup_ip() - .ok_or(Error::FailedToLookupIp(gateway_identity.to_string())) - } else { - warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); - self.lookup_gateway_ip_from_nym_api(gateway_identity).await - } + self.lookup_gateway_ip_from_nym_api(gateway_identity).await } pub async fn lookup_all_gateways(&self) -> Result { - if let Some(nym_vpn_api_client) = &self.nym_vpn_api_client { - debug!("Fetching all gateways from nym-vpn-api..."); - let gateways: Vec<_> = nym_vpn_api_client - .get_gateways(self.min_gateway_performance) - .await? - .into_iter() - .filter_map(|gw| { - Gateway::try_from(gw) - .inspect_err(|err| error!("Failed to parse gateway: {err}")) - .ok() - .map(|mut gw| { - gw.update_to_new_thresholds(self.mix_score_thresholds); - gw - }) - }) - .collect(); - Ok(GatewayList::new(None, gateways)) - } else { - warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); - self.lookup_all_gateways_from_nym_api().await - } + self.lookup_all_gateways_from_nym_api().await } pub async fn lookup_gateways(&self, gw_type: GatewayType) -> Result { - if let Some(nym_vpn_api_client) = &self.nym_vpn_api_client { - debug!("Fetching {gw_type} gateways from nym-vpn-api..."); - let gateways: Vec<_> = nym_vpn_api_client - .get_gateways_by_type(gw_type.into(), self.min_gateway_performance) - .await? - .into_iter() - .filter_map(|gw| { - Gateway::try_from(gw) - .inspect_err(|err| error!("Failed to parse gateway: {err}")) - .ok() - .map(|mut gw| { - gw.update_to_new_thresholds(self.mix_score_thresholds); - gw - }) - }) - .collect(); - Ok(GatewayList::new(Some(gw_type), gateways)) - } else { - warn!("OPERATING IN FALLBACK MODE WITHOUT NYM-VPN-API!"); - self.lookup_gateways_from_nym_api(gw_type).await - } + self.lookup_gateways_from_nym_api(gw_type).await } } -// Append the performance to the gateways. This is a temporary hack until the nymvpn.com endpoints -// are updated to also include this field. fn append_performance( gateways: &mut [Gateway], basic_gw: Vec, @@ -461,3 +343,9 @@ fn filter_on_mixnet_min_performance( }); } } + +fn update_thresholds(gateways: &mut [Gateway], mix_score_thresholds: Option) { + for gateway in gateways.iter_mut() { + gateway.update_to_new_thresholds(mix_score_thresholds); + } +} From 99714db63d93a9e3f8f9c4b689251ebc7ae412da Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 22 Oct 2025 16:14:32 +0100 Subject: [PATCH 092/139] remove last nym vpn api deps --- nym-gateway-directory/Cargo.toml | 7 +++---- nym-gateway-directory/src/error.rs | 3 --- .../src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 5 ----- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 744ed703a41..1246b52e64e 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -12,11 +12,10 @@ workspace = true [dependencies] itertools.workspace = true nym-client-core = { path = "../common/client-core" } -nym-http-api-client = { path = "../common/http-api-client" } -nym-sphinx = { path = "../common/nymsphinx" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo -nym-topology = { path = "../common/topology" } # replaces the types pulled in from nym-sdk in nym-vpn-client repo +nym-http-api-client = { path = "../common/http-api-client", features = ["network-defaults"] } +nym-sphinx = { path = "../common/nymsphinx" } +nym-topology = { path = "../common/topology" } nym-validator-client = { path = "../common/client-libs/validator-client" } -# nym-vpn-api-client = { git = "https://github.com/nymtech/nym-vpn-client/", rev = "5ab01ba06057449614dd6a8450d04358c5ec33d1" } nym-crypto = { path = "../common/crypto" } nym-sphinx-addressing = { path = "../common/nymsphinx/addressing" } nym-network-defaults = { path = "../common/network-defaults" } diff --git a/nym-gateway-directory/src/error.rs b/nym-gateway-directory/src/error.rs index 5358edd70f7..94c4f5e60d1 100644 --- a/nym-gateway-directory/src/error.rs +++ b/nym-gateway-directory/src/error.rs @@ -21,9 +21,6 @@ pub enum Error { #[error(transparent)] ValidatorClientError(#[from] nym_validator_client::ValidatorClientError), - #[error(transparent)] - VpnApiClientError(#[from] nym_vpn_api_client::error::VpnApiClientError), - #[error("failed to resolve gateway hostname: {hostname}")] FailedToDnsResolveGateway { hostname: String, diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 11170c97246..743b1fb5ab3 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -63,14 +63,9 @@ fn create_gateway_client() -> Result { .ok_or_else(|| Error::NoValidatorDetailsAvailable)? .nyxd_url(); - let nym_vpn_api_url = mainnet_network_defaults - .nym_vpn_api_url() - .ok_or_else(|| Error::NoNymAPIUrl)?; - let config = GatewayConfig { nyxd_url, api_url, - nym_vpn_api_url: Some(nym_vpn_api_url), min_gateway_performance: None, mix_score_thresholds: None, wg_score_thresholds: None, From c333e242d1a981fc45bfbb9a805e7d6291996edc Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 23 Oct 2025 09:36:22 +0100 Subject: [PATCH 093/139] clippy --- nym-gateway-directory/src/gateway_client.rs | 8 +------ nym-gateway-directory/src/helpers.rs | 24 --------------------- 2 files changed, 1 insertion(+), 31 deletions(-) diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs index 180f6cf1c95..dfb9b7d0c24 100644 --- a/nym-gateway-directory/src/gateway_client.rs +++ b/nym-gateway-directory/src/gateway_client.rs @@ -29,13 +29,6 @@ pub struct Config { pub wg_score_thresholds: Option, } -fn to_string(value: &Option) -> String { - match value { - Some(value) => value.to_string(), - None => "unset".to_string(), - } -} - impl fmt::Display for Config { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "nyxd_url: {}, api_url: {}", self.nyxd_url, self.api_url,) @@ -110,6 +103,7 @@ impl GatewayClient { user_agent: UserAgent, _static_nym_api_ip_addresses: Option<&[SocketAddr]>, ) -> Result { + #[allow(deprecated)] let api_client = nym_http_api_client::ClientBuilder::from_network(network_details) .map_err(Box::new)? .with_user_agent(user_agent.clone()) diff --git a/nym-gateway-directory/src/helpers.rs b/nym-gateway-directory/src/helpers.rs index ba6995f6551..3583868a90c 100644 --- a/nym-gateway-directory/src/helpers.rs +++ b/nym-gateway-directory/src/helpers.rs @@ -1,7 +1,6 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -use crate::ScoreValue; use nym_contracts_common::Percent; use serde::{Deserialize, Serialize}; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; @@ -98,21 +97,6 @@ pub struct Asn { pub kind: AsnKind, } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Entry { - pub can_connect: bool, - pub can_route: bool, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Exit { - pub can_connect: bool, - pub can_route_ip_v4: bool, - pub can_route_ip_external_v4: bool, - pub can_route_ip_v6: bool, - pub can_route_ip_external_v6: bool, -} - #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Location { pub two_letter_iso_country_code: String, @@ -124,11 +108,3 @@ pub struct Location { pub asn: Option, } - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct DVpnGatewayPerformance { - pub last_updated_utc: String, - pub score: ScoreValue, - pub load: ScoreValue, - pub uptime_percentage_last_24_hours: f32, -} From 63f470b7379b3db775c1938f63b05993fca59123 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 23 Oct 2025 10:06:50 +0100 Subject: [PATCH 094/139] edition matches workspace --- nym-gateway-directory/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml index 1246b52e64e..ecdf99d8aad 100644 --- a/nym-gateway-directory/Cargo.toml +++ b/nym-gateway-directory/Cargo.toml @@ -4,7 +4,7 @@ authors.workspace = true repository.workspace = true homepage.workspace = true license.workspace = true -edition = "2024" +edition.workspace = true [lints] workspace = true From 3f8104328d90d745a1b8d5c9154fade5931a9c17 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 23 Oct 2025 10:27:49 +0100 Subject: [PATCH 095/139] add license to mixtcp cargo --- mixtcp/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/mixtcp/Cargo.toml b/mixtcp/Cargo.toml index 6bfd895b9cb..23ebd3c984b 100644 --- a/mixtcp/Cargo.toml +++ b/mixtcp/Cargo.toml @@ -2,6 +2,7 @@ name = "mixtcp" version = "0.0.1" edition = "2021" +license.workspace = true [dependencies] smoltcp = { version = "0.12", default-features = false, features = [ From 6f1950676bce0ed294e0ca3af0452d0a69682384 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 23 Oct 2025 11:55:08 +0100 Subject: [PATCH 096/139] remove external patch --- Cargo.toml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 411d203daf6..0cf92de8e04 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -476,11 +476,3 @@ exit = "deny" panic = "deny" unimplemented = "deny" unreachable = "deny" - -[patch."https://github.com/nymtech/nym-vpn-client"] -nym-http-api-client = { path = "common/http-api-client" } -nym-contracts-common = { path = "common/cosmwasm-smart-contracts/contracts-common" } - -[patch."https://github.com/nymtech/nym"] -nym-http-api-client = { path = "common/http-api-client" } -nym-contracts-common = { path = "common/cosmwasm-smart-contracts/contracts-common" } From 35dec700bed78861125c2e416b17bf866a1f0707 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 29 Oct 2025 11:21:40 +0000 Subject: [PATCH 097/139] use workspace base64 version --- common/client-core/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/client-core/Cargo.toml b/common/client-core/Cargo.toml index ea711ae5711..1f0a9e45ada 100644 --- a/common/client-core/Cargo.toml +++ b/common/client-core/Cargo.toml @@ -11,7 +11,7 @@ license.workspace = true [dependencies] async-trait = { workspace = true } bincode = { workspace = true } -base64 = "0.21.2" +base64 = { workspace = true } bs58 = { workspace = true } clap = { workspace = true, optional = true } cfg-if = { workspace = true } From 3def8b548a43643e38268b871690381a8d866e34 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 29 Oct 2025 11:22:00 +0000 Subject: [PATCH 098/139] fix comment and duplication in root cargo --- Cargo.lock | 2 +- Cargo.toml | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e3aee9e08a3..34a34a7e152 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5216,7 +5216,7 @@ name = "nym-client-core" version = "1.1.15" dependencies = [ "async-trait", - "base64 0.21.7", + "base64 0.22.1", "bincode", "bs58", "cfg-if", diff --git a/Cargo.toml b/Cargo.toml index 0cf92de8e04..da77f92ff97 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,7 +145,6 @@ members = [ "sdk/ffi/shared", "sdk/rust/nym-sdk", "mixtcp", - # "service-providers/authenticator", "service-providers/common", "service-providers/ip-packet-router", "service-providers/network-requester", @@ -158,7 +157,6 @@ members = [ "tools/internal/ssl-inject", "tools/internal/testnet-manager", "tools/internal/testnet-manager/dkg-bypass-contract", - "tools/internal/testnet-manager/dkg-bypass-contract", "tools/internal/validator-status-check", "tools/nym-cli", "tools/nym-id-cli", From fa1617e16a8cf68d106055be92e3a009b779fcc1 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 29 Oct 2025 11:22:38 +0000 Subject: [PATCH 099/139] add note to allow(deprecated) what is being ignored for moment --- common/client-core/src/lib.rs | 2 +- common/client-core/surb-storage/src/lib.rs | 2 +- common/crypto/src/lib.rs | 3 +-- common/gateway-requests/src/lib.rs | 2 +- common/http-api-client/src/lib.rs | 2 +- common/nymsphinx/acknowledgements/src/lib.rs | 2 +- common/nymsphinx/anonymous-replies/src/lib.rs | 2 +- nym-outfox/src/lib.rs | 2 +- 8 files changed, 8 insertions(+), 9 deletions(-) diff --git a/common/client-core/src/lib.rs b/common/client-core/src/lib.rs index 7901b50e6fd..e9f04940393 100644 --- a/common/client-core/src/lib.rs +++ b/common/client-core/src/lib.rs @@ -1,4 +1,4 @@ -#![allow(deprecated)] +#![allow(deprecated)] // silences clippy warning: use of deprecated associated function `nym_crypto::generic_array::GenericArray::::clone_from_slice`: please upgrade to generic-array 1.x - TODO use std::future::Future; #[cfg(all( diff --git a/common/client-core/surb-storage/src/lib.rs b/common/client-core/surb-storage/src/lib.rs index d5243436d71..ffd7ad85f6f 100644 --- a/common/client-core/surb-storage/src/lib.rs +++ b/common/client-core/surb-storage/src/lib.rs @@ -1,7 +1,7 @@ // Copyright 2022 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -#![allow(deprecated)] +#![allow(deprecated)] // silences clippy warning: use of deprecated associated function `nym_crypto::generic_array::GenericArray::::from_exact_iter`: please upgrade to generic-array 1.x - TODO pub use backend::*; pub use combined::CombinedReplyStorage; pub use key_storage::SentReplyKeys; diff --git a/common/crypto/src/lib.rs b/common/crypto/src/lib.rs index d0780939e2c..e8426bb0854 100644 --- a/common/crypto/src/lib.rs +++ b/common/crypto/src/lib.rs @@ -1,8 +1,7 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -// MAX: temp ignore deprecated, can be dealt with in its own PR (TODO) -#![allow(deprecated)] +#![allow(deprecated)] // silences clippy warning: deprecated associated function `generic_array::GenericArray::::from_exact_iter`: please upgrade to generic-array 1.x - TODO #[cfg(feature = "asymmetric")] pub mod asymmetric; diff --git a/common/gateway-requests/src/lib.rs b/common/gateway-requests/src/lib.rs index b9f1e81176c..e577cb0e5a0 100644 --- a/common/gateway-requests/src/lib.rs +++ b/common/gateway-requests/src/lib.rs @@ -1,6 +1,6 @@ // Copyright 2020-2022 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -#![allow(deprecated)] +#![allow(deprecated)] // silences clippy warning: deprecated associated function `nym_crypto::generic_array::GenericArray::::clone_from_slice`: please upgrade to generic-array 1.x - TODO pub use nym_crypto::generic_array; use nym_crypto::OutputSizeUser; diff --git a/common/http-api-client/src/lib.rs b/common/http-api-client/src/lib.rs index bd7fda145c7..c9feb52d601 100644 --- a/common/http-api-client/src/lib.rs +++ b/common/http-api-client/src/lib.rs @@ -1,8 +1,8 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -// MAX: temp ignore deprecated, can be dealt with in its own PR (TODO) #![allow(deprecated)] +// silences clippy warning: use of deprecated tuple variant `HttpClientError::GenericRequestFailure`: use another more strongly typed variant - this variant is only left for compatibility reasons - TODO //! Nym HTTP API Client //! diff --git a/common/nymsphinx/acknowledgements/src/lib.rs b/common/nymsphinx/acknowledgements/src/lib.rs index 4222393739a..d37990d49f1 100644 --- a/common/nymsphinx/acknowledgements/src/lib.rs +++ b/common/nymsphinx/acknowledgements/src/lib.rs @@ -1,6 +1,6 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -#![allow(deprecated)] +#![allow(deprecated)] // silences clippy warning: deprecated associated function `nym_crypto::generic_array::GenericArray::::clone_from_slice`: please upgrade to generic-array 1.x - TODO pub mod identifier; pub mod key; diff --git a/common/nymsphinx/anonymous-replies/src/lib.rs b/common/nymsphinx/anonymous-replies/src/lib.rs index c095ccc3fd3..84bfa7a3231 100644 --- a/common/nymsphinx/anonymous-replies/src/lib.rs +++ b/common/nymsphinx/anonymous-replies/src/lib.rs @@ -1,7 +1,7 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -#![allow(deprecated)] +#![allow(deprecated)] // silences clippy warning: deprecated struct `nym_crypto::generic_array::GenericArray`: please upgrade to generic-array 1.x - TODO pub mod encryption_key; pub mod reply_surb; pub mod requests; diff --git a/nym-outfox/src/lib.rs b/nym-outfox/src/lib.rs index a6525294db6..0d278c06d72 100644 --- a/nym-outfox/src/lib.rs +++ b/nym-outfox/src/lib.rs @@ -1,5 +1,5 @@ // MAX: temp ignore deprecated, can be dealt with in its own PR -#![allow(deprecated)] +#![allow(deprecated)] // silences clippy warning: deprecated associated function `chacha20::cipher::generic_array::GenericArray::::from_slice`: please upgrade to generic-array 1.x - TODO pub mod constants; pub mod error; From 34bab8bb3eff465d607caac20d43540d6df582f8 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 29 Oct 2025 12:33:04 +0000 Subject: [PATCH 100/139] follow convention for to_v2_bytes --- .../src/types/binary_request.rs | 2 +- common/nymsphinx/forwarding/src/packet.rs | 17 +++-------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/common/gateway-requests/src/types/binary_request.rs b/common/gateway-requests/src/types/binary_request.rs index a0e75385f94..d38d4f7d198 100644 --- a/common/gateway-requests/src/types/binary_request.rs +++ b/common/gateway-requests/src/types/binary_request.rs @@ -70,7 +70,7 @@ impl BinaryRequest { let plaintext = match self { BinaryRequest::ForwardSphinx { packet } => packet.into_v1_bytes()?, - BinaryRequest::ForwardSphinxV2 { packet } => packet.into_v2_bytes()?, + BinaryRequest::ForwardSphinxV2 { packet } => packet.to_v2_bytes()?, }; BinaryData::make_encrypted_blob(kind as u8, &plaintext, shared_key) diff --git a/common/nymsphinx/forwarding/src/packet.rs b/common/nymsphinx/forwarding/src/packet.rs index 34843c75e4e..32b8c893ee2 100644 --- a/common/nymsphinx/forwarding/src/packet.rs +++ b/common/nymsphinx/forwarding/src/packet.rs @@ -179,30 +179,19 @@ impl MixPacket { }) } - pub fn into_v2_bytes(&self) -> Result, MixPacketFormattingError> { + pub fn to_v2_bytes(&self) -> Result, MixPacketFormattingError> { Ok(std::iter::once(self.packet_type as u8) .chain(std::iter::once(self.key_rotation as u8)) .chain(self.next_hop.as_bytes()) .chain(self.packet.to_bytes()?) .collect()) } - - /* - * ======= - pub fn to_bytes(&self) -> Result, MixPacketFormattingError> { - Ok(std::iter::once(self.packet_type as u8) - >>>>>>> 1926e2950 (InputMessageCodec, Serde for MixPacket) - .chain(self.next_hop.as_bytes()) - .chain(self.packet.to_bytes()?) - .collect()) - */ } -// MAX TODO implement for v1 as well for back compat - this was added in the original asyncread/write work when we only had one v +// MAX TODO implement for v1 as well for back compat? - this was added in the original asyncread/write work when we only had one v impl Serialize for MixPacket { fn serialize(&self, serializer: S) -> Result { - serializer.serialize_bytes(&self.into_v2_bytes().map_err(serde::ser::Error::custom)?) - // serializer.serialize_bytes(&self.to_bytes().map_err(serde::ser::Error::custom)?) + serializer.serialize_bytes(&self.to_v2_bytes().map_err(serde::ser::Error::custom)?) } } From 5dd5f8c53a0582e1134b48664d45bcf19d4f6470 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 29 Oct 2025 12:33:21 +0000 Subject: [PATCH 101/139] add doc info for other sdk modules --- sdk/rust/nym-sdk/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/rust/nym-sdk/src/lib.rs b/sdk/rust/nym-sdk/src/lib.rs index 96109488ae9..2655131b9d7 100644 --- a/sdk/rust/nym-sdk/src/lib.rs +++ b/sdk/rust/nym-sdk/src/lib.rs @@ -2,8 +2,8 @@ //! //! The main component currently is [`mixnet`]. //! [`client_pool`] is a configurable client pool. -//! -//! TODO OTHER MODULES +//! [`tcp_proxy`] is a soon to be deprecated wrapper around the mixnet client which exposes a localhost port. +//! [`stream_wrapper`] is the v2 of the tcp_proxy, exposing a socket-like abstraction around the mixnet client. mod error; From 8248c87f3c1492d6497594a224a0d16534a67a55 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 29 Oct 2025 12:33:39 +0000 Subject: [PATCH 102/139] remove commented out code --- sdk/rust/nym-sdk/src/mixnet/native_client.rs | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/sdk/rust/nym-sdk/src/mixnet/native_client.rs b/sdk/rust/nym-sdk/src/mixnet/native_client.rs index ed96b5f1562..04dda121c36 100644 --- a/sdk/rust/nym-sdk/src/mixnet/native_client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/native_client.rs @@ -304,24 +304,6 @@ impl MixnetClient { } } } - // fn read_buffer_to_slice( - // &mut self, - // buf: &mut [u8], - // cx: &mut Context<'_>, - // ) -> Poll> { - // if self._read.buffer.len() < buf.len() { - // let written = self._read.buffer.len(); - // buf[..written].copy_from_slice(&self._read.buffer); - // self._read.clear(); - // Poll::Ready(Ok(written)) - // } else { - // let written = buf.len(); - // buf.copy_from_slice(&self._read.buffer[..written]); - // self._read.buffer = self._read.buffer[written..].to_vec(); - // cx.waker().wake_by_ref(); - // Poll::Ready(Ok(written)) - // } - // } fn read_buffer_to_slice( &mut self, From d5bc5fdc91e88cb18587f5054dbc318182e04c77 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 29 Oct 2025 13:46:30 +0000 Subject: [PATCH 103/139] Use workspace import for mixtcp rustls --- Cargo.lock | 2 ++ Cargo.toml | 3 +++ mixtcp/Cargo.toml | 8 +++++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 34a34a7e152..c9606cea26d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9947,6 +9947,8 @@ dependencies = [ "cfg-if", "defmt 0.3.100", "heapless", + "libc", + "log", "managed", ] diff --git a/Cargo.toml b/Cargo.toml index da77f92ff97..86bf1867213 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -315,6 +315,7 @@ rand_distr = "0.4" rayon = "1.5.1" regex = "1.10.6" reqwest = { version = "0.12.15", default-features = false } +rustls = { version = "0.23", default-features = false, features = ["std", "ring"] } rs_merkle = "1.5.0" schemars = "0.8.22" semver = "1.0.26" @@ -329,6 +330,7 @@ serde_yaml = "0.9.25" serde_plain = "1.0.2" sha2 = "0.10.9" si-scale = "0.2.3" +smoltcp = "0.12" snow = "0.9.6" sphinx-packet = "=0.6.0" sqlx = "0.8.6" @@ -373,6 +375,7 @@ uuid = "*" vergen = { version = "=8.3.1", default-features = false } vergen-gitcl = { version = "1.0.8", default-features = false } walkdir = "2" +webpki-roots = "1.0.2" x25519-dalek = "2.0.0" zeroize = "1.7.0" diff --git a/mixtcp/Cargo.toml b/mixtcp/Cargo.toml index 23ebd3c984b..222a447a69b 100644 --- a/mixtcp/Cargo.toml +++ b/mixtcp/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license.workspace = true [dependencies] -smoltcp = { version = "0.12", default-features = false, features = [ +smoltcp = { workspace = true, default-features = false, features = [ "std", "medium-ip", "proto-ipv4", @@ -21,8 +21,10 @@ nym-bin-common = { path = "../common/bin-common", features = ["basic_tracing"] } nym-sdk = { path = "../sdk/rust/nym-sdk" } nym-ip-packet-requests = { path = "../common/ip-packet-requests" } thiserror.workspace = true +rustls = { workspace = true } + +[dev-dependencies] reqwest.workspace = true dirs.workspace = true -rustls = { version = "0.23", default-features = false, features = ["std"] } -webpki-roots = "1.0.2" +webpki-roots.workspace = true serde_json.workspace = true From bc52a9c772a0ab90b1e528ef2adcc5c6af1c3e0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Fri, 24 Oct 2025 15:06:06 +0100 Subject: [PATCH 104/139] removed dependency on nym-gateway-directory --- Cargo.lock | 26 - Cargo.toml | 1 - .../validator-client/src/nym_api/mod.rs | 84 ++ nym-gateway-directory/Cargo.toml | 36 - nym-gateway-directory/README.md | 3 - .../src/entries/auth_addresses.rs | 39 - nym-gateway-directory/src/entries/country.rs | 31 - .../src/entries/entry_point.rs | 127 --- .../src/entries/exit_point.rs | 150 ---- nym-gateway-directory/src/entries/gateway.rs | 729 ------------------ .../src/entries/ipr_addresses.rs | 56 -- nym-gateway-directory/src/entries/mod.rs | 7 - nym-gateway-directory/src/entries/score.rs | 34 - nym-gateway-directory/src/error.rs | 123 --- nym-gateway-directory/src/gateway_client.rs | 345 --------- nym-gateway-directory/src/helpers.rs | 110 --- nym-gateway-directory/src/lib.rs | 28 - sdk/rust/nym-sdk/Cargo.toml | 11 +- sdk/rust/nym-sdk/src/error.rs | 5 +- .../nym-sdk/src/ip_packet_client/connect.rs | 16 +- .../mixnet_stream_wrapper_ipr.rs | 130 ++-- 21 files changed, 180 insertions(+), 1911 deletions(-) delete mode 100644 nym-gateway-directory/Cargo.toml delete mode 100644 nym-gateway-directory/README.md delete mode 100644 nym-gateway-directory/src/entries/auth_addresses.rs delete mode 100644 nym-gateway-directory/src/entries/country.rs delete mode 100644 nym-gateway-directory/src/entries/entry_point.rs delete mode 100644 nym-gateway-directory/src/entries/exit_point.rs delete mode 100644 nym-gateway-directory/src/entries/gateway.rs delete mode 100644 nym-gateway-directory/src/entries/ipr_addresses.rs delete mode 100644 nym-gateway-directory/src/entries/mod.rs delete mode 100644 nym-gateway-directory/src/entries/score.rs delete mode 100644 nym-gateway-directory/src/error.rs delete mode 100644 nym-gateway-directory/src/gateway_client.rs delete mode 100644 nym-gateway-directory/src/helpers.rs delete mode 100644 nym-gateway-directory/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index c9606cea26d..edc741823f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5929,31 +5929,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "nym-gateway-directory" -version = "0.0.0" -dependencies = [ - "itertools 0.14.0", - "nym-client-core", - "nym-contracts-common", - "nym-crypto", - "nym-http-api-client", - "nym-network-defaults", - "nym-sphinx", - "nym-sphinx-addressing", - "nym-topology", - "nym-validator-client", - "rand 0.8.5", - "serde", - "serde_json", - "strum", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tracing", - "url", -] - [[package]] name = "nym-gateway-probe" version = "1.18.0" @@ -6912,7 +6887,6 @@ dependencies = [ "nym-credentials", "nym-credentials-interface", "nym-crypto", - "nym-gateway-directory", "nym-gateway-requests", "nym-http-api-client", "nym-ip-packet-requests", diff --git a/Cargo.toml b/Cargo.toml index 86bf1867213..a13212b17d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -126,7 +126,6 @@ members = [ "nym-credential-proxy/nym-credential-proxy-requests", "nym-credential-proxy/vpn-api-lib-wasm", "nym-data-observatory", - "nym-gateway-directory", "nym-network-monitor", "nym-node", "nym-node-status-api/nym-node-status-agent", diff --git a/common/client-libs/validator-client/src/nym_api/mod.rs b/common/client-libs/validator-client/src/nym_api/mod.rs index 8c549491e96..c3bc21a78f9 100644 --- a/common/client-libs/validator-client/src/nym_api/mod.rs +++ b/common/client-libs/validator-client/src/nym_api/mod.rs @@ -273,6 +273,49 @@ pub trait NymApiClientExt: ApiClient { Ok(SkimmedNodesWithMetadata::new(nodes, metadata)) } + async fn get_all_basic_exit_assigned_nodes_with_metadata( + &self, + ) -> Result { + // Get all nodes that can act as exit gateways + let mut page = 0; + let res = self + .get_basic_exit_assigned_nodes_v2(false, Some(page), None, false) + .await?; + + let metadata = res.metadata; + let mut nodes = res.nodes.data; + + if res.nodes.pagination.total == nodes.len() { + return Ok(SkimmedNodesWithMetadata::new(nodes, metadata)); + } + + page += 1; + + loop { + let res = self + .get_basic_exit_assigned_nodes_v2(false, Some(page), None, false) + .await?; + + if !metadata.consistency_check(&res.metadata) { + return Err(NymAPIError::InternalResponseInconsistency { + url: self.api_url().clone(), + details: "Inconsistent paged metadata".to_string(), + }); + } + + nodes.append(&mut res.nodes.data.clone()); + + // Check if we've got all nodes + if nodes.len() >= res.nodes.pagination.total { + break; + } else { + page += 1; + } + } + + Ok(SkimmedNodesWithMetadata::new(nodes, metadata)) + } + async fn get_all_described_nodes(&self) -> Result, NymAPIError> { // TODO: deal with paging in macro or some helper function or something, because it's the same pattern everywhere let mut page = 0; @@ -467,6 +510,47 @@ pub trait NymApiClientExt: ApiClient { .await } + /// retrieve basic information for nodes are capable of operating as an exit gateway + /// this includes legacy gateways and nym-nodes + #[instrument(level = "debug", skip(self))] + async fn get_basic_exit_assigned_nodes_v2( + &self, + no_legacy: bool, + page: Option, + per_page: Option, + use_bincode: bool, + ) -> Result, NymAPIError> { + let mut params = Vec::new(); + + if no_legacy { + params.push(("no_legacy", "true".to_string())) + } + + if let Some(page) = page { + params.push(("page", page.to_string())) + } + + if let Some(per_page) = per_page { + params.push(("per_page", per_page.to_string())) + } + + if use_bincode { + params.push(("output", "bincode".to_string())) + } + + self.get_response( + &[ + routes::V2_API_VERSION, + "unstable", + routes::NYM_NODES_ROUTES, + "skimmed", + "exit-gateways", + ], + ¶ms, + ) + .await + } + /// retrieve basic information for nodes that got assigned 'mixing' node in this epoch /// this includes legacy mixnodes and nym-nodes #[deprecated(note = "use get_basic_active_mixing_assigned_nodes_v2")] diff --git a/nym-gateway-directory/Cargo.toml b/nym-gateway-directory/Cargo.toml deleted file mode 100644 index ecdf99d8aad..00000000000 --- a/nym-gateway-directory/Cargo.toml +++ /dev/null @@ -1,36 +0,0 @@ -[package] -name = "nym-gateway-directory" -authors.workspace = true -repository.workspace = true -homepage.workspace = true -license.workspace = true -edition.workspace = true - -[lints] -workspace = true - -[dependencies] -itertools.workspace = true -nym-client-core = { path = "../common/client-core" } -nym-http-api-client = { path = "../common/http-api-client", features = ["network-defaults"] } -nym-sphinx = { path = "../common/nymsphinx" } -nym-topology = { path = "../common/topology" } -nym-validator-client = { path = "../common/client-libs/validator-client" } -nym-crypto = { path = "../common/crypto" } -nym-sphinx-addressing = { path = "../common/nymsphinx/addressing" } -nym-network-defaults = { path = "../common/network-defaults" } -nym-contracts-common = { path = "../common/cosmwasm-smart-contracts/contracts-common" } - -rand.workspace = true -serde.workspace = true -strum.workspace = true -thiserror.workspace = true -tokio.workspace = true -tokio-util.workspace = true -tracing.workspace = true -url.workspace = true - -serde_json.workspace = true - -[dev-dependencies] -tokio = { workspace = true, features = ["full"] } diff --git a/nym-gateway-directory/README.md b/nym-gateway-directory/README.md deleted file mode 100644 index a5b4ab276a9..00000000000 --- a/nym-gateway-directory/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `nym-gateway-directory` - -This is a stripped down version of the `nym-gateway-directory` crate from the `nym-vpn-client` repository exposing functions and types related to IPRs. This is for use by the Rust SDK's `stream_wrapper` module. diff --git a/nym-gateway-directory/src/entries/auth_addresses.rs b/nym-gateway-directory/src/entries/auth_addresses.rs deleted file mode 100644 index 388ee041cb7..00000000000 --- a/nym-gateway-directory/src/entries/auth_addresses.rs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use nym_sphinx::addressing::clients::Recipient; - -use crate::{Error, error::Result}; - -#[derive(Debug, Copy, Clone)] -pub struct AuthAddress(Recipient); - -impl AuthAddress { - pub(crate) fn try_from_base58_string(address: &str) -> Result { - let recipient = Recipient::try_from_base58_string(address).map_err(|source| { - Error::RecipientFormattingError { - address: address.to_string(), - source, - } - })?; - Ok(AuthAddress(recipient)) - } -} - -impl std::fmt::Display for AuthAddress { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.0) - } -} - -impl From for AuthAddress { - fn from(recipient: Recipient) -> Self { - Self(recipient) - } -} - -impl From for Recipient { - fn from(auth_address: AuthAddress) -> Self { - auth_address.0 - } -} diff --git a/nym-gateway-directory/src/entries/country.rs b/nym-gateway-directory/src/entries/country.rs deleted file mode 100644 index 537c3deb6bf..00000000000 --- a/nym-gateway-directory/src/entries/country.rs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use crate::{Location, NymDirectoryCountry}; - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct Country { - iso_code: String, -} - -impl Country { - pub fn iso_code(&self) -> &str { - &self.iso_code - } -} - -impl From for Country { - fn from(country: NymDirectoryCountry) -> Self { - Self { - iso_code: country.iso_code().to_string(), - } - } -} - -impl From for Country { - fn from(location: Location) -> Self { - Self { - iso_code: location.two_letter_iso_country_code, - } - } -} diff --git a/nym-gateway-directory/src/entries/entry_point.rs b/nym-gateway-directory/src/entries/entry_point.rs deleted file mode 100644 index e85a7e905a5..00000000000 --- a/nym-gateway-directory/src/entries/entry_point.rs +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use nym_sphinx::addressing::nodes::NodeIdentity; -use std::fmt::{Display, Formatter}; - -use serde::{Deserialize, Serialize}; -use tracing::debug; - -use crate::{ - Error, ScoreValue, - entries::gateway::{COUNTRY_WITH_REGION_SELECTOR, Gateway, GatewayFilter, GatewayList}, - error::Result, -}; - -// The entry point is always a gateway identity, or some other entry that can be resolved to a -// gateway identity. -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] -pub enum EntryPoint { - // An explicit entry gateway identity. - Gateway { identity: NodeIdentity }, - // Select a random entry gateway in a specific country. - Country { two_letter_iso_country_code: String }, - // Select a random entry gateway in a specific region/state. - Region { region: String }, - // Select an entry gateway at random. - Random, -} - -impl Display for EntryPoint { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - match self { - EntryPoint::Gateway { identity } => write!(f, "Gateway: {identity}"), - EntryPoint::Country { - two_letter_iso_country_code, - } => write!(f, "Country: {two_letter_iso_country_code}"), - EntryPoint::Region { region } => write!(f, "Region/state: {region}"), - EntryPoint::Random => write!(f, "Random"), - } - } -} - -impl EntryPoint { - pub fn from_base58_string(base58: &str) -> Result { - let identity = NodeIdentity::from_base58_string(base58).map_err(|source| { - Error::NodeIdentityFormattingError { - identity: base58.to_string(), - source, - } - })?; - Ok(EntryPoint::Gateway { identity }) - } - - pub fn lookup_gateway( - &self, - gateways: &GatewayList, - min_score: Option, - ) -> Result { - match &self { - EntryPoint::Gateway { identity } => { - debug!("Selecting gateway by identity: {identity}"); - gateways - .gateway_with_identity(identity) - .ok_or_else(|| Error::NoMatchingGateway { - requested_identity: identity.to_string(), - }) - .cloned() - } - EntryPoint::Country { - two_letter_iso_country_code, - } => { - debug!("Selecting gateway by country: {two_letter_iso_country_code}"); - - let filters = Self::build_filters( - vec![GatewayFilter::Country(two_letter_iso_country_code.clone())], - min_score, - ); - - gateways.choose_random(&filters).ok_or_else(|| { - Error::NoMatchingEntryGatewayForLocation { - requested_location: two_letter_iso_country_code.clone(), - available_countries: gateways.all_iso_codes(), - } - }) - } - EntryPoint::Region { region } => { - debug!("Selecting gateway by region/state: {region}"); - - // Currently only supported in the US - let filters = Self::build_filters( - vec![ - GatewayFilter::Country(COUNTRY_WITH_REGION_SELECTOR.to_string()), - GatewayFilter::Region(region.to_string()), - ], - min_score, - ); - - gateways.choose_random(&filters).ok_or_else(|| { - Error::NoMatchingEntryGatewayForLocation { - requested_location: region.clone(), - available_countries: gateways.all_iso_codes(), - } - }) - } - EntryPoint::Random => { - debug!("Selecting a random gateway"); - - let filters = Self::build_filters(vec![], min_score); - - gateways - .choose_random(&filters) - .ok_or_else(|| Error::FailedToSelectGatewayRandomly) - } - } - } - - #[inline] - fn build_filters( - mut base_filters: Vec, - min_score: Option, - ) -> Vec { - if let Some(min_score) = min_score { - base_filters.push(GatewayFilter::MinScore(min_score)); - } - base_filters - } -} diff --git a/nym-gateway-directory/src/entries/exit_point.rs b/nym-gateway-directory/src/entries/exit_point.rs deleted file mode 100644 index a7213b30a09..00000000000 --- a/nym-gateway-directory/src/entries/exit_point.rs +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use nym_sphinx::addressing::clients::Recipient; -use nym_sphinx::addressing::nodes::NodeIdentity; -use serde::{Deserialize, Serialize}; -use std::fmt::{Display, Formatter}; - -use crate::{ - Error, IpPacketRouterAddress, ScoreValue, - entries::gateway::{COUNTRY_WITH_REGION_SELECTOR, Gateway, GatewayFilter, GatewayList}, - error::Result, -}; - -// The exit point is a nym-address, but if the exit ip-packet-router is running embedded on a -// gateway, we can refer to it by the gateway identity. -#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] -pub enum ExitPoint { - // An explicit exit address. This is useful when the exit ip-packet-router is running as a - // standalone entity (private). - Address { address: Box }, - - // An explicit exit gateway identity. This is useful when the exit ip-packet-router is running - // embedded on a gateway. - Gateway { identity: NodeIdentity }, - - // Select a random entry gateway in a specific country. - Country { two_letter_iso_country_code: String }, - - // Select a random entry gateway in a specific region/state. - Region { region: String }, - - // Select an exit gateway at random. - Random, -} - -impl Display for ExitPoint { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - match self { - ExitPoint::Address { address } => write!(f, "Address: {address}"), - ExitPoint::Gateway { identity } => write!(f, "Gateway: {identity}"), - ExitPoint::Country { - two_letter_iso_country_code, - } => write!(f, "Country: {two_letter_iso_country_code}"), - ExitPoint::Region { region } => write!(f, "Region/state: {region}"), - ExitPoint::Random => write!(f, "Random"), - } - } -} - -impl ExitPoint { - pub fn lookup_gateway( - &self, - gateways: &GatewayList, - min_score: Option, - residential_exit: bool, - ) -> Result { - match &self { - ExitPoint::Address { address } => { - tracing::debug!("Selecting gateway by address: {address}"); - // There is no validation done when a ip packet router is specified by address - // since it might be private and not available in any directory. - let ipr_address = IpPacketRouterAddress::from(**address); - let gateway_address = ipr_address.gateway(); - - // Now fetch the gateway that the IPR is connected to, and override its IPR address - let mut gateway = gateways - .gateway_with_identity(&gateway_address) - .ok_or_else(|| Error::NoMatchingGateway { - requested_identity: gateway_address.to_string(), - }) - .cloned()?; - gateway.ipr_address = Some(ipr_address); - Ok(gateway) - } - ExitPoint::Gateway { identity } => { - tracing::debug!("Selecting gateway by identity: {identity}"); - gateways - .gateway_with_identity(identity) - .ok_or_else(|| Error::NoMatchingGateway { - requested_identity: identity.to_string(), - }) - .cloned() - } - ExitPoint::Country { - two_letter_iso_country_code, - } => { - tracing::debug!("Selecting gateway by country: {two_letter_iso_country_code}"); - - let filters = Self::build_filters( - vec![GatewayFilter::Country(two_letter_iso_country_code.clone())], - min_score, - residential_exit, - ); - - gateways.choose_random(&filters).ok_or_else(|| { - Error::NoMatchingExitGatewayForLocation { - requested_location: two_letter_iso_country_code.clone(), - available_countries: gateways.all_iso_codes(), - } - }) - } - ExitPoint::Region { region } => { - tracing::debug!("Selecting gateway by region/state: {region}"); - - let filters = Self::build_filters( - vec![ - // Currently only supported in the US - GatewayFilter::Country(COUNTRY_WITH_REGION_SELECTOR.to_string()), - GatewayFilter::Region(region.to_string()), - ], - min_score, - residential_exit, - ); - - gateways.choose_random(&filters).ok_or_else(|| { - Error::NoMatchingExitGatewayForLocation { - requested_location: region.clone(), - available_countries: gateways.all_iso_codes(), - } - }) - } - ExitPoint::Random => { - tracing::debug!("Selecting a random exit gateway"); - - let filters = Self::build_filters(vec![], min_score, residential_exit); - - gateways - .choose_random(&filters) - .ok_or_else(|| Error::FailedToSelectGatewayRandomly) - } - } - } - - #[inline] - fn build_filters( - mut base_filters: Vec, - min_score: Option, - residential_exit: bool, - ) -> Vec { - if let Some(min_score) = min_score { - base_filters.push(GatewayFilter::MinScore(min_score)); - } - if residential_exit { - base_filters.push(GatewayFilter::Residential); - base_filters.push(GatewayFilter::Exit); - } - base_filters - } -} diff --git a/nym-gateway-directory/src/entries/gateway.rs b/nym-gateway-directory/src/entries/gateway.rs deleted file mode 100644 index c64f5ee2625..00000000000 --- a/nym-gateway-directory/src/entries/gateway.rs +++ /dev/null @@ -1,729 +0,0 @@ -// Copyright 2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only -use itertools::Itertools; -use nym_contracts_common::Percent; -use nym_sphinx::addressing::nodes::NodeIdentity; -use nym_topology::{NodeId, RoutingNode}; -use nym_validator_client::models::{KeyRotationId, NymNodeDescription}; -use rand::seq::IteratorRandom; -use serde::{Deserialize, Serialize}; -use std::{ - fmt::{self, Display}, - net::{IpAddr, Ipv4Addr, Ipv6Addr}, - str::FromStr, -}; -use tracing::error; - -use crate::{ - AuthAddress, BridgeInformation, BridgeParameters, Country, Error, IpPacketRouterAddress, - ScoreThresholds, - entries::score::{HIGH_SCORE_THRESHOLD, LOW_SCORE_THRESHOLD, MEDIUM_SCORE_THRESHOLD, Score}, - error::Result, - helpers, -}; - -pub const COUNTRY_WITH_REGION_SELECTOR: &str = "US"; - -#[derive(Clone)] -pub struct Gateway { - pub identity: NodeIdentity, - pub moniker: String, - pub location: Option, - pub ipr_address: Option, - pub authenticator_address: Option, - pub bridge_params: Option, - pub last_probe: Option, - pub ips: Vec, - pub host: Option, - pub clients_ws_port: Option, - pub clients_wss_port: Option, - pub mixnet_performance: Option, - pub mixnet_score: Option, - pub wg_performance: Option, - pub version: Option, -} - -impl fmt::Debug for Gateway { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("Gateway") - .field("identity", &self.identity.to_base58_string()) - .field("location", &self.location) - .field("ipr_address", &self.ipr_address) - .field("authenticator_address", &self.authenticator_address) - .field("last_probe", &self.last_probe) - .field("host", &self.host) - .field("clients_ws_port", &self.clients_ws_port) - .field("clients_wss_port", &self.clients_wss_port) - .field("mixnet_performance", &self.mixnet_performance) - .field("mixnet_score", &self.mixnet_score) - .field("wg_performance", &self.wg_performance) - .field("version", &self.version) - .finish() - } -} - -impl Gateway { - pub fn try_from_node_description( - node_description: NymNodeDescription, - current_key_rotation: KeyRotationId, - ) -> Result { - let identity = node_description.description.host_information.keys.ed25519; - let location = node_description - .description - .auxiliary_details - .location - .map(|l| Location { - two_letter_iso_country_code: l.alpha2.to_string(), - ..Default::default() - }); - let ipr_address = node_description - .description - .ip_packet_router - .as_ref() - .and_then(|ipr| { - IpPacketRouterAddress::try_from_base58_string(&ipr.address) - .inspect_err(|err| error!("Failed to parse IPR address: {err}")) - .ok() - }); - let authenticator_address = node_description - .description - .authenticator - .as_ref() - .and_then(|a| { - AuthAddress::try_from_base58_string(&a.address) - .inspect_err(|err| error!("Failed to parse authenticator address: {err}")) - .ok() - }); - let version = Some(node_description.version().to_string()); - let role = if node_description.description.declared_role.entry { - nym_validator_client::nym_nodes::NodeRole::EntryGateway - } else if node_description.description.declared_role.exit_ipr - || node_description.description.declared_role.exit_nr - { - nym_validator_client::nym_nodes::NodeRole::ExitGateway - } else { - nym_validator_client::nym_nodes::NodeRole::Inactive - }; - - let gateway = RoutingNode::try_from(&node_description.to_skimmed_node( - current_key_rotation, - role, - Default::default(), - )) - .map_err(|_| Error::MalformedGateway)?; - - let host = gateway.ws_entry_address(false); - let entry_info = &gateway.entry; - let clients_ws_port = entry_info.as_ref().map(|g| g.clients_ws_port); - let clients_wss_port = entry_info.as_ref().and_then(|g| g.clients_wss_port); - let ips = node_description.description.host_information.ip_address; - Ok(Gateway { - identity, - moniker: String::new(), - location, - ipr_address, - authenticator_address, - bridge_params: None, - last_probe: None, - ips, - host, - clients_ws_port, - clients_wss_port, - mixnet_performance: None, - mixnet_score: None, - wg_performance: None, - version, - }) - } - - pub fn identity(&self) -> NodeIdentity { - self.identity - } - - pub fn two_letter_iso_country_code(&self) -> Option<&str> { - self.location - .as_ref() - .map(|l| l.two_letter_iso_country_code.as_str()) - } - - pub fn is_in_country(&self, two_letter_iso_country_code: &str) -> bool { - self.location - .as_ref() - .map(|loc| loc.two_letter_iso_country_code == two_letter_iso_country_code) - .unwrap_or(false) - } - - pub fn region(&self) -> Option<&str> { - self.location.as_ref().map(|l| l.region.as_str()) - } - - pub fn is_in_region(&self, region: &str) -> bool { - self.location - .as_ref() - .map(|loc| loc.region == region) - .unwrap_or(false) - } - - pub fn is_residential_asn(&self) -> bool { - self.location - .as_ref() - .and_then(|loc| loc.asn.as_ref()) - .map(|asn| asn.kind == AsnKind::Residential) - .unwrap_or(false) - } - - pub fn is_exit_node(&self) -> bool { - self.ipr_address.is_some() - } - - pub fn is_vpn_node(&self) -> bool { - self.authenticator_address.is_some() - } - - pub fn host(&self) -> Option<&String> { - self.host.as_ref() - } - - pub fn lookup_ip(&self) -> Option { - self.ips.first().copied() - } - - pub fn split_ips(&self) -> (Vec, Vec) { - helpers::split_ips(self.ips.clone()) - } - - pub fn clients_address_no_tls(&self) -> Option { - match (&self.host, &self.clients_ws_port) { - (Some(host), Some(port)) => Some(format!("ws://{host}:{port}")), - _ => None, - } - } - - pub fn clients_address_tls(&self) -> Option { - match (&self.host, &self.clients_wss_port) { - (Some(host), Some(port)) => Some(format!("wss://{host}:{port}")), - _ => None, - } - } - - pub fn update_to_new_thresholds(&mut self, mix_thresholds: Option) { - if let (Some(mix_thresholds), Some(score)) = (mix_thresholds, self.mixnet_score.as_mut()) { - score.update_to_new_thresholds(mix_thresholds); - } - } - - pub fn meets_score(&self, gw_type: Option, min_score: ScoreValue) -> bool { - match gw_type { - Some(GatewayType::MixnetEntry) | Some(GatewayType::MixnetExit) => self - .mixnet_performance - .is_some_and(|p| p.round_to_integer() >= min_score.threshold()), - Some(GatewayType::Wg) => self - .wg_performance - .as_ref() - .is_some_and(|p| p.score >= min_score), - None => false, - } - } - - /// Tests whether the gateway matches a specific filter. - pub fn matches_filter(&self, gw_type: Option, filter: &GatewayFilter) -> bool { - match filter { - GatewayFilter::MinScore(score) => self.meets_score(gw_type, *score), - GatewayFilter::Country(code) => self.is_in_country(code), - GatewayFilter::Region(region) => self.is_in_region(region), - GatewayFilter::Residential => self.is_residential_asn(), - GatewayFilter::Exit => self.is_exit_node(), - GatewayFilter::Vpn => self.is_vpn_node(), - } - } - - /// Tests whether the gateway matches all of the filters. - pub fn matches_all_filters( - &self, - gw_type: Option, - filters: &[GatewayFilter], - ) -> bool { - filters - .iter() - .all(|filter| self.matches_filter(gw_type, filter)) - } - - pub fn get_bridge_params(&self) -> Option { - if let Some(all_params) = &self.bridge_params { - all_params.transports.first().cloned() - } else { - None - } - } -} - -#[derive(Debug, Clone, PartialEq)] -pub enum AsnKind { - Residential, - Other, -} - -#[derive(Debug, Clone, PartialEq)] -pub struct Asn { - pub asn: String, - pub name: String, - pub kind: AsnKind, -} - -#[derive(Debug, Default, Clone, PartialEq)] -pub struct Location { - pub two_letter_iso_country_code: String, - pub latitude: f64, - pub longitude: f64, - - pub city: String, - pub region: String, - - pub asn: Option, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] -pub enum ScoreValue { - Offline, - Low, - Medium, - High, -} - -impl ScoreValue { - fn priority(&self) -> u8 { - match self { - ScoreValue::Offline => 0, - ScoreValue::Low => 1, - ScoreValue::Medium => 2, - ScoreValue::High => 3, - } - } - - pub fn threshold(&self) -> u8 { - match self { - ScoreValue::Offline => 0, - ScoreValue::Low => LOW_SCORE_THRESHOLD, - ScoreValue::Medium => MEDIUM_SCORE_THRESHOLD, - ScoreValue::High => HIGH_SCORE_THRESHOLD, - } - } -} - -impl PartialOrd for ScoreValue { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.priority().cmp(&other.priority())) - } -} - -impl FromStr for ScoreValue { - type Err = crate::Error; - - fn from_str(s: &str) -> std::result::Result { - match s.to_lowercase().as_str() { - "offline" => Ok(ScoreValue::Offline), - "low" => Ok(ScoreValue::Low), - "medium" => Ok(ScoreValue::Medium), - "high" => Ok(ScoreValue::High), - _ => Err(crate::Error::InvalidScoreValue(s.to_string())), - } - } -} - -impl Display for ScoreValue { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let s = match self { - ScoreValue::Offline => "Offline", - ScoreValue::Low => "Low", - ScoreValue::Medium => "Medium", - ScoreValue::High => "High", - }; - write!(f, "{s}") - } -} - -#[derive(Debug, Clone, PartialEq)] -pub struct Performance { - pub last_updated_utc: String, - pub score: ScoreValue, - pub load: ScoreValue, - pub uptime_percentage_last_24_hours: f32, -} - -#[derive(Debug, Clone, PartialEq)] -pub struct Probe { - pub last_updated_utc: String, - pub outcome: ProbeOutcome, -} - -#[derive(Debug, Clone, PartialEq)] -pub struct ProbeOutcome { - pub as_entry: Entry, - pub as_exit: Option, - pub wg: Option, -} - -#[derive(Debug, Clone, PartialEq)] -pub struct Entry { - pub can_connect: bool, - pub can_route: bool, -} - -#[derive(Debug, Clone, PartialEq)] -pub struct Exit { - pub can_connect: bool, - pub can_route_ip_v4: bool, - pub can_route_ip_external_v4: bool, - pub can_route_ip_v6: bool, - pub can_route_ip_external_v6: bool, -} - -#[derive(Debug, Clone, PartialEq)] -pub struct WgProbeResults { - pub can_register: bool, - pub can_handshake: bool, - pub can_resolve_dns: bool, - pub ping_hosts_performance: f32, - pub ping_ips_performance: f32, -} - -impl From for AsnKind { - fn from(value: helpers::AsnKind) -> Self { - match value { - helpers::AsnKind::Residential => AsnKind::Residential, - helpers::AsnKind::Other => AsnKind::Other, - } - } -} - -impl From for Asn { - fn from(location: helpers::Asn) -> Self { - Asn { - asn: location.asn, - name: location.name, - kind: location.kind.into(), - } - } -} - -impl From for Location { - fn from(location: helpers::Location) -> Self { - Location { - two_letter_iso_country_code: location.two_letter_iso_country_code, - latitude: location.latitude, - longitude: location.longitude, - city: location.city, - region: location.region, - asn: location.asn.map(Into::into), - } - } -} - -// impl From for ScoreValue { -// fn from(value: nym_vpn_api_client::response::ScoreValue) -> Self { -// match value { -// nym_vpn_api_client::response::ScoreValue::Offline => ScoreValue::Offline, -// nym_vpn_api_client::response::ScoreValue::Low => ScoreValue::Low, -// nym_vpn_api_client::response::ScoreValue::Medium => ScoreValue::Medium, -// nym_vpn_api_client::response::ScoreValue::High => ScoreValue::High, -// } -// } -// } - -// impl From for Performance { -// fn from(value: nym_vpn_api_client::response::DVpnGatewayPerformance) -> Self { -// Performance { -// last_updated_utc: value.last_updated_utc, -// score: value.score.into(), -// load: value.load.into(), -// uptime_percentage_last_24_hours: value.uptime_percentage_last_24_hours, -// } -// } -// } - -// impl From for Probe { -// fn from(probe: nym_vpn_api_client::response::Probe) -> Self { -// Probe { -// last_updated_utc: probe.last_updated_utc, -// outcome: ProbeOutcome::from(probe.outcome), -// } -// } -// } - -impl From for Score { - fn from(percent: Percent) -> Self { - let rounded_percent = percent.round_to_integer(); - if rounded_percent >= HIGH_SCORE_THRESHOLD { - Score::High(rounded_percent) - } else if rounded_percent >= MEDIUM_SCORE_THRESHOLD { - Score::Medium(rounded_percent) - } else if rounded_percent > LOW_SCORE_THRESHOLD { - Score::Low(rounded_percent) - } else { - Score::None - } - } -} - -// impl From for ProbeOutcome { -// fn from(outcome: nym_vpn_api_client::response::ProbeOutcome) -> Self { -// ProbeOutcome { -// as_entry: Entry::from(outcome.as_entry), -// as_exit: outcome.as_exit.map(Exit::from), -// wg: outcome.wg.map(WgProbeResults::from), -// } -// } -// } - -// impl From for Entry { -// fn from(entry: nym_vpn_api_client::response::Entry) -> Self { -// Entry { -// can_connect: entry.can_connect, -// can_route: entry.can_route, -// } -// } -// } - -// impl From for Exit { -// fn from(exit: nym_vpn_api_client::response::Exit) -> Self { -// Exit { -// can_connect: exit.can_connect, -// can_route_ip_v4: exit.can_route_ip_v4, -// can_route_ip_external_v4: exit.can_route_ip_external_v4, -// can_route_ip_v6: exit.can_route_ip_v6, -// can_route_ip_external_v6: exit.can_route_ip_external_v6, -// } -// } -// } - -// impl From for WgProbeResults { -// fn from(results: nym_vpn_api_client::response::WgProbeResults) -> Self { -// WgProbeResults { -// can_register: results.can_register, -// can_handshake: results.can_handshake, -// can_resolve_dns: results.can_resolve_dns, -// ping_hosts_performance: results.ping_hosts_performance, -// ping_ips_performance: results.ping_ips_performance, -// } -// } -// } - -// impl TryFrom for Gateway { -// type Error = Error; - -// fn try_from(gateway: nym_vpn_api_client::response::NymDirectoryGateway) -> Result { -// let identity = -// NodeIdentity::from_base58_string(&gateway.identity_key).map_err(|source| { -// Error::NodeIdentityFormattingError { -// identity: gateway.identity_key, -// source, -// } -// })?; - -// let ipr_address = gateway -// .ip_packet_router -// .and_then(|ipr| IpPacketRouterAddress::try_from_base58_string(&ipr.address).ok()); - -// let authenticator_address = gateway -// .authenticator -// .and_then(|auth| AuthAddress::try_from_base58_string(&auth.address).ok()); - -// let hostname = gateway.entry.hostname; -// let first_ip_address = gateway -// .ip_addresses -// .first() -// .cloned() -// .map(|ip| ip.to_string()); -// let host = hostname.or(first_ip_address); - -// Ok(Gateway { -// identity, -// moniker: gateway.name, -// location: Some(gateway.location.into()), -// ipr_address, -// authenticator_address, -// bridge_params: gateway.bridges, -// last_probe: gateway.last_probe.map(Probe::from), -// ips: gateway.ip_addresses, -// host, -// clients_ws_port: Some(gateway.entry.ws_port), -// clients_wss_port: gateway.entry.wss_port, -// mixnet_performance: Some(gateway.performance), -// mixnet_score: Some(Score::from(gateway.performance)), -// wg_performance: gateway.performance_v2.map(Performance::from), -// version: gateway.build_information.map(|info| info.build_version), -// }) -// } -// } - -pub type NymNodeList = GatewayList; - -#[derive(Debug, Clone)] -pub struct GatewayList { - /// If None, then the list contains mixed types. - gw_type: Option, - gateways: Vec, -} - -impl GatewayList { - pub fn new(gw_type: Option, gateways: Vec) -> Self { - GatewayList { gw_type, gateways } - } - - // Returns a list of all locations of the gateways, including duplicates - fn all_locations(&self) -> impl Iterator { - self.gateways - .iter() - .filter_map(|gateway| gateway.location.as_ref()) - } - - pub fn all_countries(&self) -> Vec { - self.all_locations() - .cloned() - .map(Country::from) - .unique() - .collect() - } - - pub fn all_iso_codes(&self) -> Vec { - self.all_countries() - .into_iter() - .map(|country| country.iso_code().to_string()) - .collect() - } - - pub fn filter(&self, filters: &[GatewayFilter]) -> Vec { - self.gateways - .iter() - .filter(|gateway| gateway.matches_all_filters(self.gw_type, filters)) - .cloned() - .collect() - } - - pub fn node_with_identity(&self, identity: &NodeIdentity) -> Option<&Gateway> { - // Not using self.filter() here as find() will stop at the first match - self.gateways - .iter() - .find(|node| &node.identity() == identity) - } - - pub fn gateway_with_identity(&self, identity: &NodeIdentity) -> Option<&Gateway> { - self.node_with_identity(identity) - } - - pub fn choose_random(&self, filters: &[GatewayFilter]) -> Option { - self.filter(filters) - .into_iter() - .choose(&mut rand::thread_rng()) - } - - pub fn remove_gateway(&mut self, entry_gateway: &Gateway) { - self.gateways - .retain(|gateway| gateway.identity() != entry_gateway.identity()); - } - - pub fn gw_type(&self) -> Option { - self.gw_type - } - - pub fn len(&self) -> usize { - self.gateways.len() - } - - pub fn is_empty(&self) -> bool { - self.gateways.is_empty() - } - - pub fn into_exit_gateways(self) -> GatewayList { - Self::new(self.gw_type, self.filter(&[GatewayFilter::Exit])) - } - - pub fn into_vpn_gateways(self) -> GatewayList { - Self::new(self.gw_type, self.filter(&[GatewayFilter::Vpn])) - } - - pub fn into_inner(self) -> Vec { - self.gateways - } -} - -impl IntoIterator for GatewayList { - type Item = Gateway; - type IntoIter = std::vec::IntoIter; - - fn into_iter(self) -> Self::IntoIter { - self.gateways.into_iter() - } -} - -impl nym_client_core::init::helpers::ConnectableGateway for Gateway { - #[allow(unconditional_recursion)] - fn node_id(&self) -> NodeId { - self.node_id() - } - - fn identity(&self) -> NodeIdentity { - self.identity() - } - - fn clients_address(&self, _prefer_ipv6: bool) -> Option { - // This is a bit of a sharp edge, but temporary until we can remove Option from host - // and tls port when we add these to the vpn API endpoints. - Some( - self.clients_address_tls() - .or(self.clients_address_no_tls()) - .unwrap_or("ws://".to_string()), - ) - } - - fn is_wss(&self) -> bool { - self.clients_address_tls().is_some() - } -} - -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, strum::EnumIter)] -pub enum GatewayType { - MixnetEntry, - MixnetExit, - Wg, -} - -impl fmt::Display for GatewayType { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - GatewayType::MixnetEntry => write!(f, "mixnet entry"), - GatewayType::MixnetExit => write!(f, "mixnet exit"), - GatewayType::Wg => write!(f, "vpn"), - } - } -} - -impl From for GatewayType { - fn from(gateway_type: helpers::GatewayType) -> Self { - match gateway_type { - helpers::GatewayType::MixnetEntry => GatewayType::MixnetEntry, - helpers::GatewayType::MixnetExit => GatewayType::MixnetExit, - helpers::GatewayType::Wg => GatewayType::Wg, - } - } -} - -impl From for helpers::GatewayType { - fn from(gateway_type: GatewayType) -> Self { - match gateway_type { - GatewayType::MixnetEntry => helpers::GatewayType::MixnetEntry, - GatewayType::MixnetExit => helpers::GatewayType::MixnetExit, - GatewayType::Wg => helpers::GatewayType::Wg, - } - } -} - -#[derive(Debug, Clone, PartialEq)] -pub enum GatewayFilter { - MinScore(ScoreValue), // Mixnet or Wg score - Country(String), // Two-letter ISO country code - Region(String), // Region name - Residential, // Has a residential ASN - Exit, // Has an IPR address - Vpn, // Has an authenticator address -} diff --git a/nym-gateway-directory/src/entries/ipr_addresses.rs b/nym-gateway-directory/src/entries/ipr_addresses.rs deleted file mode 100644 index 42de5ef8787..00000000000 --- a/nym-gateway-directory/src/entries/ipr_addresses.rs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only -use nym_sphinx::addressing::clients::Recipient; -use nym_sphinx::addressing::nodes::NodeIdentity; -use nym_validator_client::models::NymNodeData; - -use crate::{Error, error::Result}; - -#[derive(Debug, Copy, Clone)] -pub struct IpPacketRouterAddress(Recipient); - -impl IpPacketRouterAddress { - pub fn try_from_base58_string(ip_packet_router_nym_address: &str) -> Result { - Ok(Self( - Recipient::try_from_base58_string(ip_packet_router_nym_address).map_err(|source| { - Error::RecipientFormattingError { - address: ip_packet_router_nym_address.to_string(), - source, - } - })?, - )) - } - - pub fn try_from_described_gateway(gateway: &NymNodeData) -> Result { - let address = gateway - .clone() - .ip_packet_router - .map(|ipr| ipr.address) - .ok_or(Error::MissingIpPacketRouterAddress)?; - Ok(Self(Recipient::try_from_base58_string(&address).map_err( - |source| Error::RecipientFormattingError { address, source }, - )?)) - } - - pub fn gateway(&self) -> NodeIdentity { - self.0.gateway() - } -} - -impl std::fmt::Display for IpPacketRouterAddress { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.0) - } -} - -impl From for IpPacketRouterAddress { - fn from(recipient: Recipient) -> Self { - Self(recipient) - } -} - -impl From for Recipient { - fn from(ipr_address: IpPacketRouterAddress) -> Self { - ipr_address.0 - } -} diff --git a/nym-gateway-directory/src/entries/mod.rs b/nym-gateway-directory/src/entries/mod.rs deleted file mode 100644 index 0a74d0afed5..00000000000 --- a/nym-gateway-directory/src/entries/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -pub(crate) mod auth_addresses; -pub(crate) mod country; -pub(crate) mod entry_point; -pub(crate) mod exit_point; -pub(crate) mod gateway; -pub(crate) mod ipr_addresses; -pub(crate) mod score; diff --git a/nym-gateway-directory/src/entries/score.rs b/nym-gateway-directory/src/entries/score.rs deleted file mode 100644 index 5024ffab3d4..00000000000 --- a/nym-gateway-directory/src/entries/score.rs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2025 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use crate::helpers::ScoreThresholds; - -pub(crate) const HIGH_SCORE_THRESHOLD: u8 = 80; -pub(crate) const MEDIUM_SCORE_THRESHOLD: u8 = 60; -pub(crate) const LOW_SCORE_THRESHOLD: u8 = 0; - -#[derive(Debug, Clone)] -pub enum Score { - High(u8), - Medium(u8), - Low(u8), - None, -} - -impl Score { - pub fn update_to_new_thresholds(&mut self, thresholds: ScoreThresholds) { - let score = match self { - Score::None => return, - Score::High(score) | Score::Medium(score) | Score::Low(score) => *score, - }; - *self = if score > thresholds.high { - Score::High(score) - } else if score > thresholds.medium { - Score::Medium(score) - } else if score > thresholds.low { - Score::Low(score) - } else { - Score::None - }; - } -} diff --git a/nym-gateway-directory/src/error.rs b/nym-gateway-directory/src/error.rs deleted file mode 100644 index 94c4f5e60d1..00000000000 --- a/nym-gateway-directory/src/error.rs +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use nym_http_api_client::HttpClientError; -use nym_validator_client::nym_api::error::NymAPIError; - -#[derive(thiserror::Error, Debug)] -pub enum Error { - #[error("identity not formatted correctly: {identity}")] - NodeIdentityFormattingError { - identity: String, - source: nym_crypto::asymmetric::ed25519::Ed25519RecoveryError, - }, - - #[error("recipient is not formatted correctly: {address}")] - RecipientFormattingError { - address: String, - source: nym_sphinx::addressing::clients::RecipientFormattingError, - }, - - #[error(transparent)] - ValidatorClientError(#[from] nym_validator_client::ValidatorClientError), - - #[error("failed to resolve gateway hostname: {hostname}")] - FailedToDnsResolveGateway { - hostname: String, - source: nym_http_api_client::HickoryDnsError, - }, - - #[error("resolved hostname {0} but no IP address found")] - ResolvedHostnameButNoIp(String), - - #[error("timed out while attempting to resolve hostname: {hostname}")] - HostnameResolutionTimeout { hostname: String }, - - #[error("failed to lookup described gateways")] - FailedToLookupDescribedGateways(#[source] nym_validator_client::ValidatorClientError), - - #[error("failed to lookup skimmed gateways")] - FailedToLookupSkimmedGateways(#[source] nym_validator_client::ValidatorClientError), - - #[error("failed to lookup skimmed nodes")] - FailedToLookupSkimmedNodes(#[source] nym_validator_client::ValidatorClientError), - - #[error("requested gateway not found in the remote list: {0}")] - RequestedGatewayIdNotFound(String), - - #[error("missing ip packet router address for gateway")] - MissingIpPacketRouterAddress, - - #[error("missing hostname or ip address for gateway")] - MissingHostnameOrIpAddress { gateway_identity: String }, - - #[error("no matching gateway found: {requested_identity}")] - NoMatchingGateway { requested_identity: String }, - - #[error( - "no entry gateway available for location {requested_location}, available countries: {available_countries:?}" - )] - NoMatchingEntryGatewayForLocation { - requested_location: String, - available_countries: Vec, - }, - - #[error( - "no exit gateway available for location {requested_location}, available countries: {available_countries:?}" - )] - NoMatchingExitGatewayForLocation { - requested_location: String, - available_countries: Vec, - }, - - #[error("no matching gateway found after selecting low latency: {requested_identity}")] - NoMatchingGatewayAfterSelectingLowLatency { requested_identity: String }, - - #[error("failed to select gateway randomly")] - FailedToSelectGatewayRandomly, - - #[error("gateway {0} doesn't have a description available")] - NoGatewayDescriptionAvailable(String), - - #[error("failed to lookup gateway ip for gateway {0}")] - FailedToLookupIp(String), - - #[error("the url {url} doesn't parse to a host and/or a port: {reason}")] - UrlError { url: url::Url, reason: String }, - - #[error("the provided gateway information is malformed")] - MalformedGateway, - - #[error("no connectivity")] - Offline, - - #[error("HTTP client error: {0}")] - HttpClient(#[from] Box), - - #[error("Nym API error: {source}")] - NymApi { source: Box }, - - #[error("operation cancelled")] - Cancelled, - - #[error("invalid score value: {0}. Valid values are: offline, low, medium, high")] - InvalidScoreValue(String), - - #[error("ips vec empty")] - NoIpsAvailable, -} - -impl Error { - /// Returns true when no gateways matching the search criteria could be found, except when the gateway is constrained to identity - pub fn is_unmatched_non_specific_gateway(&self) -> bool { - matches!( - self, - Error::NoMatchingEntryGatewayForLocation { .. } - | Error::NoMatchingExitGatewayForLocation { .. } - | Error::FailedToSelectGatewayRandomly - ) - } -} - -// Result type based on our error type -pub type Result = std::result::Result; diff --git a/nym-gateway-directory/src/gateway_client.rs b/nym-gateway-directory/src/gateway_client.rs deleted file mode 100644 index dfb9b7d0c24..00000000000 --- a/nym-gateway-directory/src/gateway_client.rs +++ /dev/null @@ -1,345 +0,0 @@ -// Copyright 2023-2024 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use std::{ - fmt, - net::{IpAddr, SocketAddr}, -}; - -use crate::{ - Error, GatewayMinPerformance, ScoreThresholds, - entries::gateway::{Gateway, GatewayList, GatewayType, NymNodeList}, - error::Result, -}; -use nym_contracts_common::Percent; -use nym_http_api_client::UserAgent; -use nym_validator_client::{ - models::NymNodeDescription, nym_api::NymApiClientExt, nym_nodes::SkimmedNodesWithMetadata, -}; -use rand::{prelude::SliceRandom, thread_rng}; -use tracing::{debug, error, warn}; -use url::Url; - -#[derive(Clone, Debug)] -pub struct Config { - pub nyxd_url: Url, - pub api_url: Url, - pub min_gateway_performance: Option, - pub mix_score_thresholds: Option, - pub wg_score_thresholds: Option, -} - -impl fmt::Display for Config { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "nyxd_url: {}, api_url: {}", self.nyxd_url, self.api_url,) - } -} - -impl Config { - pub fn nyxd_url(&self) -> &Url { - &self.nyxd_url - } - - pub fn with_custom_nyxd_url(mut self, nyxd_url: Url) -> Self { - self.nyxd_url = nyxd_url; - self - } - - pub fn api_url(&self) -> &Url { - &self.api_url - } - - pub fn with_custom_api_url(mut self, api_url: Url) -> Self { - self.api_url = api_url; - self - } - - pub fn with_min_gateway_performance( - mut self, - min_gateway_performance: GatewayMinPerformance, - ) -> Self { - self.min_gateway_performance = Some(min_gateway_performance); - self - } -} - -#[derive(Clone)] -pub struct GatewayClient { - api_client: nym_http_api_client::Client, - nyxd_url: Url, - min_gateway_performance: Option, - mix_score_thresholds: Option, - wg_score_thresholds: Option, -} - -impl GatewayClient { - pub fn new(config: Config, user_agent: UserAgent) -> Result { - Self::new_with_resolver_overrides(config, user_agent, None) - } - - pub fn new_with_resolver_overrides( - config: Config, - user_agent: UserAgent, - _static_nym_api_ip_addresses: Option<&[SocketAddr]>, - ) -> Result { - let api_client = nym_http_api_client::Client::builder(config.api_url.clone()) - .map_err(|e| Error::FailedToLookupDescribedGateways(e.into()))? - .with_user_agent(user_agent.clone()) - .build() - .map_err(|e| Error::FailedToLookupDescribedGateways(e.into()))?; - - Ok(GatewayClient { - api_client, - nyxd_url: config.nyxd_url, - min_gateway_performance: config.min_gateway_performance, - mix_score_thresholds: config.mix_score_thresholds, - wg_score_thresholds: config.wg_score_thresholds, - }) - } - - pub fn from_network_with_resolver_overrides( - config: Config, - network_details: &nym_network_defaults::NymNetworkDetails, - user_agent: UserAgent, - _static_nym_api_ip_addresses: Option<&[SocketAddr]>, - ) -> Result { - #[allow(deprecated)] - let api_client = nym_http_api_client::ClientBuilder::from_network(network_details) - .map_err(Box::new)? - .with_user_agent(user_agent.clone()) - .build() - .map_err(Box::new)?; - - Ok(GatewayClient { - api_client, - nyxd_url: config.nyxd_url, - min_gateway_performance: config.min_gateway_performance, - mix_score_thresholds: config.mix_score_thresholds, - wg_score_thresholds: config.wg_score_thresholds, - }) - } - - /// Return the config of this instance. - pub fn get_config(&self) -> Config { - Config { - api_url: self.api_client.api_url().clone(), - nyxd_url: self.nyxd_url.clone(), - min_gateway_performance: self.min_gateway_performance, - mix_score_thresholds: self.mix_score_thresholds, - wg_score_thresholds: self.wg_score_thresholds, - } - } - - pub fn mixnet_min_performance(&self) -> Option { - self.min_gateway_performance - .as_ref() - .and_then(|min_performance| min_performance.mixnet_min_performance) - } - - pub fn vpn_min_performance(&self) -> Option { - self.min_gateway_performance - .as_ref() - .and_then(|min_performance| min_performance.vpn_min_performance) - } - - async fn lookup_described_nodes(&self) -> Result> { - debug!("Fetching all described nodes from nym-api..."); - self.api_client - .get_all_described_nodes() - .await - .map_err(|e| Error::NymApi { - source: Box::new(e), - }) - } - - async fn lookup_skimmed_gateways(&self) -> Result { - debug!("Fetching skimmed entry assigned nodes from nym-api..."); - self.api_client - .get_all_basic_entry_assigned_nodes_with_metadata() - .await - .map_err(|e| Error::NymApi { - source: Box::new(e), - }) - } - - async fn lookup_skimmed_nodes(&self) -> Result { - debug!("Fetching skimmed entry assigned nodes from nym-api..."); - self.api_client - .get_all_basic_nodes_with_metadata() - .await - .map_err(|e| Error::NymApi { - source: Box::new(e), - }) - } - - pub async fn lookup_gateway_ip_from_nym_api(&self, gateway_identity: &str) -> Result { - debug!("Fetching gateway ip from nym-api..."); - let mut ips = self - .api_client - .get_all_described_nodes() - .await - .map_err(|e| Error::NymApi { - source: Box::new(e), - })? - .iter() - .find_map(|node| { - if node - .description - .host_information - .keys - .ed25519 - .to_base58_string() - == gateway_identity - { - Some(node.description.host_information.ip_address.clone()) - } else { - None - } - }) - .ok_or(Error::RequestedGatewayIdNotFound( - gateway_identity.to_string(), - ))?; - - if ips.is_empty() { - // nym-api should forbid this from ever happening, but we don't want to accidentally panic - // if this assumption fails - warn!("somehow {gateway_identity} hasn't provided any ip addresses!"); - return Err(Error::RequestedGatewayIdNotFound( - gateway_identity.to_string(), - )); - } - - debug!("found the following ips for {gateway_identity}: {ips:?}"); - if ips.len() == 1 { - // SAFETY: the vector is not empty, so unwrap is fine - #[allow(clippy::unwrap_used)] - Ok(ips.pop().unwrap()) - } else { - // chose a random one if there's more than one - // SAFETY: the vector is not empty, so unwrap is fine - let mut rng = thread_rng(); - let ip = ips.choose(&mut rng).ok_or_else(|| Error::NoIpsAvailable)?; - Ok(*ip) - } - } - - pub async fn lookup_all_gateways_from_nym_api(&self) -> Result { - let skimmed_gateways = self.lookup_skimmed_gateways().await?; - let key_rotation_id = skimmed_gateways.metadata.rotation_id; - - let mut gateways = self - .lookup_described_nodes() - .await? - .into_iter() - .filter(|node| node.description.declared_role.entry) - .filter_map(|gw| { - Gateway::try_from_node_description(gw, key_rotation_id) - .inspect_err(|err| error!("Failed to parse gateway: {err}")) - .ok() - }) - .collect::>(); - append_performance(&mut gateways, skimmed_gateways.nodes); - filter_on_mixnet_min_performance(&mut gateways, &self.min_gateway_performance); - update_thresholds(&mut gateways, self.mix_score_thresholds); - Ok(GatewayList::new(None, gateways)) - } - - pub async fn lookup_all_nymnodes(&self) -> Result { - let skimmed_nodes = self.lookup_skimmed_nodes().await?; - let key_rotation_id = skimmed_nodes.metadata.rotation_id; - - let mut nodes = self - .lookup_described_nodes() - .await? - .into_iter() - .filter_map(|gw| { - Gateway::try_from_node_description(gw, key_rotation_id) - .inspect_err(|err| error!("Failed to parse node: {err}")) - .ok() - }) - .collect::>(); - append_performance(&mut nodes, skimmed_nodes.nodes); - filter_on_mixnet_min_performance(&mut nodes, &self.min_gateway_performance); - update_thresholds(&mut nodes, self.mix_score_thresholds); - Ok(GatewayList::new(None, nodes)) - } - - pub async fn lookup_gateways_from_nym_api(&self, gw_type: GatewayType) -> Result { - match gw_type { - GatewayType::MixnetEntry => self.lookup_entry_gateways_from_nym_api().await, - GatewayType::MixnetExit => self.lookup_exit_gateways_from_nym_api().await, - GatewayType::Wg => self.lookup_vpn_gateways_from_nym_api().await, - } - } - - async fn lookup_entry_gateways_from_nym_api(&self) -> Result { - self.lookup_all_gateways_from_nym_api().await - } - - async fn lookup_exit_gateways_from_nym_api(&self) -> Result { - self.lookup_all_gateways_from_nym_api() - .await - .map(GatewayList::into_exit_gateways) - } - - async fn lookup_vpn_gateways_from_nym_api(&self) -> Result { - self.lookup_all_gateways_from_nym_api() - .await - .map(GatewayList::into_vpn_gateways) - } - - pub async fn lookup_gateway_ip(&self, gateway_identity: &str) -> Result { - self.lookup_gateway_ip_from_nym_api(gateway_identity).await - } - - pub async fn lookup_all_gateways(&self) -> Result { - self.lookup_all_gateways_from_nym_api().await - } - - pub async fn lookup_gateways(&self, gw_type: GatewayType) -> Result { - self.lookup_gateways_from_nym_api(gw_type).await - } -} - -fn append_performance( - gateways: &mut [Gateway], - basic_gw: Vec, -) { - debug!("Appending mixnet_performance to gateways"); - for gateway in gateways.iter_mut() { - if let Some(basic_gw) = basic_gw - .iter() - .find(|bgw| bgw.ed25519_identity_pubkey == gateway.identity()) - { - gateway.mixnet_performance = Some(basic_gw.performance); - } else { - tracing::warn!( - "Failed to append mixnet_performance, node {} not found among the skimmed nodes", - gateway.identity() - ); - } - } -} - -fn filter_on_mixnet_min_performance( - gateways: &mut Vec, - min_gateway_performance: &Option, -) { - if let Some(min_performance) = min_gateway_performance - && let Some(mixnet_min_performance) = min_performance.mixnet_min_performance - { - tracing::debug!( - "Filtering gateways based on mixnet_min_performance: {:?}", - min_performance - ); - gateways.retain(|gateway| { - gateway.mixnet_performance.unwrap_or_default() >= mixnet_min_performance - }); - } -} - -fn update_thresholds(gateways: &mut [Gateway], mix_score_thresholds: Option) { - for gateway in gateways.iter_mut() { - gateway.update_to_new_thresholds(mix_score_thresholds); - } -} diff --git a/nym-gateway-directory/src/helpers.rs b/nym-gateway-directory/src/helpers.rs deleted file mode 100644 index 3583868a90c..00000000000 --- a/nym-gateway-directory/src/helpers.rs +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -use nym_contracts_common::Percent; -use serde::{Deserialize, Serialize}; -use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; - -pub fn split_ips(ips: Vec) -> (Vec, Vec) { - ips.into_iter() - .fold((vec![], vec![]), |(mut v4, mut v6), ip| { - match ip { - IpAddr::V4(ipv4_addr) => v4.push(ipv4_addr), - IpAddr::V6(ipv6_addr) => v6.push(ipv6_addr), - } - (v4, v6) - }) -} - -// Types copied in from nym-vpn-client/nym-vpn-core/crates/nym-vpn-api-client - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct NymDirectoryCountry(String); - -impl NymDirectoryCountry { - pub fn iso_code(&self) -> &str { - &self.0 - } - pub fn into_string(self) -> String { - self.0 - } -} - -impl From for NymDirectoryCountry { - fn from(s: String) -> Self { - Self(s) - } -} - -#[derive(Clone, Copy, Debug, Eq, PartialEq)] -pub struct ScoreThresholds { - pub high: u8, - pub medium: u8, - pub low: u8, -} - -#[derive(Clone, Debug)] -pub enum GatewayType { - MixnetEntry, - MixnetExit, - Wg, -} - -#[derive(Clone, Copy, Default, Debug, Eq, PartialEq)] -pub struct GatewayMinPerformance { - pub mixnet_min_performance: Option, - pub vpn_min_performance: Option, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct BridgeInformation { - pub version: String, - pub transports: Vec, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -#[serde(tag = "transport_type", content = "args")] -#[serde(rename_all = "snake_case")] -pub enum BridgeParameters { - QuicPlain(QuicClientOptions), -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct QuicClientOptions { - /// Address describing the remote transport server. This is a vec to support multiple addresses - /// so as to support both IPv4 and IPv6. These addresses are meant to describe a single bridge - /// as the key material should not be used across multiple instances. - pub addresses: Vec, - - /// Override hostname used for certificate verification - pub host: Option, - - /// Use identity public key to verify server self signed certificate - pub id_pubkey: String, -} - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub enum AsnKind { - Residential, - Other, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct Asn { - pub asn: String, - pub name: String, - pub kind: AsnKind, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct Location { - pub two_letter_iso_country_code: String, - pub latitude: f64, - pub longitude: f64, - - pub city: String, - pub region: String, - - pub asn: Option, -} diff --git a/nym-gateway-directory/src/lib.rs b/nym-gateway-directory/src/lib.rs deleted file mode 100644 index 25b97bcb226..00000000000 --- a/nym-gateway-directory/src/lib.rs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: GPL-3.0-only - -mod entries; -mod error; -mod gateway_client; -mod helpers; - -pub use crate::{ - entries::{ - auth_addresses::AuthAddress, - country::Country, - entry_point::EntryPoint, - exit_point::ExitPoint, - gateway::{ - Asn, AsnKind, Entry, Exit, Gateway, GatewayFilter, GatewayList, GatewayType, Location, - Performance, Probe, ProbeOutcome, ScoreValue, - }, - ipr_addresses::IpPacketRouterAddress, - score::Score, - }, - error::Error, - gateway_client::{Config, GatewayClient}, - helpers::{ - BridgeInformation, BridgeParameters, GatewayMinPerformance, NymDirectoryCountry, - QuicClientOptions, ScoreThresholds, split_ips, - }, -}; diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index e5fa543c493..f218a4f74c3 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -16,9 +16,9 @@ path = "src/tcp_proxy/bin/proxy_client.rs" [dependencies] nym-client-core = { path = "../../../common/client-core", features = [ - "fs-credentials-storage", - "fs-surb-storage", - "fs-gateways-storage", + "fs-credentials-storage", + "fs-surb-storage", + "fs-gateways-storage", ] } async-trait = { workspace = true } bip39 = { workspace = true } @@ -37,7 +37,7 @@ nym-task = { path = "../../../common/task" } nym-topology = { path = "../../../common/topology" } nym-socks5-client-core = { path = "../../../common/socks5-client-core" } nym-validator-client = { path = "../../../common/client-libs/validator-client", features = [ - "http-client", + "http-client", ] } nym-http-api-client = { path = "../../../common/http-api-client" } nym-socks5-requests = { path = "../../../common/socks5/requests" } @@ -45,9 +45,8 @@ nym-ordered-buffer = { path = "../../../common/socks5/ordered-buffer" } nym-service-providers-common = { path = "../../../service-providers/common" } nym-sphinx-addressing = { path = "../../../common/nymsphinx/addressing" } nym-bin-common = { path = "../../../common/bin-common", features = [ - "basic_tracing", + "basic_tracing", ] } -nym-gateway-directory = { path = "../../../nym-gateway-directory" } bytecodec = { workspace = true } httpcodec = { workspace = true } diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index b80fd69f9f4..d0f29362a05 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -2,6 +2,7 @@ use nym_validator_client::nyxd::error::NyxdError; use std::path::PathBuf; use nym_ip_packet_requests::v8::response::{ConnectFailureReason, IpPacketResponseData}; +use nym_validator_client::nym_api::error::NymAPIError; /// Top-level Error enum for the mixnet client and its relevant types. #[derive(Debug, thiserror::Error)] @@ -122,8 +123,8 @@ pub enum Error { #[error("connect denied: {0:?}")] ConnectDenied(ConnectFailureReason), - #[error("gateway directory error: {0}")] - GatewayDirectoryError(#[from] nym_gateway_directory::Error), + #[error("api directory error: {0}")] + GatewayDirectoryError(#[from] NymAPIError), #[error("did not receive Validator endpoint details")] NoValidatorDetailsAvailable, diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs index a7491fe9d77..a8fdca86b3c 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs @@ -7,7 +7,6 @@ pub use crate::mixnet::{ InputMessage, MixnetClient, MixnetClientSender, MixnetMessageSender, Recipient, TransmissionLane, }; -use nym_gateway_directory::IpPacketRouterAddress; use nym_ip_packet_requests::IpPair; use tokio::time::sleep; use tokio_util::sync::CancellationToken; @@ -59,10 +58,7 @@ impl IprClientConnect { } } - pub async fn connect( - &mut self, - ip_packet_router_address: IpPacketRouterAddress, - ) -> Result { + pub async fn connect(&mut self, ip_packet_router_address: Recipient) -> Result { if self.connected != ConnectionState::Disconnected { return Err(Error::AlreadyConnected); } @@ -83,20 +79,14 @@ impl IprClientConnect { } } - async fn connect_inner( - &mut self, - ip_packet_router_address: IpPacketRouterAddress, - ) -> Result { + async fn connect_inner(&mut self, ip_packet_router_address: Recipient) -> Result { let request_id = self.send_connect_request(ip_packet_router_address).await?; debug!("Waiting for reply..."); self.listen_for_connect_response(request_id).await } - async fn send_connect_request( - &mut self, - ip_packet_router_address: IpPacketRouterAddress, - ) -> Result { + async fn send_connect_request(&mut self, ip_packet_router_address: Recipient) -> Result { let (request, request_id) = IpPacketRequest::new_connect_request(None); // We use 20 surbs for the connect request because typically the IPR is configured to have diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 743b1fb5ab3..d940a053b08 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -7,11 +7,9 @@ use crate::ip_packet_client::{ }; use crate::UserAgent; use crate::{mixnet::Recipient, Error}; +use std::collections::HashMap; use bytes::Bytes; -use nym_gateway_directory::{ - Config as GatewayConfig, GatewayClient, GatewayType, IpPacketRouterAddress, -}; use nym_ip_packet_requests::{ v8::{ request::IpPacketRequest, @@ -22,6 +20,9 @@ use nym_ip_packet_requests::{ use nym_sphinx::receiver::ReconstructedMessageCodec; use futures::StreamExt; +use nym_crypto::asymmetric::ed25519; +use nym_network_defaults::ApiUrl; +use nym_validator_client::nym_api::NymApiClientExt; use std::io; use std::pin::Pin; use std::task::{Context, Poll}; @@ -33,6 +34,13 @@ use tracing::{debug, error, info}; const IPR_CONNECT_TIMEOUT: Duration = Duration::from_secs(60); +#[derive(Clone)] +pub struct IprWithPerformance { + pub(crate) address: Recipient, + pub(crate) identity: ed25519::PublicKey, + pub(crate) performance: u8, +} + #[derive(Debug, Clone, PartialEq)] pub enum ConnectionState { Disconnected, @@ -40,7 +48,7 @@ pub enum ConnectionState { Connected, } -fn create_gateway_client() -> Result { +fn create_nym_api_client(nym_api_urls: Vec) -> Result { // TODO do something proper with this let user_agent = UserAgent { application: "nym-ipr-streamer".to_string(), @@ -49,55 +57,81 @@ fn create_gateway_client() -> Result { git_commit: "max/sdk-streamer".to_string(), }; - let mainnet_network_defaults = crate::NymNetworkDetails::default(); - let api_url = mainnet_network_defaults - .endpoints - .first() - .ok_or_else(|| Error::NoValidatorDetailsAvailable)? - .api_url() - .ok_or_else(|| Error::NoValidatorAPIUrl)?; - - let nyxd_url = mainnet_network_defaults - .endpoints - .first() - .ok_or_else(|| Error::NoValidatorDetailsAvailable)? - .nyxd_url(); - - let config = GatewayConfig { - nyxd_url, - api_url, - min_gateway_performance: None, - mix_score_thresholds: None, - wg_score_thresholds: None, - }; + let urls = nym_api_urls + .into_iter() + .map(|url| url.url.parse()) + .collect::, _>>() + .map_err(|err| { + error!("malformed nym-api url: {err}"); + Error::NoNymAPIUrl + })?; + + if urls.is_empty() { + return Err(Error::NoNymAPIUrl); + } + + let client = nym_http_api_client::ClientBuilder::new_with_urls(urls) + .with_user_agent(user_agent) + .build()?; - Ok(GatewayClient::new(config, user_agent)?) + Ok(client) } -async fn get_ipr_addr(client: GatewayClient) -> Result { - let exit_gateways = client.lookup_gateways(GatewayType::MixnetExit).await?; +async fn retrieve_exit_nodes_with_performance( + client: nym_http_api_client::Client, +) -> Result, Error> { + // retrieve all nym-nodes on the network + let all_nodes = client + .get_all_described_nodes() + .await? + .into_iter() + .map(|described| (described.ed25519_identity_key(), described)) + .collect::>(); + + // annoyingly there's no convenient way of doing this in a single query + // retrieve performance scores of all exit gateways + let exit_gateways = client + .get_all_basic_exit_assigned_nodes_with_metadata() + .await? + .nodes; + + let mut described = Vec::new(); + + for exit in exit_gateways { + if let Some(ipr_info) = all_nodes + .get(&exit.ed25519_identity_pubkey) + .and_then(|n| n.description.ip_packet_router.clone()) + { + if let Ok(parsed_address) = ipr_info.address.parse() { + described.push(IprWithPerformance { + address: parsed_address, + identity: exit.ed25519_identity_pubkey, + performance: exit.performance.round_to_integer(), + }) + } + } + } - info!("Found {} Exit Gateways", exit_gateways.len()); + Ok(described) +} + +async fn get_random_ipr(client: nym_http_api_client::Client) -> Result { + let nodes = retrieve_exit_nodes_with_performance(client).await?; + info!("Found {} Exit Gateways", nodes.len()); - let selected_gateway = exit_gateways + // JS: I'm leaving the old behaviour here of choosing node with the highest performance, + // but I think you should reconsider making a pseudorandom selection weighted by some scaled performance + // otherwise all clients might end up choosing exactly the same node (I will leave this as PR comment when I get here : D) + let selected_gateway = nodes .into_iter() - .filter(|gw| gw.ipr_address.is_some()) - .max_by_key(|gw| { - gw.mixnet_performance - .map(|p| p.round_to_integer()) - .unwrap_or(0) - }) + .max_by_key(|gw| gw.performance) .ok_or_else(|| Error::NoGatewayAvailable)?; - let ipr_address = selected_gateway - .ipr_address - .ok_or_else(|| Error::NoIPRAvailable)?; + let ipr_address = selected_gateway.address; info!( "Using IPR: {} (Gateway: {}, Performance: {:?})", - ipr_address, - selected_gateway.identity(), - selected_gateway.mixnet_performance + ipr_address, selected_gateway.identity, selected_gateway.performance ); Ok(ipr_address) @@ -106,7 +140,7 @@ async fn get_ipr_addr(client: GatewayClient) -> Result, connection_state: ConnectionState, @@ -115,8 +149,14 @@ pub struct IpMixStream { impl IpMixStream { // TODO be able to pass in DisconnectedMixnetClient to use as MixStream inner client. pub async fn new() -> Result { - let gw_client = create_gateway_client()?; - let ipr_address = get_ipr_addr(gw_client).await?; + // JS: I think you need some bootstrapping here, something would need to be passed to `new()` + // to indicate what endpoints to use + // again, for now I'm default to mainnet as you did before + let mainnet_network_defaults = crate::NymNetworkDetails::new_mainnet(); + + let api_client = + create_nym_api_client(mainnet_network_defaults.nym_api_urls.unwrap_or_default())?; + let ipr_address = get_random_ipr(api_client).await?; let stream = MixStream::new(None, Recipient::from(ipr_address)).await; Ok(Self { From 0b7fee7bead2eca3e3537d7df7c747c73c10707e Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 29 Oct 2025 18:29:56 +0000 Subject: [PATCH 105/139] Removed unneccesary panics with self.peer_surb_tag --- sdk/rust/nym-sdk/src/error.rs | 6 ++ .../stream_wrapper/mixnet_stream_wrapper.rs | 74 +++++++++---------- .../mixnet_stream_wrapper_ipr.rs | 2 +- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index d0f29362a05..8a531a92815 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -111,6 +111,12 @@ pub enum Error { #[error("client already connected or connecting")] IprStreamClientAlreadyConnectedOrConnecting, + #[error("trying to send an anonymous reply but peer surb tag is not set")] + MixStreamSurbTagNotSet, + + #[error("trying to send an outgoing message but receipient address is not set")] + MixStreamRecipientNotSet, + #[error("listening for connection response timed out")] IPRConnectResponseTimeout, diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index cc82167239d..75803d04540 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -64,7 +64,7 @@ impl MixSocket { pub struct MixStream { pub client: MixnetClient, peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. - peer_surbs: Option, // ..since we might just be using SURBs instead + peer_surb_tag: Option, // ..since we might just be using SURBs instead } impl MixStream { @@ -78,29 +78,28 @@ impl MixStream { Self { client, peer: Some(peer), - peer_surbs: None, + peer_surb_tag: None, } } /// Nym address of Stream's peer (Nym Client it will communicate with). - pub fn peer_addr(&self) -> Recipient { - let peer = &self.peer.expect("No Peer set"); - *peer + pub fn peer_addr(self) -> Option { + self.peer } /// Our Nym address. - pub fn local_addr(&self) -> &Recipient { - self.client.nym_address() + pub fn local_addr(self) -> Recipient { + *self.client.nym_address() } - /// Store SURBs in own field. - pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { - self.peer_surbs = Some(surbs); + /// Store SURB tag in own field to use for Anonymous Replies. + pub fn store_surb_tag(&mut self, surbs: AnonymousSenderTag) { + self.peer_surb_tag = Some(surbs); } - /// Get SURBs (if any). + /// Get SURB tag (if any). pub fn surbs(&self) -> Option { - self.peer_surbs + self.peer_surb_tag } /// Split for concurrent read/write (like TcpStream::Split) into MixnetStreamReader and MixnetStreamWriter. @@ -113,13 +112,13 @@ impl MixStream { MixStreamReader { client: self.client, peer: self.peer, - peer_surbs: self.peer_surbs, + peer_surb_tag: self.peer_surb_tag, surb_tx: Some(surb_tx), }, MixStreamWriter { sender, peer: self.peer.expect("No Peer set"), - peer_surbs: self.peer_surbs, + peer_surb_tag: self.peer_surb_tag, surb_rx: Some(surb_rx), }, ) @@ -127,18 +126,18 @@ impl MixStream { /// Convenience method for just piping bytes into the Mixnet. pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - let input_message = if self.peer_surbs.is_some() { + let input_message = if self.peer_surb_tag.is_some() { info!("Writing {} bytes, sending with SURBs", data.len()); InputMessage::Reply { - recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), - data: (data.to_owned()), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + recipient_tag: self.peer_surb_tag.ok_or(Error::MixStreamSurbTagNotSet)?, + data: data.to_owned(), + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), // TODO check with Drazen - guessing here } } else { info!("Writing {} bytes", data.len()); InputMessage::Anonymous { - recipient: (self.peer.expect("No Peer set")), + recipient: self.peer.ok_or(Error::MixStreamRecipientNotSet)?, data: (data.to_owned()), reply_surbs: (10), lane: (nym_task::connections::TransmissionLane::General), @@ -149,8 +148,6 @@ impl MixStream { let mut codec = InputMessageCodec {}; let mut serialized_bytes = BytesMut::new(); codec.encode(input_message, &mut serialized_bytes)?; - debug!("Serialized bytes: {:?}", serialized_bytes); - self.write_all(&serialized_bytes).await?; debug!("Wrote serialized bytes"); self.flush().await?; @@ -203,25 +200,24 @@ impl AsyncWrite for MixStream { pub struct MixStreamReader { client: MixnetClient, peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. - peer_surbs: Option, // ..since we might just be using SURBs instead + peer_surb_tag: Option, // ..since we might just be using SURBs instead surb_tx: Option>, } impl MixStreamReader { /// Nym address of Stream's peer (Nym Client it will communicate with). - pub fn peer_addr(&self) -> Recipient { - let peer = &self.peer.expect("No Peer set"); - *peer + pub fn peer_addr(self) -> Option { + self.peer } /// Our Nym address. - pub fn local_addr(&self) -> &Recipient { - self.client.nym_address() + pub fn local_addr(self) -> Recipient { + *self.client.nym_address() } - /// Store SURBs in self + send to the other side of the split so they can be used for the connection. - pub fn store_surbs(&mut self, surbs: AnonymousSenderTag) { - self.peer_surbs = Some(surbs); + /// Store SURB tag in self + send to the other side of the split so it can be used for the connection. + pub fn store_surb_tag(&mut self, surbs: AnonymousSenderTag) { + self.peer_surb_tag = Some(surbs); if let Some(tx) = self.surb_tx.take() { match tx.send(surbs) { Ok(()) => debug!("Sent SURBs to MixStreamWriter"), @@ -232,7 +228,7 @@ impl MixStreamReader { /// Stored SURBs (if any). pub fn surbs(&self) -> Option { - self.peer_surbs + self.peer_surb_tag } } @@ -249,24 +245,24 @@ impl AsyncRead for MixStreamReader { pub struct MixStreamWriter { sender: MixnetClientSender, peer: Recipient, - peer_surbs: Option, + peer_surb_tag: Option, surb_rx: Option>, } impl MixStreamWriter { /// Convenience method for just piping bytes into the Mixnet. pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - if self.peer_surbs.is_none() { + if self.peer_surb_tag.is_none() { if let Some(mut rx) = self.surb_rx.take() { if let Ok(surbs) = rx.try_recv() { - self.peer_surbs = Some(surbs); + self.peer_surb_tag = Some(surbs); } } } - let input_message = if self.peer_surbs.is_some() { + let input_message = if self.peer_surb_tag.is_some() { InputMessage::Reply { - recipient_tag: (self.peer_surbs.expect("No Peer SURBs set")), + recipient_tag: (self.peer_surb_tag.expect("No Peer SURBs set")), data: (data.to_owned()), lane: (nym_task::connections::TransmissionLane::General), max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here @@ -367,7 +363,7 @@ mod tests { if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { let payload_surbs = decoded_message.sender_tag; assert!(payload_surbs.is_some()); - receiver_stream.store_surbs(payload_surbs.unwrap()); + receiver_stream.store_surb_tag(payload_surbs.unwrap()); receiver_stream.write_bytes(b"Hello, Mixnet reply!").await?; } } @@ -443,7 +439,7 @@ mod tests { ); if received_count == 0 && decoded_message.sender_tag.is_some() { - receiver_reader.store_surbs(decoded_message.sender_tag.unwrap()); + receiver_reader.store_surb_tag(decoded_message.sender_tag.unwrap()); info!("Stored SURBs"); } diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index d940a053b08..e4b41fde18e 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -397,7 +397,7 @@ pub struct IpMixStreamReader { } impl IpMixStreamReader { - pub fn nym_address(&self) -> &Recipient { + pub fn nym_address(self) -> Recipient { self.stream_reader.local_addr() } From 5bf907c181f4fbb1ce09156b7bc503e55fd6ea3b Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 30 Oct 2025 16:25:59 +0000 Subject: [PATCH 106/139] properly fail on version checks --- sdk/rust/nym-sdk/src/error.rs | 6 ++++++ .../src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index 8a531a92815..525a479d971 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -146,6 +146,12 @@ pub enum Error { #[error("no IPR address on selected gateway")] NoIPRAvailable, + + #[error("message version check failed: {0}")] + IPRMessageVersionCheckFailed(String), + + #[error("no response id found in connect response")] + IPRNoId, } impl Error { diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index e4b41fde18e..6414a721fb1 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -232,13 +232,16 @@ impl IpMixStream { } Some(Ok(reconstructed)) => { if let Err(e) = check_ipr_message_version(&reconstructed) { - error!("Version check failed: {}", e); - continue; + return Err(Error::IPRMessageVersionCheckFailed(e.to_string())); + } if let Ok(response) = IpPacketResponse::from_reconstructed_message(&reconstructed) { if response.id() == Some(request_id) { return self.handle_connect_response(response).await; } + else { + return Err(Error::IPRNoId) + } } } } From 33f5d85743f990ede0cadf6d313e0f3e3860082f Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 30 Oct 2025 18:47:34 +0000 Subject: [PATCH 107/139] use make_bincode_serializer instead of bincode default in client-core --- .../src/client/inbound_messages.rs | 19 ++++++++++++------- common/client-core/src/lib.rs | 7 +++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index 4dcd5ae0860..ba34531582e 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -1,5 +1,8 @@ // Copyright 2020-2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +use crate::error::ClientCoreError; +use crate::make_bincode_serializer; +use bincode::Options; use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; use nym_sphinx::forwarding::packet::MixPacket; @@ -13,8 +16,6 @@ use tokio_util::{ codec::{Decoder, Encoder}, }; -use crate::error::ClientCoreError; - pub type InputMessageSender = tokio_util::sync::PollSender; pub type InputMessageReceiver = tokio::sync::mpsc::Receiver; @@ -201,7 +202,9 @@ impl InputMessage { } #[allow(clippy::expect_used)] pub fn serialized_size(&self) -> u64 { - bincode::serialized_size(self).expect("failed to get serialized InputMessage size") + make_bincode_serializer() + .serialized_size(self) + .expect("failed to get serialized InputMessage size") + LENGHT_ENCODING_PREFIX_SIZE as u64 } } @@ -227,7 +230,9 @@ impl Encoder for InputMessageCodec { fn encode(&mut self, item: InputMessage, buf: &mut BytesMut) -> Result<(), Self::Error> { #[allow(clippy::expect_used)] - let encoded = bincode::serialize(&item).expect("failed to serialize InputMessage"); + let encoded = make_bincode_serializer() + .serialize(&item) + .expect("failed to serialize InputMessage"); let encoded_len = encoded.len() as u32; let mut encoded_with_len = encoded_len.to_le_bytes().to_vec(); encoded_with_len.extend(encoded); @@ -255,9 +260,9 @@ impl Decoder for InputMessageCodec { return Ok(None); } - let decoded = match bincode::deserialize( - &buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE], - ) { + let decoded = match make_bincode_serializer() + .deserialize(&buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE]) + { Ok(decoded) => decoded, Err(_) => return Ok(None), }; diff --git a/common/client-core/src/lib.rs b/common/client-core/src/lib.rs index e9f04940393..898e0b880a6 100644 --- a/common/client-core/src/lib.rs +++ b/common/client-core/src/lib.rs @@ -40,3 +40,10 @@ where { tokio::spawn(future); } + +fn make_bincode_serializer() -> impl bincode::Options { + use bincode::Options; + bincode::DefaultOptions::new() + .with_big_endian() + .with_varint_encoding() +} From 97eb8500a87456ff21a6d3bf317bb3c836379838 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 3 Nov 2025 12:01:06 +0000 Subject: [PATCH 108/139] Switch frm default bincode in nymsphinx --- common/nymsphinx/src/lib.rs | 7 +++++++ common/nymsphinx/src/receiver.rs | 12 ++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/common/nymsphinx/src/lib.rs b/common/nymsphinx/src/lib.rs index c27867635b1..7d725dfc875 100644 --- a/common/nymsphinx/src/lib.rs +++ b/common/nymsphinx/src/lib.rs @@ -22,3 +22,10 @@ pub use nym_sphinx_framing as framing; // TEMP UNTIL FURTHER REFACTORING pub use preparer::payload::NymPayloadBuilder; + +fn make_bincode_serializer() -> impl bincode::Options { + use bincode::Options; + bincode::DefaultOptions::new() + .with_big_endian() + .with_varint_encoding() +} diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index e10f8803a4d..6a923a220d0 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -3,7 +3,9 @@ use std::io; +use crate::make_bincode_serializer; use crate::message::{NymMessage, NymMessageError, PaddedMessage, PlainMessage}; +use bincode::Options; use log::debug; use nym_crypto::aes::cipher::{KeyIvInit, StreamCipher}; use nym_crypto::asymmetric::x25519; @@ -73,7 +75,9 @@ impl Encoder for ReconstructedMessageCodec { item: ReconstructedMessage, buf: &mut BytesMut, ) -> Result<(), Self::Error> { - let encoded = bincode::serialize(&item).expect("failed to serialize ReconstructedMessage"); + let encoded = make_bincode_serializer() + .serialize(&item) + .expect("failed to serialize ReconstructedMessage"); let encoded_len = encoded.len() as u32; let mut encoded_with_len = encoded_len.to_le_bytes().to_vec(); encoded_with_len.extend(encoded); @@ -102,9 +106,9 @@ impl Decoder for ReconstructedMessageCodec { return Ok(None); } - let decoded = match bincode::deserialize( - &buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE], - ) { + let decoded = match make_bincode_serializer() + .deserialize(&buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE]) + { Ok(decoded) => decoded, Err(e) => { debug!("Failed to decode the message - {:?}", e); From 00ddefe15813de99091a055fb389bff79f1b0454 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 3 Nov 2025 12:55:42 +0000 Subject: [PATCH 109/139] Fix double copy + deserialisation -> none loop --- common/nymsphinx/src/receiver.rs | 34 ++++++++++++-------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index 6a923a220d0..ec8245598ea 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -75,14 +75,11 @@ impl Encoder for ReconstructedMessageCodec { item: ReconstructedMessage, buf: &mut BytesMut, ) -> Result<(), Self::Error> { - let encoded = make_bincode_serializer() - .serialize(&item) - .expect("failed to serialize ReconstructedMessage"); + let encoded = make_bincode_serializer().serialize(&item)?; let encoded_len = encoded.len() as u32; - let mut encoded_with_len = encoded_len.to_le_bytes().to_vec(); - encoded_with_len.extend(encoded); - buf.reserve(encoded_with_len.len()); - buf.extend_from_slice(&encoded_with_len); + buf.reserve(LENGHT_ENCODING_PREFIX_SIZE + encoded.len()); + buf.extend_from_slice(&encoded_len.to_le_bytes()); + buf.extend_from_slice(&encoded); Ok(()) } } @@ -96,25 +93,14 @@ impl Decoder for ReconstructedMessageCodec { return Ok(None); } - let len = u32::from_le_bytes( - buf[0..LENGHT_ENCODING_PREFIX_SIZE] - .try_into() - .expect("We know that we have at least LENGHT_ENCODING_PREFIX_SIZE bytes in there"), - ) as usize; + let len = u32::from_le_bytes(buf[0..LENGHT_ENCODING_PREFIX_SIZE].try_into()?) as usize; if buf.len() < len + LENGHT_ENCODING_PREFIX_SIZE { return Ok(None); } - let decoded = match make_bincode_serializer() - .deserialize(&buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE]) - { - Ok(decoded) => decoded, - Err(e) => { - debug!("Failed to decode the message - {:?}", e); - return Ok(None); - } - }; + let decoded = make_bincode_serializer() + .deserialize(&buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE])?; buf.advance(len + LENGHT_ENCODING_PREFIX_SIZE); @@ -144,6 +130,12 @@ pub enum MessageRecoveryError { #[error("Failed to recover message fragment - {0}")] MessageRecoveryError(#[from] io::Error), + + #[error("Failed to serialize/deserialize message")] + SerializationError(#[from] Box), + + #[error("Invalid length prefix bytes")] + InvalidLengthPrefix(#[from] std::array::TryFromSliceError), } pub trait MessageReceiver { From eedf312b19d4bd8600449ebec6bf00bc4c3626ca Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 3 Nov 2025 14:31:30 +0000 Subject: [PATCH 110/139] remove unused connction type enum --- nym-ip-packet-client/src/connect.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/nym-ip-packet-client/src/connect.rs b/nym-ip-packet-client/src/connect.rs index 9723a572be1..86d1b3ce4c5 100644 --- a/nym-ip-packet-client/src/connect.rs +++ b/nym-ip-packet-client/src/connect.rs @@ -30,8 +30,6 @@ enum ConnectionState { Disconnected, Connecting, Connected, - #[allow(unused)] - Disconnecting, } pub struct IprClientConnect { From 68aa0317f8f8067369beee7d16c3d9c4569a3156 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Mon, 3 Nov 2025 21:00:39 +0000 Subject: [PATCH 111/139] remove .expect()s and add some encode and decode tests --- .../src/client/inbound_messages.rs | 291 +++++++++++++++++- common/client-core/src/error.rs | 6 + .../nym-sdk/src/ip_packet_client/connect.rs | 4 +- 3 files changed, 284 insertions(+), 17 deletions(-) diff --git a/common/client-core/src/client/inbound_messages.rs b/common/client-core/src/client/inbound_messages.rs index ba34531582e..f01ba54749c 100644 --- a/common/client-core/src/client/inbound_messages.rs +++ b/common/client-core/src/client/inbound_messages.rs @@ -209,7 +209,6 @@ impl InputMessage { } } -// TODO: Tests pub struct AdressedInputMessageCodec(pub Recipient); impl Encoder<&[u8]> for AdressedInputMessageCodec { @@ -230,9 +229,7 @@ impl Encoder for InputMessageCodec { fn encode(&mut self, item: InputMessage, buf: &mut BytesMut) -> Result<(), Self::Error> { #[allow(clippy::expect_used)] - let encoded = make_bincode_serializer() - .serialize(&item) - .expect("failed to serialize InputMessage"); + let encoded = make_bincode_serializer().serialize(&item)?; let encoded_len = encoded.len() as u32; let mut encoded_with_len = encoded_len.to_le_bytes().to_vec(); encoded_with_len.extend(encoded); @@ -251,24 +248,288 @@ impl Decoder for InputMessageCodec { return Ok(None); } #[allow(clippy::expect_used)] - let len = u32::from_le_bytes( - buf[0..LENGHT_ENCODING_PREFIX_SIZE] - .try_into() - .expect("Could not coarce to array"), - ) as usize; + let len = u32::from_le_bytes(buf[0..LENGHT_ENCODING_PREFIX_SIZE].try_into()?) as usize; if buf.len() < len + LENGHT_ENCODING_PREFIX_SIZE { return Ok(None); } - let decoded = match make_bincode_serializer() - .deserialize(&buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE]) - { - Ok(decoded) => decoded, - Err(_) => return Ok(None), - }; + let decoded = make_bincode_serializer() + .deserialize(&buf[LENGHT_ENCODING_PREFIX_SIZE..len + LENGHT_ENCODING_PREFIX_SIZE])?; buf.advance(len + LENGHT_ENCODING_PREFIX_SIZE); Ok(Some(decoded)) } } + +#[cfg(test)] +mod tests { + use super::*; + use nym_sphinx::addressing::clients::Recipient; + use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; + use nym_sphinx::params::PacketType; + use rand::SeedableRng; + + fn test_recipient() -> Recipient { + Recipient::try_from_base58_string("CytBseW6yFXUMzz4SGAKdNLGR7q3sJLLYxyBGvutNEQV.4QXYyEVc5fUDjmmi8PrHN9tdUFV4PCvSJE1278cHyvoe@4sBbL1ngf1vtNqykydQKTFh26sQCw888GpUqvPvyNB4f").unwrap() + } + + fn test_sender_tag() -> AnonymousSenderTag { + let dummy_seed = [42u8; 32]; + let mut rng = rand_chacha::ChaCha20Rng::from_seed(dummy_seed); + AnonymousSenderTag::new_random(&mut rng) + } + + #[test] + fn encode_decode_all_variants() { + let mut codec = InputMessageCodec; + { + let mut buf = BytesMut::new(); + let msg = InputMessage::new_anonymous( + test_recipient(), + vec![1, 2, 3, 4, 5], + 3, + TransmissionLane::General, + None, + ); + codec.encode(msg, &mut buf).unwrap(); + let decoded = codec + .decode(&mut buf) + .unwrap() + .expect("Should decode message"); + + match decoded { + InputMessage::Anonymous { + data, reply_surbs, .. + } => { + assert_eq!(data, vec![1, 2, 3, 4, 5]); + assert_eq!(reply_surbs, 3); + } + _ => panic!("Expected Anonymous variant"), + } + } + + { + let mut buf = BytesMut::new(); + let msg = InputMessage::new_reply( + test_sender_tag(), + vec![6, 7, 8], + TransmissionLane::General, + None, + ); + codec.encode(msg, &mut buf).unwrap(); + let decoded = codec + .decode(&mut buf) + .unwrap() + .expect("Should decode message"); + + match decoded { + InputMessage::Reply { data, .. } => { + assert_eq!(data, vec![6, 7, 8]); + } + _ => panic!("Expected Reply variant"), + } + } + + { + let mut buf = BytesMut::new(); + let inner = InputMessage::new_anonymous( + test_recipient(), + vec![9, 10], + 2, + TransmissionLane::General, + None, + ); + let msg = InputMessage::new_wrapper(inner, PacketType::Mix); + codec.encode(msg, &mut buf).unwrap(); + let decoded = codec + .decode(&mut buf) + .unwrap() + .expect("Should decode message"); + + match decoded { + InputMessage::MessageWrapper { + message, + packet_type, + } => { + assert_eq!(packet_type, PacketType::Mix); + match *message { + InputMessage::Anonymous { + data, reply_surbs, .. + } => { + assert_eq!(data, vec![9, 10]); + assert_eq!(reply_surbs, 2); + } + _ => panic!("Expected Anonymous inner message"), + } + } + _ => panic!("Expected MessageWrapper variant"), + } + } + } + + #[test] + fn encode_decode_sequential_messages() { + let mut codec = InputMessageCodec; + let mut buf = BytesMut::new(); + + codec + .encode( + InputMessage::new_anonymous( + test_recipient(), + vec![1, 2, 3], + 1, + TransmissionLane::General, + None, + ), + &mut buf, + ) + .unwrap(); + + codec + .encode( + InputMessage::new_anonymous( + test_recipient(), + vec![4, 5, 6, 7], + 2, + TransmissionLane::General, + None, + ), + &mut buf, + ) + .unwrap(); + + codec + .encode( + InputMessage::new_anonymous( + test_recipient(), + vec![8, 9], + 3, + TransmissionLane::General, + None, + ), + &mut buf, + ) + .unwrap(); + + let decoded1 = codec + .decode(&mut buf) + .unwrap() + .expect("Should decode first message"); + match decoded1 { + InputMessage::Anonymous { + data, reply_surbs, .. + } => { + assert_eq!(data, vec![1, 2, 3]); + assert_eq!(reply_surbs, 1); + } + _ => panic!("Wrong variant"), + } + + let decoded2 = codec + .decode(&mut buf) + .unwrap() + .expect("Should decode second message"); + match decoded2 { + InputMessage::Anonymous { + data, reply_surbs, .. + } => { + assert_eq!(data, vec![4, 5, 6, 7]); + assert_eq!(reply_surbs, 2); + } + _ => panic!("Wrong variant"), + } + + let decoded3 = codec + .decode(&mut buf) + .unwrap() + .expect("Should decode third message"); + match decoded3 { + InputMessage::Anonymous { + data, reply_surbs, .. + } => { + assert_eq!(data, vec![8, 9]); + assert_eq!(reply_surbs, 3); + } + _ => panic!("Wrong variant"), + } + + // Buffer should be empty + let decoded4 = codec.decode(&mut buf).unwrap(); + assert!(decoded4.is_none(), "Should have no more messages"); + assert_eq!(buf.len(), 0, "Buffer should be empty"); + } + + #[test] + fn partial_message_handling() { + let mut codec = InputMessageCodec; + let mut buf = BytesMut::new(); + // Empty @ beginning + assert!(codec.decode(&mut buf).unwrap().is_none()); + + let mut buf = BytesMut::from(&[0x10, 0x00][..]); + assert!(codec.decode(&mut buf).unwrap().is_none()); + assert_eq!(buf.len(), 2, "Buffer should be unchanged"); + + let mut full_buf = BytesMut::new(); + codec + .encode( + InputMessage::new_anonymous( + test_recipient(), + vec![1, 2, 3, 4, 5], + 2, + TransmissionLane::General, + None, + ), + &mut full_buf, + ) + .unwrap(); + + // Only first half of the message + let partial_len = full_buf.len() / 2; + let mut partial_buf = full_buf.split_to(partial_len); + + assert!(codec.decode(&mut partial_buf).unwrap().is_none()); + assert_eq!(partial_buf.len(), partial_len, "Buffer should be unchanged"); + + partial_buf.unsplit(full_buf); + let decoded = codec.decode(&mut partial_buf).unwrap(); + assert!(decoded.is_some(), "Should decode complete message"); + match decoded.unwrap() { + InputMessage::Anonymous { data, .. } => { + assert_eq!(data, vec![1, 2, 3, 4, 5]); + } + _ => panic!("Expected Anonymous variant"), + } + } + + #[test] + fn addressed_codec_compatibility() { + let recipient = test_recipient(); + let data = b"test message payload"; + + let mut addressed_codec = AdressedInputMessageCodec(recipient); + let mut buf = BytesMut::new(); + addressed_codec.encode(data.as_ref(), &mut buf).unwrap(); + + let mut input_codec = InputMessageCodec; + let decoded = input_codec + .decode(&mut buf) + .unwrap() + .expect("Should decode"); + + match decoded { + InputMessage::Regular { + data: decoded_data, + recipient: decoded_recipient, + lane, + .. + } => { + assert_eq!(decoded_data, data, "Data should match"); + assert_eq!(decoded_recipient, recipient, "Recipient should match"); + assert_eq!(lane, TransmissionLane::General, "Should use General lane"); + } + _ => panic!("Expected Regular variant"), + } + } +} diff --git a/common/client-core/src/error.rs b/common/client-core/src/error.rs index 44eca8ac0bb..30344589be8 100644 --- a/common/client-core/src/error.rs +++ b/common/client-core/src/error.rs @@ -255,6 +255,12 @@ pub enum ClientCoreError { #[error("Could not access task registry, {0}")] RegistryAccess(#[from] RegistryAccessError), + + #[error("Serialization error: {0}")] + BincodeError(#[from] Box), + + #[error("Could not coarce to array")] + ArrayCreationFailure(#[from] std::array::TryFromSliceError), } impl From for ClientCoreError { diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs index a8fdca86b3c..aa97dd45ff7 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs @@ -157,8 +157,8 @@ impl IprClientConnect { for msg in msgs { // Confirm that the version is correct if let Err(err) = check_ipr_message_version(&msg) { - tracing::info!("Mixnet message version mismatch: {err}"); - continue; + tracing::error!("Mixnet message version mismatch: {err}"); + break; } // Then we deserialize the message From 5f5b319e556358a216941759110e9ffcf21045dd Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 5 Nov 2025 23:49:22 +0000 Subject: [PATCH 112/139] First pass rework to bytes in bytes out --- .../stream_wrapper/mixnet_stream_wrapper.rs | 951 ++++++++++++++---- .../mixnet_stream_wrapper_ipr.rs | 42 +- 2 files changed, 759 insertions(+), 234 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 75803d04540..c71716dae59 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -2,107 +2,416 @@ // SPDX-License-Identifier: GPL-3.0-only use crate::mixnet::InputMessage; +use crate::mixnet::MixnetMessageSender; use crate::mixnet::{MixnetClient, MixnetClientSender, Recipient}; use crate::Error; use bytes::BytesMut; use nym_client_core::client::inbound_messages::InputMessageCodec; use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; -use nym_sphinx::receiver::ReconstructedMessage; +use nym_sphinx::receiver::{ReconstructedMessage, ReconstructedMessageCodec}; use std::io; use std::pin::Pin; use std::task::{Context, Poll}; use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt, ReadBuf}; use tokio::sync::oneshot; -use tokio_util::codec::Encoder; +use tokio_util::codec::{Encoder, Framed, FramedRead, FramedWrite}; use tracing::{debug, info, warn}; -/// MixSocket is following the structure of something like Tokio::net::TcpSocket with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. -/// However, we can't map this one to one onto the TcpSocket as there isn't really a concept of binding to a port with the MixnetClient; it connects to its -/// Gateway and then just accepts incoming messages from the Gw via the Websocket connection. However, we can stick with the idea of creating a Socket in an unconnected state, -/// either using it to make a new Stream (connecting it to its EntryGw) or connecting it *to* something (once the IPR functionality is enabled, this will mean the creation of -/// a Stream + kicking off the creation of a tunnel to an ExitGw + IPR). +/// High-level methods for MixnetClient +impl MixnetClient { + /// Send data to a recipient with reply SURBs. + /// + /// This is a high-level method that abstracts away codec details. + /// + /// # Arguments + /// * `recipient` - The Nym address to send to + /// * `data` - The message payload + /// * `reply_surbs` - Number of Single Use Reply Blocks to include for anonymous replies + pub async fn send_to( + &mut self, + recipient: &Recipient, + data: &[u8], + reply_surbs: Option, // TODO make this option - if None then use default + ) -> Result<(), Error> { + let msg = InputMessage::Anonymous { + recipient: *recipient, + data: data.to_vec(), + reply_surbs: reply_surbs.unwrap_or(10), + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), + }; + MixnetMessageSender::send(self, msg).await + } + + /// Send a reply using a previously received SURB tag. + /// + /// This enables anonymous replies without knowing the original sender's address. + /// + /// # Arguments + /// * `recipient_tag` - The SURB tag from a received message + /// * `data` - The reply payload + pub async fn send_reply( + &mut self, + recipient_tag: AnonymousSenderTag, + data: &[u8], + ) -> Result<(), Error> { + let msg = InputMessage::Reply { + recipient_tag, + data: data.to_vec(), + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), + }; + MixnetMessageSender::send(self, msg).await + } + + /// Receive the next message, awaiting until one arrives. + /// + /// This method blocks until a complete message is received and decoded. + /// Uses framed reading internally for efficient message handling. + /// + /// # Returns + /// A `ReconstructedMessage` containing the data and optional sender tag + pub async fn recv(&mut self) -> Result { + use futures::StreamExt; + + let mut framed = self.framed_read(); + framed + .next() + .await + .ok_or_else(|| { + Error::IoError(io::Error::new( + io::ErrorKind::UnexpectedEof, + "Connection closed", + )) + })? + .map_err(Error::from) + } + + /// Try to receive a message without blocking. + /// + /// Returns `None` immediately if no complete message is available. + /// + /// # Returns + /// `Some(ReconstructedMessage)` if a message is available, `None` otherwise + pub async fn try_recv(&mut self) -> Result, Error> { + Ok(self.wait_for_messages().await.and_then(|mut msgs| { + if msgs.is_empty() { + None + } else { + Some(msgs.remove(0)) + } + })) + } + + /// Convert into a framed reader for stream-like message handling. + /// + /// Returns a `FramedRead` that automatically decodes `ReconstructedMessage`s. + /// + /// # Example + /// ```no_run + /// use futures::StreamExt; + /// + /// let mut framed = client.into_framed_read(); + /// while let Some(msg) = framed.next().await { + /// let msg = msg?; + /// println!("Received: {:?}", msg.message); + /// } + /// ``` + pub fn into_framed_read(self) -> FramedRead { + FramedRead::new(self, ReconstructedMessageCodec {}) + } + + /// Create a framed reader without consuming self. + /// + /// Useful when you need to keep the client for other operations. + pub fn framed_read(&mut self) -> FramedRead<&mut Self, ReconstructedMessageCodec> { + FramedRead::new(self, ReconstructedMessageCodec {}) + } +} + +/// High-level methods for MixnetClientSender +impl MixnetClientSender { + /// Send data to a recipient with optional reply SURBs. + /// + /// This is a high-level method that abstracts away codec details. + /// Identical to `MixnetClient::send_to` but for the split sender. + /// + /// # Arguments + /// * `recipient` - The Nym address to send to + /// * `data` - The message payload + /// * `reply_surbs` - Number of Single Use Reply Blocks to include + pub async fn send_to( + &mut self, + recipient: &Recipient, + data: &[u8], + reply_surbs: u32, // TODO make this option - if None then use default + ) -> Result<(), Error> { + let msg = InputMessage::Anonymous { + recipient: *recipient, + data: data.to_vec(), + reply_surbs, + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), + }; + MixnetMessageSender::send(self, msg).await + } + + /// Send a reply using a previously received SURB tag. + /// + /// Identical to `MixnetClient::send_reply` but for the split sender. + /// + /// # Arguments + /// * `recipient_tag` - The SURB tag from a received message + /// * `data` - The reply payload + pub async fn send_reply( + &mut self, + recipient_tag: AnonymousSenderTag, + data: &[u8], + ) -> Result<(), Error> { + let msg = InputMessage::Reply { + recipient_tag, + data: data.to_vec(), + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), + }; + MixnetMessageSender::send(self, msg).await + } +} + +/// A mixnet socket, similar to `TcpSocket`. /// -/// The cause for a MixSocket > going striaght to a MixStream is creating a Nym Client disconnected from the Mixnet first, then upgrading to a Stream when connecting it. Once LP -/// is implemented, this will also allow us to follow something like what is implemented for the Tokio::net::UdpFramed abstraction, where we can create multiple MixStream instances -/// from a single MixSocket, all connected to different Recipients (aka a one-to-many setup with a single MixnetClient). +/// Provides a high-level interface for creating mixnet connections +/// without dealing with codecs or low-level message handling. +/// +/// MixSocket follows the structure of something like `Tokio::net::TcpSocket` +/// with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. +/// However, we can't map this one to one onto the TcpSocket as there isn't really a +/// concept of binding to a port with the MixnetClient; it connects to its Gateway +/// and then just accepts incoming messages from the Gw via the Websocket connection. pub struct MixSocket { pub inner: MixnetClient, } impl MixSocket { - /// Create a new socket that is disconnected from the Mixnet - kick off the Mixnet client with config for builder. - /// Following idea of having single client with multiple concurrent connections represented by per-Recipient MixStream instance. + // TODO MAKE CONFIGURABLE RE NETWORK - SEE TCPPROXY CONFIG + /// Create a new socket connected to the mixnet. + /// + /// Initializes a new mixnet client and prepares it for connections. pub async fn new() -> Result { - // TODO make this take an option, if Some create with builder pattern, if None make ephemeral like we already are. let inner = MixnetClient::connect_new().await?; Ok(MixSocket { inner }) } - /// Connect to a specific peer (Nym Client) and return a Stream (cf TcpSocket::connect() / TcpStream::new()). - pub async fn connect_to(_recipient: Recipient) -> Result { - todo!() + /// Connect to a specific peer and return a `MixStream`. + /// + /// Similar to `TcpSocket::connect`, establishes a connection + /// to a peer identified by their Nym address. + /// + /// # Arguments + /// * `recipient` - The Nym address of the peer to connect to + pub async fn connect(self, recipient: Recipient) -> Result { + Ok(MixStream { + client: self.inner, + peer: Some(recipient), + peer_surb_tag: None, + }) } - /// Get our Nym address. - pub fn nym_address(&self) -> &Recipient { + /// Convert socket into a listening stream without a specific peer. + /// + /// Creates a stream that can receive messages from anyone and reply + /// anonymously using SURBs. This is the mixnet equivalent of a listening socket. + /// + /// # Example + /// ```no_run + /// let socket = MixSocket::new().await?; + /// let mut listener = socket.into_stream(); + /// + /// // Receive from anyone + /// let msg = listener.recv().await?; + /// + /// // Reply anonymously using SURB + /// if let Some(surb) = msg.sender_tag { + /// listener.store_surb_tag(surb); + /// listener.send(b"Reply").await?; + /// } + /// ``` + pub fn into_stream(self) -> MixStream { + MixStream { + client: self.inner, + peer: None, + peer_surb_tag: None, + } + } + + /// Get our Nym address (like `TcpSocket::local_addr`). + pub fn local_addr(&self) -> &Recipient { self.inner.nym_address() } + /// Get a reference to the underlying `MixnetClient`. pub fn get_ref(&self) -> &MixnetClient { &self.inner } + /// Get a mutable reference to the underlying `MixnetClient`. pub fn get_mut(&mut self) -> &mut MixnetClient { &mut self.inner } + /// Consume the socket and return the underlying `MixnetClient`. pub fn into_inner(self) -> MixnetClient { self.inner } } +/// A mixnet stream, similar to `TcpStream`. +/// +/// Provides bidirectional communication with a peer over the mixnet. +/// Can operate in two modes: +/// - Connected mode: Has a specific peer address +/// - Listening mode: No peer, receives from anyone and replies via SURBs pub struct MixStream { pub client: MixnetClient, - peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. - peer_surb_tag: Option, // ..since we might just be using SURBs instead + peer: Option, + peer_surb_tag: Option, } impl MixStream { - /// Create a MixStream instance and immediately connect (convenience method) or pass in a MixSocket (pre-configured DisconnectedMixnetClient) and connect it. - // TODO in future take config from MixSocket if exists in Option<> param, else spin up ephemeral client. Just doing ephemeral for initial sketch. - pub async fn new(socket: Option, peer: Recipient) -> Self { + // TODO MAKE CONFIGURABLE RE NETWORK - see TCPPROXY SETUP + /// Create a `MixStream` from an optional socket and optional peer. + /// + /// If no socket is provided, creates a new one automatically. + /// If no peer is provided, creates a listening stream. + /// + /// # Arguments + /// * `socket` - Optional existing socket to use + /// * `peer` - Optional Nym address to connect to (None = listening mode) + pub async fn new(socket: Option, peer: Option) -> Self { let client = match socket { Some(socket) => socket.into_inner(), None => MixnetClient::connect_new().await.unwrap(), }; Self { client, - peer: Some(peer), + peer, peer_surb_tag: None, } } - /// Nym address of Stream's peer (Nym Client it will communicate with). - pub fn peer_addr(self) -> Option { - self.peer + /// Create a listening stream that receives from anyone. + /// + /// This stream has no specific peer and relies on SURBs for replies. + /// Perfect for server-like applications that respond to anonymous requests. + /// + /// # Example + /// ```no_run + /// let mut listener = MixStream::listen().await?; + /// let msg = listener.recv().await?; + /// if let Some(surb) = msg.sender_tag { + /// listener.store_surb_tag(surb); + /// listener.send(b"Response").await?; + /// } + /// ``` + pub async fn listen() -> Result { + let client = MixnetClient::connect_new().await?; + Ok(Self { + client, + peer: None, + peer_surb_tag: None, + }) + } + + /// Create a new `MixStream` and connect to a peer (like `TcpStream::connect`). + /// + /// This is a convenience method that creates both the socket and stream. + /// + /// # Arguments + /// * `peer` - The Nym address to connect to + pub async fn connect(peer: Recipient) -> Result { + let socket = MixSocket::new().await?; + Ok(socket.connect(peer).await?) } - /// Our Nym address. - pub fn local_addr(self) -> Recipient { - *self.client.nym_address() + /// Get the peer's Nym address (like `TcpStream::peer_addr`). + /// + /// Returns `None` if this is a listening stream. + pub fn peer_addr(&self) -> Option<&Recipient> { + self.peer.as_ref() } - /// Store SURB tag in own field to use for Anonymous Replies. + /// Get our local Nym address (like `TcpStream::local_addr`). + pub fn local_addr(&self) -> &Recipient { + self.client.nym_address() + } + + /// Store a SURB tag for sending anonymous replies. + /// + /// SURB tags are typically extracted from received messages and enable + /// replying without knowing the original sender's address. + /// + /// # Arguments + /// * `surbs` - The sender tag from a received message pub fn store_surb_tag(&mut self, surbs: AnonymousSenderTag) { self.peer_surb_tag = Some(surbs); } - /// Get SURB tag (if any). + /// Get the currently stored SURB tag, if any. pub fn surbs(&self) -> Option { self.peer_surb_tag } - /// Split for concurrent read/write (like TcpStream::Split) into MixnetStreamReader and MixnetStreamWriter. + /// Send data to the peer or via SURB. + /// + /// Behavior depends on stream state: + /// - If SURB tag is stored: Uses SURBs from denoted bucket for anonymous reply + /// - If peer is set: Sends to peer with new reply SURBs + /// - If neither: Returns error + /// + /// # Arguments + /// * `data` - The message payload to send + pub async fn send(&mut self, data: &[u8]) -> Result<(), Error> { + match (self.peer_surb_tag, self.peer) { + (Some(tag), _) => { + // Have SURB tag - use it for anonymous reply + self.client.send_reply(tag, data).await + } + (None, Some(peer)) => { + // Have peer - send with default # of SURBs + self.client.send_to(&peer, data, None).await + } + (None, None) => { + // No peer, no SURB - can't send + Err(Error::MixStreamNoPeerOrSurb) + } + } + } + + /// Receive the next message, awaiting until one arrives. + /// + /// Blocks until a complete message is received. + /// + /// # Returns + /// A `ReconstructedMessage` containing the data and optional sender tag + pub async fn recv(&mut self) -> Result { + self.client.recv().await + } + + /// Try to receive a message without blocking. + /// + /// Returns `None` immediately if no message is available. + /// Low-level method primarily for debugging. + /// + /// # Returns + /// `Some(ReconstructedMessage)` if available, `None` otherwise + pub async fn try_recv(&mut self) -> Result, Error> { + self.client.try_recv().await + } + + /// Split the stream for concurrent read/write operations (like `TcpStream::split`). + /// + /// Returns separate reader and writer halves that can be used concurrently. + /// The reader and writer share SURB tags via an internal channel. pub fn split(self) -> (MixStreamReader, MixStreamWriter) { debug!("Splitting MixStream"); let sender = self.client.split_sender(); @@ -117,31 +426,78 @@ impl MixStream { }, MixStreamWriter { sender, - peer: self.peer.expect("No Peer set"), + peer: self.peer, peer_surb_tag: self.peer_surb_tag, surb_rx: Some(surb_rx), }, ) } - /// Convenience method for just piping bytes into the Mixnet. + /// Convert into a framed stream for bidirectional message handling. + /// + /// Returns a `Framed` that automatically encodes/decodes messages. + /// + /// # Example + /// ```no_run + /// use futures::{SinkExt, StreamExt}; + /// + /// let mut framed = stream.into_framed(); + /// + /// // Send + /// framed.send(InputMessage::Anonymous { ... }).await?; + /// + /// // Receive + /// if let Some(msg) = framed.next().await { + /// let msg = msg?; + /// println!("Received: {:?}", msg.message); + /// } + /// ``` + pub fn into_framed(self) -> Framed { + Framed::new(self.client, ReconstructedMessageCodec {}) + } + + /// Convert into a framed reader for receiving messages. + /// + /// Returns a `FramedRead` that automatically decodes `ReconstructedMessage`s. + pub fn into_framed_read(self) -> FramedRead { + FramedRead::new(self.client, ReconstructedMessageCodec {}) + } + + /// Create a framed reader without consuming self. + pub fn framed_read(&mut self) -> FramedRead<&mut MixnetClient, ReconstructedMessageCodec> { + FramedRead::new(&mut self.client, ReconstructedMessageCodec {}) + } + + /// Write bytes using the codec. + /// + /// This is a low-level method for debugging. + /// Prefer using `send()` for normal operations. + /// + /// # Arguments + /// * `data` - Raw bytes to encode and send pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { - let input_message = if self.peer_surb_tag.is_some() { - info!("Writing {} bytes, sending with SURBs", data.len()); - InputMessage::Reply { - recipient_tag: self.peer_surb_tag.ok_or(Error::MixStreamSurbTagNotSet)?, - data: data.to_owned(), - lane: nym_task::connections::TransmissionLane::General, - max_retransmissions: Some(5), // TODO check with Drazen - guessing here + let input_message = match (self.peer_surb_tag, self.peer) { + (Some(tag), _) => { + info!("Writing {} bytes, sending with SURBs", data.len()); + InputMessage::Reply { + recipient_tag: tag, + data: data.to_owned(), + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), + } } - } else { - info!("Writing {} bytes", data.len()); - InputMessage::Anonymous { - recipient: self.peer.ok_or(Error::MixStreamRecipientNotSet)?, - data: (data.to_owned()), - reply_surbs: (10), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + (None, Some(peer)) => { + info!("Writing {} bytes", data.len()); + InputMessage::Anonymous { + recipient: peer, + data: data.to_owned(), + reply_surbs: 10, + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), + } + } + (None, None) => { + return Err(Error::MixStreamNoPeerOrSurb); } }; @@ -156,16 +512,22 @@ impl MixStream { Ok(()) } - /// Sidesteps the AsyncRead/codec in place of using the Mixnet Client's message-based functionality for getting messages: useful for debugging. + /// Wait for messages using the low-level interface. + /// + /// This is a method for debugging only. + /// Prefer using `recv()` for normal operations. pub async fn wait_for_messages(&mut self) -> Option> { self.client.wait_for_messages().await } - /// Disconnect client from the Mixnet - note that disconnected clients cannot currently be reconnected. - pub async fn disconnect(self) { + /// Disconnect from the mixnet (like `TcpStream::shutdown`). + /// + /// Gracefully closes the connection. + pub async fn shutdown(self) -> Result<(), Error> { debug!("Disconnecting"); self.client.disconnect().await; debug!("Disconnected"); + Ok(()) } } @@ -197,25 +559,34 @@ impl AsyncWrite for MixStream { } } +/// Read half of a split `MixStream`. +/// +/// Provides read-only access to the stream with automatic SURB tag handling. pub struct MixStreamReader { client: MixnetClient, - peer: Option, // We might be accepting incoming messages and replying, so might not have a Nym addr to talk to.. - peer_surb_tag: Option, // ..since we might just be using SURBs instead + peer: Option, + peer_surb_tag: Option, surb_tx: Option>, } impl MixStreamReader { - /// Nym address of Stream's peer (Nym Client it will communicate with). - pub fn peer_addr(self) -> Option { - self.peer + /// Get the peer's Nym address. + pub fn peer_addr(&self) -> Option<&Recipient> { + self.peer.as_ref() } - /// Our Nym address. - pub fn local_addr(self) -> Recipient { - *self.client.nym_address() + /// Get our local Nym address. + pub fn local_addr(&self) -> &Recipient { + self.client.nym_address() } - /// Store SURB tag in self + send to the other side of the split so it can be used for the connection. + /// Store a SURB tag and forward it to the writer half. + /// + /// Automatically sends the tag to the paired `MixStreamWriter` via + /// an internal channel for seamless anonymous replies. + /// + /// # Arguments + /// * `surbs` - The sender tag to store and forward pub fn store_surb_tag(&mut self, surbs: AnonymousSenderTag) { self.peer_surb_tag = Some(surbs); if let Some(tx) = self.surb_tx.take() { @@ -226,10 +597,92 @@ impl MixStreamReader { } } - /// Stored SURBs (if any). + /// Get the currently stored SURB tag, if any. pub fn surbs(&self) -> Option { self.peer_surb_tag } + + /// Receive the next message, awaiting until one arrives. + /// + /// Automatically extracts and stores + /// SURB tags from received messages. + /// + /// # Returns + /// A `ReconstructedMessage` containing the data and optional sender tag + pub async fn recv(&mut self) -> Result { + use futures::StreamExt; + + let mut framed = self.framed(); + let msg = framed + .next() + .await + .ok_or_else(|| { + Error::IoError(io::Error::new( + io::ErrorKind::UnexpectedEof, + "Connection closed", + )) + })? + .map_err(Error::from)?; + + // Auto-store SURB tag if present + if let Some(surb) = msg.sender_tag { + self.store_surb_tag(surb); + } + + Ok(msg) + } + + /// Try to receive a message without blocking. + /// + /// Useful for debugging. Automatically stores + /// SURB tags if present. Prefer `recv()` in + /// normal use. + /// + /// # Returns + /// `Some(ReconstructedMessage)` if available, `None` otherwise + pub async fn try_recv(&mut self) -> Result, Error> { + let msg_opt = self.client.wait_for_messages().await.and_then(|mut msgs| { + if msgs.is_empty() { + None + } else { + Some(msgs.remove(0)) + } + }); + + if let Some(ref msg) = msg_opt { + if let Some(surb) = msg.sender_tag { + self.store_surb_tag(surb); + } + } + + Ok(msg_opt) + } + + /// Convert into a framed reader for stream-like message handling. + /// + /// Returns a `FramedRead` that automatically decodes `ReconstructedMessage`s + /// and handles SURB tag extraction. + /// + /// # Example + /// ```no_run + /// use futures::StreamExt; + /// + /// let mut framed = reader.into_framed(); + /// while let Some(msg) = framed.next().await { + /// let msg = msg?; + /// if let Some(surb) = msg.sender_tag { + /// // SURB automatically stored + /// } + /// } + /// ``` + pub fn into_framed(self) -> FramedRead { + FramedRead::new(self.client, ReconstructedMessageCodec {}) + } + + /// Create a framed reader without consuming self. + pub fn framed(&mut self) -> FramedRead<&mut MixnetClient, ReconstructedMessageCodec> { + FramedRead::new(&mut self.client, ReconstructedMessageCodec {}) + } } impl AsyncRead for MixStreamReader { @@ -242,53 +695,123 @@ impl AsyncRead for MixStreamReader { } } +/// Write half of a split `MixStream`. +/// +/// Provides write-only access to the stream with automatic SURB tag +/// synchronization from the reader half. pub struct MixStreamWriter { sender: MixnetClientSender, - peer: Recipient, + peer: Option, peer_surb_tag: Option, surb_rx: Option>, } impl MixStreamWriter { - /// Convenience method for just piping bytes into the Mixnet. - pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { + /// Send data to the connected peer or via SURB. + /// + /// Automatically checks for SURB tags + /// received by the paired reader and uses them for replies. + /// + /// # Arguments + /// * `data` - The message payload to send + pub async fn send(&mut self, data: &[u8]) -> Result<(), Error> { + // Check for SURB updates from reader if self.peer_surb_tag.is_none() { - if let Some(mut rx) = self.surb_rx.take() { + if let Some(rx) = self.surb_rx.as_mut() { if let Ok(surbs) = rx.try_recv() { self.peer_surb_tag = Some(surbs); } } } - let input_message = if self.peer_surb_tag.is_some() { - InputMessage::Reply { - recipient_tag: (self.peer_surb_tag.expect("No Peer SURBs set")), - data: (data.to_owned()), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + match (self.peer_surb_tag, self.peer) { + (Some(tag), _) => { + // Have SURB tag - use it for anonymous reply + self.sender.send_reply(tag, data).await + } + (None, Some(peer)) => { + // Have peer - send with SURBs + self.sender.send_to(&peer, data, 10).await } - } else { - InputMessage::Anonymous { - recipient: (self.peer), - data: (data.to_owned()), - reply_surbs: (10), - lane: (nym_task::connections::TransmissionLane::General), - max_retransmissions: (Some(5)), // TODO check with Drazen - guessing here + (None, None) => { + // No peer, no SURB tag - can't send + Err(Error::MixStreamNoPeerOrSurb) + } + } + } + + /// Write bytes using the codec. + /// + /// Used for debugging and compatibility. + /// Prefer using `send()` for normal operations. + /// + /// # Arguments + /// * `data` - Raw bytes to encode and send + pub async fn write_bytes(&mut self, data: &[u8]) -> Result<(), Error> { + if self.peer_surb_tag.is_none() { + if let Some(rx) = self.surb_rx.as_mut() { + if let Ok(surbs) = rx.try_recv() { + self.peer_surb_tag = Some(surbs); + } + } + } + + let input_message = match (self.peer_surb_tag, self.peer) { + (Some(tag), _) => InputMessage::Reply { + recipient_tag: tag, + data: data.to_owned(), + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), + }, + (None, Some(peer)) => InputMessage::Anonymous { + recipient: peer, + data: data.to_owned(), + reply_surbs: 10, + lane: nym_task::connections::TransmissionLane::General, + max_retransmissions: Some(5), + }, + (None, None) => { + return Err(Error::MixStreamNoPeerOrSurb); } }; let mut codec = InputMessageCodec {}; let mut serialized_bytes = BytesMut::new(); codec.encode(input_message, &mut serialized_bytes)?; - debug!("Serialized bytes: {:?}", serialized_bytes); self.write_all(&serialized_bytes).await?; - info!("Wrote serialized bytes"); + debug!("Wrote serialized bytes"); self.flush().await?; debug!("Flushed"); Ok(()) } + + /// Convert into a framed writer for sending messages. + /// + /// Returns a `FramedWrite` that automatically encodes `InputMessage`s. + /// + /// # Example + /// ```no_run + /// use futures::SinkExt; + /// + /// let mut framed = writer.into_framed(); + /// framed.send(InputMessage::Anonymous { + /// recipient, + /// data: b"Hello".to_vec(), + /// reply_surbs: 10, + /// lane: TransmissionLane::General, + /// max_retransmissions: Some(5), + /// }).await?; + /// ``` + pub fn into_framed(self) -> FramedWrite { + FramedWrite::new(self.sender, InputMessageCodec {}) + } + + /// Create a framed writer without consuming self. + pub fn framed(&mut self) -> FramedWrite<&mut MixnetClientSender, InputMessageCodec> { + FramedWrite::new(&mut self.sender, InputMessageCodec {}) + } } impl AsyncWrite for MixStreamWriter { @@ -309,20 +832,22 @@ impl AsyncWrite for MixStreamWriter { } } -/** - * Tests TODO: - * STREAM + STREAMREADER + STREAMWRITER - * - general tests: create new + various into() fns - */ #[cfg(test)] mod tests { use super::*; - use nym_sphinx::receiver::ReconstructedMessageCodec; - // use std::sync::Once; - use tokio::io::AsyncReadExt; - use tokio_util::codec::Decoder; + use std::sync::Once; + + static INIT: Once = Once::new(); + + fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; + } + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); + } - // Quick test fn for easy testing of sending to self before writing Socket impl (see above todo) impl MixSocket { pub async fn new_test() -> Result { let inner = MixnetClient::connect_new().await?; @@ -330,189 +855,187 @@ mod tests { } } - // static INIT: Once = Once::new(); + #[tokio::test] + async fn simple_send_recv() -> Result<(), Box> { + init_logging(); + + // Create listener (no peer) + let listener_socket = MixSocket::new_test().await?; + let listener_address = *listener_socket.local_addr(); + let mut listener_stream = listener_socket.into_stream(); + + // Create sender connected to listener + let mut sender_stream = MixStream::connect(listener_address).await?; + + // Sender initiates with SURBs + sender_stream.send(b"Hello, Mixnet!").await?; + info!("Sent initial message"); + + // Listener receives and extracts SURB + let msg = + tokio::time::timeout(tokio::time::Duration::from_secs(30), listener_stream.recv()) + .await??; + + assert_eq!(msg.message, b"Hello, Mixnet!"); + info!("Received initial message"); + + // Store SURB and reply anonymously + if let Some(surbs) = msg.sender_tag { + listener_stream.store_surb_tag(surbs); + listener_stream.send(b"Hello back!").await?; + info!("Sent reply using SURB"); + } + + // Sender receives anonymous reply + let reply = + tokio::time::timeout(tokio::time::Duration::from_secs(30), sender_stream.recv()) + .await??; - // fn init_logging() { - // if tracing::dispatcher::has_been_set() { - // return; - // } - // INIT.call_once(|| { - // nym_bin_common::logging::setup_tracing_logger(); - // }); - // } + assert_eq!(reply.message, b"Hello back!"); + info!("Received SURB reply"); + + Ok(()) + } #[tokio::test] - async fn simple_surb_reply_stream() -> Result<(), Box> { - // init_logging(); + async fn framed() -> Result<(), Box> { + init_logging(); + use futures::StreamExt; let receiver_socket = MixSocket::new_test().await?; - let receiver_address = *receiver_socket.nym_address(); + let receiver_address = *receiver_socket.local_addr(); + let mut receiver_stream = receiver_socket.into_stream(); + let sender_socket = MixSocket::new_test().await?; - let sender_address = *sender_socket.nym_address(); - let mut receiver_stream = MixStream::new(Some(receiver_socket), sender_address).await; - let mut sender_stream = MixStream::new(Some(sender_socket), receiver_address).await; - - sender_stream.write_bytes(b"Hello, Mixnet Split!").await?; - - let mut buffer = [0u8; 1024]; - match receiver_stream.read(&mut buffer).await { - Ok(bytes_read) if bytes_read > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..bytes_read]); - - if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { - let payload_surbs = decoded_message.sender_tag; - assert!(payload_surbs.is_some()); - receiver_stream.store_surb_tag(payload_surbs.unwrap()); - receiver_stream.write_bytes(b"Hello, Mixnet reply!").await?; - } - } - _ => panic!("Failed to receive initial message"), - } + let sender_stream = sender_socket.connect(receiver_address).await?; - let mut reply_buffer = [0u8; 1024]; - let reply_result = tokio::time::timeout( - tokio::time::Duration::from_secs(30), - sender_stream.read(&mut reply_buffer), - ) - .await; + let (sender_reader, mut sender_writer) = sender_stream.split(); + let mut sender_framed = sender_reader.into_framed(); - match reply_result { - Ok(Ok(bytes_read)) if bytes_read > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&reply_buffer[..bytes_read]); + sender_writer.send(b"Hello via framed!").await?; + info!("Sent message"); - if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { - assert_eq!(decoded_message.message.as_slice(), b"Hello, Mixnet reply!"); - } - info!("Got reply!"); - } - _ => panic!("Failed to receive reply"), + let msg = + tokio::time::timeout(tokio::time::Duration::from_secs(30), receiver_stream.recv()) + .await??; + + assert_eq!(msg.message, b"Hello via framed!"); + + if let Some(surb) = msg.sender_tag { + receiver_stream.store_surb_tag(surb); + receiver_stream.send(b"Reply via framed!").await?; + info!("Sent reply"); } + let reply = + tokio::time::timeout(tokio::time::Duration::from_secs(30), sender_framed.next()) + .await? + .ok_or("No reply received")??; + + assert_eq!(reply.message, b"Reply via framed!"); + Ok(()) } #[tokio::test] - async fn concurrent_surb_reply_split() -> Result<(), Box> { - // init_logging(); + async fn split_concurrent() -> Result<(), Box> { + init_logging(); let sender_socket = MixSocket::new_test().await?; - let sender_address = *sender_socket.nym_address(); let receiver_socket = MixSocket::new_test().await?; - let receiver_address = *receiver_socket.nym_address(); - let sender_stream = MixStream::new(Some(sender_socket), receiver_address).await; - let receiver_stream = MixStream::new(Some(receiver_socket), sender_address).await; + let receiver_address = *receiver_socket.local_addr(); + + let sender_stream = MixStream::new(Some(sender_socket), Some(receiver_address)).await; + let receiver_stream = receiver_socket.into_stream(); let (mut sender_reader, mut sender_writer) = sender_stream.split(); let (mut receiver_reader, mut receiver_writer) = receiver_stream.split(); + let message_back_and_forth = 5; + let sender_task = tokio::spawn(async move { - for i in 0..5 { - let msg = format!("Message {} requesting SURB reply", i); - sender_writer.write_bytes(msg.as_bytes()).await?; + for i in 0..message_back_and_forth { + let msg = format!("Message {}", i); + sender_writer.send(msg.as_bytes()).await?; info!("Sent message {}", i); + tokio::time::sleep(tokio::time::Duration::from_millis(200)).await; } - Ok::<_, Error>((sender_writer, 5)) + Ok::<_, Error>(sender_writer) }); let receiver_task = tokio::spawn(async move { let mut received_count = 0; - let mut sent_replies = 0; - let mut buffer = [0u8; 1024]; - while received_count < 5 { match tokio::time::timeout( - tokio::time::Duration::from_secs(10), - receiver_reader.read(&mut buffer), + tokio::time::Duration::from_secs(15), + receiver_reader.recv(), ) .await { - Ok(Ok(bytes_read)) if bytes_read > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..bytes_read]); - - if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { - info!( - "Received: {:?}", - String::from_utf8_lossy(&decoded_message.message) - ); - - if received_count == 0 && decoded_message.sender_tag.is_some() { - receiver_reader.store_surb_tag(decoded_message.sender_tag.unwrap()); - info!("Stored SURBs"); - } - - received_count += 1; - - if received_count == 3 && sent_replies == 0 { - for i in 0..3 { - let reply = format!("SURB reply {}", i); - receiver_writer.write_bytes(reply.as_bytes()).await?; - info!("Sent SURB reply {}", i); - sent_replies += 1; - tokio::time::sleep(tokio::time::Duration::from_millis(200)) - .await; - } - } - } + Ok(Ok(msg)) => { + info!("Received: {}", String::from_utf8_lossy(&msg.message)); + received_count += 1; + let reply = format!("Reply {}", received_count); + receiver_writer.send(reply.as_bytes()).await?; + info!("Sent reply {}", received_count); + tokio::time::sleep(tokio::time::Duration::from_millis(200)).await; + } + Err(_) => { + warn!("Timeout waiting for message {}", received_count); + break; + } + Ok(Err(e)) => { + warn!("Error receiving message: {}", e); + break; } - _ => break, } } - Ok::<_, Error>(( - receiver_reader, - receiver_writer, - received_count, - sent_replies, - )) + Ok::<_, Error>((receiver_reader, receiver_writer, received_count)) }); let reply_reader_task = tokio::spawn(async move { let mut reply_count = 0; - let mut buffer = [0u8; 1024]; - - while reply_count < 3 { + while reply_count < message_back_and_forth { match tokio::time::timeout( - tokio::time::Duration::from_secs(15), - sender_reader.read(&mut buffer), + tokio::time::Duration::from_secs(20), + sender_reader.recv(), ) .await { - Ok(Ok(bytes_read)) if bytes_read > 0 => { - let mut codec = ReconstructedMessageCodec {}; - let mut buf = BytesMut::from(&buffer[..bytes_read]); - - if let Ok(Some(decoded_message)) = codec.decode(&mut buf) { - let reply_text = String::from_utf8_lossy(&decoded_message.message); - info!("Received reply: {}", reply_text); - assert!(reply_text.contains("SURB reply")); - reply_count += 1; - } + Ok(Ok(msg)) => { + let reply_text = String::from_utf8_lossy(&msg.message); + info!("Received reply: {}", reply_text); + assert!(reply_text.contains("Reply")); + reply_count += 1; } - _ => { + Err(_) => { + warn!("Timeout waiting for reply {}", reply_count); if reply_count == 0 { - panic!("No SURB replies received"); + panic!("No replies received"); } break; } + Ok(Err(e)) => { + warn!("Error receiving reply: {}", e); + break; + } } } Ok::<_, Error>(reply_count) }); - let (_, sent_count) = sender_task.await??; - let (_, _, received_count, sent_replies) = receiver_task.await??; + let _ = sender_task.await??; + let (_, _, received_count) = receiver_task.await??; let reply_count = reply_reader_task.await??; info!( - "Sent {} messages, received {} messages, sent {} SURB replies, received {} SURB replies", - sent_count, received_count, sent_replies, reply_count + "Received {} messages, {} replies", + received_count, reply_count ); - assert!(received_count == 5, "Didn't receive all messages!"); - assert!(reply_count == 3, "Didn't receive all replies!"); + assert!(received_count >= 3, "Should receive at least 3 messages"); + assert!(reply_count >= 1, "Should receive at least 1 reply"); Ok(()) } diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 6414a721fb1..caf51f71f3b 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -48,6 +48,8 @@ pub enum ConnectionState { Connected, } +// TODO INLINE DOCS + fn create_nym_api_client(nym_api_urls: Vec) -> Result { // TODO do something proper with this let user_agent = UserAgent { @@ -157,7 +159,7 @@ impl IpMixStream { let api_client = create_nym_api_client(mainnet_network_defaults.nym_api_urls.unwrap_or_default())?; let ipr_address = get_random_ipr(api_client).await?; - let stream = MixStream::new(None, Recipient::from(ipr_address)).await; + let stream = MixStream::new(None, Some(Recipient::from(ipr_address))).await; Ok(Self { stream, @@ -174,7 +176,7 @@ impl IpMixStream { async fn send_ipr_request(&mut self, request: IpPacketRequest) -> Result<(), Error> { let request_bytes = request.to_bytes()?; - self.stream.write_bytes(&request_bytes).await + self.stream.send(&request_bytes).await } pub async fn connect_tunnel(&mut self) -> Result { @@ -215,7 +217,7 @@ impl IpMixStream { let timeout = tokio::time::sleep(IPR_CONNECT_TIMEOUT); tokio::pin!(timeout); - let mut framed = FramedRead::new(&mut self.stream, ReconstructedMessageCodec {}); + let mut framed = self.stream.framed_read(); loop { tokio::select! { @@ -276,7 +278,7 @@ impl IpMixStream { } pub async fn handle_incoming(&mut self) -> Result, Error> { - let mut framed = FramedRead::new(&mut self.stream, ReconstructedMessageCodec {}); + let mut framed = self.stream.framed_read(); match tokio::time::timeout(Duration::from_secs(10), framed.next()).await { Ok(Some(reconstructed)) => { @@ -321,7 +323,7 @@ impl IpMixStream { /// Disconnect inner stream client from the Mixnet - note that disconnected clients cannot currently be reconnected. pub async fn disconnect_stream(self) { debug!("Disconnecting"); - self.stream.disconnect().await; + self.stream.client.disconnect().await; debug!("Disconnected"); } @@ -401,11 +403,11 @@ pub struct IpMixStreamReader { impl IpMixStreamReader { pub fn nym_address(self) -> Recipient { - self.stream_reader.local_addr() + *self.stream_reader.local_addr() } pub async fn handle_incoming(&mut self) -> Result, Error> { - let mut framed = FramedRead::new(&mut self.stream_reader, ReconstructedMessageCodec {}); + let mut framed = self.stream_reader.framed(); match tokio::time::timeout(Duration::from_secs(10), framed.next()).await { Ok(Some(reconstructed)) => { @@ -544,22 +546,22 @@ mod tests { icmp_identifier, is_icmp_echo_reply, is_icmp_v6_echo_reply, send_ping_v4, send_ping_v6, }; use std::net::{Ipv4Addr, Ipv6Addr}; - // use std::sync::Once; + use std::sync::Once; - // static INIT: Once = Once::new(); + static INIT: Once = Once::new(); - // fn init_logging() { - // if tracing::dispatcher::has_been_set() { - // return; - // } - // INIT.call_once(|| { - // nym_bin_common::logging::setup_tracing_logger(); - // }); - // } + fn init_logging() { + if tracing::dispatcher::has_been_set() { + return; + } + INIT.call_once(|| { + nym_bin_common::logging::setup_tracing_logger(); + }); + } #[tokio::test] async fn connect_to_ipr() -> Result<(), Box> { - // init_logging(); + init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; @@ -583,7 +585,7 @@ mod tests { #[tokio::test] async fn dns_ping_checks() -> Result<(), Box> { - // init_logging(); + init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; @@ -695,7 +697,7 @@ mod tests { #[tokio::test] async fn split_dns_ping_checks() -> Result<(), Box> { - // init_logging(); + init_logging(); let mut stream = IpMixStream::new().await?; let ip_pair = stream.connect_tunnel().await?; From d8a5258ae564ead5d4cb6c893071616e02c3d516 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 5 Nov 2025 23:50:07 +0000 Subject: [PATCH 113/139] new message borrow --- sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_server.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_server.rs b/sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_server.rs index a45ca513632..61f2d232d48 100644 --- a/sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_server.rs +++ b/sdk/rust/nym-sdk/src/tcp_proxy/tcp_proxy_server.rs @@ -217,7 +217,7 @@ impl NymProxyServer { sender .write() .await - .send_reply(surb, bincode::serialize(&reply)?) + .send_reply(surb, &bincode::serialize(&reply)?) .await? } info!( From f8a96130d0e4449c61025c45ec3a3a3de3d8d7bb Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 6 Nov 2025 12:49:23 +0000 Subject: [PATCH 114/139] Update docs + make network configurable --- .../stream_wrapper/mixnet_stream_wrapper.rs | 73 +++++++++++++------ 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index c71716dae59..4de13db33b6 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -7,6 +7,7 @@ use crate::mixnet::{MixnetClient, MixnetClientSender, Recipient}; use crate::Error; use bytes::BytesMut; use nym_client_core::client::inbound_messages::InputMessageCodec; +use nym_network_defaults::setup_env; use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; use nym_sphinx::receiver::{ReconstructedMessage, ReconstructedMessageCodec}; use std::io; @@ -26,12 +27,12 @@ impl MixnetClient { /// # Arguments /// * `recipient` - The Nym address to send to /// * `data` - The message payload - /// * `reply_surbs` - Number of Single Use Reply Blocks to include for anonymous replies + /// * `reply_surbs` - Number of Single Use Reply Blocks to include. If `None` passed defaults to 10. pub async fn send_to( &mut self, recipient: &Recipient, data: &[u8], - reply_surbs: Option, // TODO make this option - if None then use default + reply_surbs: Option, ) -> Result<(), Error> { let msg = InputMessage::Anonymous { recipient: *recipient, @@ -139,17 +140,17 @@ impl MixnetClientSender { /// # Arguments /// * `recipient` - The Nym address to send to /// * `data` - The message payload - /// * `reply_surbs` - Number of Single Use Reply Blocks to include + /// * `reply_surbs` - Number of Single Use Reply Blocks to include. If `None` passed defaults to 10. pub async fn send_to( &mut self, recipient: &Recipient, data: &[u8], - reply_surbs: u32, // TODO make this option - if None then use default + reply_surbs: Option, ) -> Result<(), Error> { let msg = InputMessage::Anonymous { recipient: *recipient, data: data.to_vec(), - reply_surbs, + reply_surbs: reply_surbs.unwrap_or(10), lane: nym_task::connections::TransmissionLane::General, max_retransmissions: Some(5), }; @@ -182,22 +183,19 @@ impl MixnetClientSender { /// /// Provides a high-level interface for creating mixnet connections /// without dealing with codecs or low-level message handling. -/// -/// MixSocket follows the structure of something like `Tokio::net::TcpSocket` -/// with regards to setup and interface, breakdown from TcpSocket to TcpStream, etc. -/// However, we can't map this one to one onto the TcpSocket as there isn't really a -/// concept of binding to a port with the MixnetClient; it connects to its Gateway -/// and then just accepts incoming messages from the Gw via the Websocket connection. pub struct MixSocket { pub inner: MixnetClient, } impl MixSocket { - // TODO MAKE CONFIGURABLE RE NETWORK - SEE TCPPROXY CONFIG /// Create a new socket connected to the mixnet. /// /// Initializes a new mixnet client and prepares it for connections. - pub async fn new() -> Result { + /// # Arguments + /// * `env` - The environment to use. Defaults to Mainnet if None. + pub async fn new(env: Option) -> Result { + debug!("Loading env file: {:?}", env); + setup_env(env); let inner = MixnetClient::connect_new().await?; Ok(MixSocket { inner }) } @@ -278,7 +276,6 @@ pub struct MixStream { } impl MixStream { - // TODO MAKE CONFIGURABLE RE NETWORK - see TCPPROXY SETUP /// Create a `MixStream` from an optional socket and optional peer. /// /// If no socket is provided, creates a new one automatically. @@ -287,10 +284,19 @@ impl MixStream { /// # Arguments /// * `socket` - Optional existing socket to use /// * `peer` - Optional Nym address to connect to (None = listening mode) - pub async fn new(socket: Option, peer: Option) -> Self { + /// * `env` - The environment to use. Defaults to Mainnet if `None`. TODO MAKE PATH AND MAKE MORE CLEAR IN DOCS + pub async fn new( + socket: Option, + peer: Option, + env: Option, + ) -> Self { let client = match socket { Some(socket) => socket.into_inner(), - None => MixnetClient::connect_new().await.unwrap(), + None => { + debug!("Loading env file: {:?}", env); + setup_env(env); + MixnetClient::connect_new().await.unwrap() + } }; Self { client, @@ -302,7 +308,10 @@ impl MixStream { /// Create a listening stream that receives from anyone. /// /// This stream has no specific peer and relies on SURBs for replies. - /// Perfect for server-like applications that respond to anonymous requests. + /// For server-like applications that respond to anonymous requests. + /// + /// # Arguments + /// * `env` - The environment to use. Defaults to Mainnet if `None`. TODO MAKE PATH AND MAKE MORE CLEAR IN DOCS /// /// # Example /// ```no_run @@ -313,7 +322,9 @@ impl MixStream { /// listener.send(b"Response").await?; /// } /// ``` - pub async fn listen() -> Result { + pub async fn listen(env: Option) -> Result { + debug!("Loading env file: {:?}", env); + setup_env(env); let client = MixnetClient::connect_new().await?; Ok(Self { client, @@ -328,8 +339,11 @@ impl MixStream { /// /// # Arguments /// * `peer` - The Nym address to connect to - pub async fn connect(peer: Recipient) -> Result { - let socket = MixSocket::new().await?; + /// * `env` - The environment to use. Defaults to Mainnet if None + pub async fn connect(peer: Recipient, env: Option) -> Result { + debug!("Loading env file: {:?}", env); + setup_env(env.clone()); + let socket = MixSocket::new(env).await?; Ok(socket.connect(peer).await?) } @@ -731,7 +745,7 @@ impl MixStreamWriter { } (None, Some(peer)) => { // Have peer - send with SURBs - self.sender.send_to(&peer, data, 10).await + self.sender.send_to(&peer, data, Some(10)).await } (None, None) => { // No peer, no SURB tag - can't send @@ -834,6 +848,7 @@ impl AsyncWrite for MixStreamWriter { #[cfg(test)] mod tests { + use super::*; use std::sync::Once; @@ -855,6 +870,18 @@ mod tests { } } + // #[tokio::test] + // async fn change_network() -> Result<(), Box> { + // init_logging(); + // let listener_socket = MixSocket::new(Some("../../../envs/canary.env".to_string())).await?; + // let listener_address = *listener_socket.local_addr(); + // let mut listener_stream = listener_socket.into_stream(); + + // // TODO run with debug logging, you can see this is still pulling in mainnet endpoint even though setup_env() is being run with canary file. Debug. + + // Ok(()) + // } + #[tokio::test] async fn simple_send_recv() -> Result<(), Box> { init_logging(); @@ -865,7 +892,7 @@ mod tests { let mut listener_stream = listener_socket.into_stream(); // Create sender connected to listener - let mut sender_stream = MixStream::connect(listener_address).await?; + let mut sender_stream = MixStream::connect(listener_address, None).await?; // Sender initiates with SURBs sender_stream.send(b"Hello, Mixnet!").await?; @@ -945,7 +972,7 @@ mod tests { let receiver_socket = MixSocket::new_test().await?; let receiver_address = *receiver_socket.local_addr(); - let sender_stream = MixStream::new(Some(sender_socket), Some(receiver_address)).await; + let sender_stream = MixStream::new(Some(sender_socket), Some(receiver_address), None).await; let receiver_stream = receiver_socket.into_stream(); let (mut sender_reader, mut sender_writer) = sender_stream.split(); From 7e85a0653498d1fb4326b893888d37b48dc4527f Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 6 Nov 2025 12:49:47 +0000 Subject: [PATCH 115/139] Fix Mixstream::new() with new configurable network --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index caf51f71f3b..7dccb52a90f 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -17,6 +17,7 @@ use nym_ip_packet_requests::{ }, IpPair, }; +use nym_network_defaults::setup_env; use nym_sphinx::receiver::ReconstructedMessageCodec; use futures::StreamExt; @@ -49,6 +50,8 @@ pub enum ConnectionState { } // TODO INLINE DOCS +// TODO MAKE NETWORK CONFIGURABLE +// TODO USERAGENT fn create_nym_api_client(nym_api_urls: Vec) -> Result { // TODO do something proper with this @@ -149,7 +152,6 @@ pub struct IpMixStream { } impl IpMixStream { - // TODO be able to pass in DisconnectedMixnetClient to use as MixStream inner client. pub async fn new() -> Result { // JS: I think you need some bootstrapping here, something would need to be passed to `new()` // to indicate what endpoints to use @@ -159,7 +161,7 @@ impl IpMixStream { let api_client = create_nym_api_client(mainnet_network_defaults.nym_api_urls.unwrap_or_default())?; let ipr_address = get_random_ipr(api_client).await?; - let stream = MixStream::new(None, Some(Recipient::from(ipr_address))).await; + let stream = MixStream::new(None, Some(Recipient::from(ipr_address)), None).await; Ok(Self { stream, From 77c9d304b2236747296dde91d8b3cda506969c82 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Thu, 6 Nov 2025 12:50:23 +0000 Subject: [PATCH 116/139] Include err for no surb tag or peer --- sdk/rust/nym-sdk/src/error.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index 525a479d971..ea1954a8094 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -152,6 +152,9 @@ pub enum Error { #[error("no response id found in connect response")] IPRNoId, + + #[error("Could not find peer address or surb tag")] + MixStreamNoPeerOrSurb, } impl Error { From 8048f43db44c928de8a47923fc5080d1d9b2fd2e Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 11:52:01 +0000 Subject: [PATCH 117/139] Docs first pass --- .../mixnet_stream_wrapper_ipr.rs | 186 +++++++++++++++++- 1 file changed, 182 insertions(+), 4 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 7dccb52a90f..5e6591e03b5 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -49,10 +49,16 @@ pub enum ConnectionState { Connected, } -// TODO INLINE DOCS // TODO MAKE NETWORK CONFIGURABLE // TODO USERAGENT +/// Create a Nym API client with the provided URLs. +/// +/// # Arguments +/// * `nym_api_urls` - Vector of API URLs to use for the client +/// +/// # Returns +/// Configured `nym_http_api_client::Client` or an error if URLs are invalid or empty fn create_nym_api_client(nym_api_urls: Vec) -> Result { // TODO do something proper with this let user_agent = UserAgent { @@ -82,6 +88,16 @@ fn create_nym_api_client(nym_api_urls: Vec) -> Result Result, Error> { @@ -120,6 +136,15 @@ async fn retrieve_exit_nodes_with_performance( Ok(described) } +/// Select a random IPR (IP Packet Router) from available exit gateways. +/// +/// Currently selects the gateway with the highest performance score. +/// +/// # Arguments +/// * `client` - Nym API client to use for gateway discovery +/// +/// # Returns +/// `Recipient` address of the selected IPR async fn get_random_ipr(client: nym_http_api_client::Client) -> Result { let nodes = retrieve_exit_nodes_with_performance(client).await?; info!("Found {} Exit Gateways", nodes.len()); @@ -142,7 +167,18 @@ async fn get_random_ipr(client: nym_http_api_client::Client) -> Result Result { // JS: I think you need some bootstrapping here, something would need to be passed to `new()` // to indicate what endpoints to use // again, for now I'm default to mainnet as you did before let mainnet_network_defaults = crate::NymNetworkDetails::new_mainnet(); - let api_client = create_nym_api_client(mainnet_network_defaults.nym_api_urls.unwrap_or_default())?; let ipr_address = get_random_ipr(api_client).await?; + let stream = MixStream::new(None, Some(Recipient::from(ipr_address)), None).await; Ok(Self { @@ -172,15 +215,33 @@ impl IpMixStream { }) } + /// Get the Nym network address of this stream. + /// + /// # Returns + /// Reference to the stream's `Recipient` address pub fn nym_address(&self) -> &Recipient { self.stream.client.nym_address() } + /// Send an IP packet request to the connected IPR. + /// + /// # Arguments + /// * `request` - The `IpPacketRequest` to send + /// + /// # Returns + /// `Ok(())` on success, error otherwise async fn send_ipr_request(&mut self, request: IpPacketRequest) -> Result<(), Error> { let request_bytes = request.to_bytes()?; self.stream.send(&request_bytes).await } + /// Establish tunnel connection with the IPR and allocate IP addresses. + /// + /// Sends a connect request and waits for IP allocation response. + /// Updates connection state and stores allocated IPs on success. + /// + /// # Returns + /// `IpPair` containing allocated IPv4 and IPv6 addresses pub async fn connect_tunnel(&mut self) -> Result { if self.connection_state != ConnectionState::Disconnected { return Err(Error::IprStreamClientAlreadyConnectedOrConnecting); @@ -207,6 +268,10 @@ impl IpMixStream { } } + /// Internal connection logic for establishing the tunnel. + /// + /// # Returns + /// `IpPair` containing allocated IP addresses async fn connect_inner(&mut self) -> Result { let (request, request_id) = IpPacketRequest::new_connect_request(None); debug!("Sending connect request with ID: {}", request_id); @@ -215,6 +280,15 @@ impl IpMixStream { self.listen_for_connect_response(request_id).await } + /// Listen for and process the connect response from the IPR. + /// + /// Waits up to `IPR_CONNECT_TIMEOUT` for a response matching the request ID. + /// + /// # Arguments + /// * `request_id` - ID of the connect request to match against responses + /// + /// # Returns + /// `IpPair` containing allocated IP addresses async fn listen_for_connect_response(&mut self, request_id: u64) -> Result { let timeout = tokio::time::sleep(IPR_CONNECT_TIMEOUT); tokio::pin!(timeout); @@ -254,6 +328,15 @@ impl IpMixStream { } } + /// Handle the connect response from the IPR. + /// + /// Extracts IP allocation from successful response or returns error on failure. + /// + /// # Arguments + /// * `response` - The `IpPacketResponse` to process + /// + /// # Returns + /// `IpPair` on successful connection, error otherwise async fn handle_connect_response(&self, response: IpPacketResponse) -> Result { let control_response = match response.data { IpPacketResponseData::Control(c) => c, @@ -271,6 +354,15 @@ impl IpMixStream { } } + /// Send an IP packet through the tunnel. + /// + /// Requires an active tunnel connection. + /// + /// # Arguments + /// * `packet` - Raw IP packet bytes to send + /// + /// # Returns + /// `Ok(())` on success, error if not connected or send fails pub async fn send_ip_packet(&mut self, packet: &[u8]) -> Result<(), Error> { if self.connection_state != ConnectionState::Connected { return Err(Error::IprStreamClientNotConnected); @@ -279,6 +371,13 @@ impl IpMixStream { self.send_ipr_request(request).await } + /// Handle incoming messages from the mixnet. + /// + /// Processes reconstructed messages and extracts IP packets, disconnect signals, + /// or self-ping messages. Times out after 10 seconds if no message received. + /// + /// # Returns + /// Vector of received IP packet data as `Bytes`, empty vector if no packets or on timeout pub async fn handle_incoming(&mut self) -> Result, Error> { let mut framed = self.stream.framed_read(); @@ -314,10 +413,18 @@ impl IpMixStream { } } + /// Get the allocated IP addresses for this tunnel. + /// + /// # Returns + /// `Some(&IpPair)` if IPs are allocated, `None` otherwise pub fn allocated_ips(&self) -> Option<&IpPair> { self.allocated_ips.as_ref() } + /// Check if the tunnel is currently connected. + /// + /// # Returns + /// `true` if connected, `false` otherwise pub fn is_connected(&self) -> bool { self.connection_state == ConnectionState::Connected } @@ -329,7 +436,14 @@ impl IpMixStream { debug!("Disconnected"); } - /// Split for concurrent read/write (like TcpStream::Split) into IpMixnetStreamReader and IpMixnetStreamWriter. + /// Split the stream into separate reader and writer halves. + /// + /// Enables concurrent read and write operations similar to `TcpStream::split()`. + /// State updates (connection status, allocated IPs) are synchronized between halves + /// via oneshot channels. + /// + /// # Returns + /// Tuple of `(IpMixStreamReader, IpMixStreamWriter)` pub fn split(self) -> (IpMixStreamReader, IpMixStreamWriter) { debug!("Splitting IpMixStream"); let local_addr = *self.stream.client.nym_address(); @@ -394,6 +508,14 @@ impl AsyncWrite for IpMixStream { } } +/// Read half of a split `IpMixStream`. +/// +/// Handles incoming messages from the mixnet and processes IP packets, disconnect +/// signals, and control messages. Synchronizes connection state changes with the +/// writer half via oneshot channels. +/// +/// Created by calling `IpMixStream::split()`. Implements `AsyncRead` for standard +/// async read operations. pub struct IpMixStreamReader { stream_reader: MixStreamReader, listener: IprListener, @@ -404,10 +526,22 @@ pub struct IpMixStreamReader { } impl IpMixStreamReader { + /// Get the Nym network address of this reader. + /// + /// # Returns + /// The reader's `Recipient` address pub fn nym_address(self) -> Recipient { *self.stream_reader.local_addr() } + /// Handle incoming messages from the mixnet (reader half). + /// + /// Processes reconstructed messages and extracts IP packets, disconnect signals, + /// or self-ping messages. Updates connection state and notifies writer on disconnect. + /// Times out after 10 seconds if no message received. + /// + /// # Returns + /// Vector of received IP packet data as `Bytes`, empty vector if no packets or on timeout pub async fn handle_incoming(&mut self) -> Result, Error> { let mut framed = self.stream_reader.framed(); @@ -450,10 +584,18 @@ impl IpMixStreamReader { } } + /// Get the allocated IP addresses (reader half). + /// + /// # Returns + /// `Some(&IpPair)` if IPs are allocated, `None` otherwise pub fn allocated_ips(&self) -> Option<&IpPair> { self.allocated_ips.as_ref() } + /// Check if the tunnel is currently connected (reader half). + /// + /// # Returns + /// `true` if connected, `false` otherwise pub fn is_connected(&self) -> bool { self.connection_state == ConnectionState::Connected } @@ -469,6 +611,13 @@ impl AsyncRead for IpMixStreamReader { } } +/// Write half of a split `IpMixStream`. +/// +/// Handles outgoing IP packets to the mixnet. Receives connection state updates +/// from the reader half via oneshot channels to maintain synchronized state. +/// +/// Created by calling `IpMixStream::split()`. Implements `AsyncWrite` for standard +/// async write operations. pub struct IpMixStreamWriter { stream_writer: MixStreamWriter, local_addr: Recipient, @@ -479,15 +628,36 @@ pub struct IpMixStreamWriter { } impl IpMixStreamWriter { + /// Get the Nym network address of this writer. + /// + /// # Returns + /// Reference to the writer's `Recipient` address pub fn nym_address(&self) -> &Recipient { &self.local_addr } + /// Send an IP packet request to the IPR (writer half). + /// + /// # Arguments + /// * `request` - The `IpPacketRequest` to send + /// + /// # Returns + /// `Ok(())` on success, error otherwise async fn send_ipr_request(&mut self, request: IpPacketRequest) -> Result<(), Error> { let request_bytes = request.to_bytes()?; self.stream_writer.write_bytes(&request_bytes).await } + /// Send an IP packet through the tunnel (writer half). + /// + /// Checks for state updates from reader before sending. + /// Requires an active tunnel connection. + /// + /// # Arguments + /// * `packet` - Raw IP packet bytes to send + /// + /// # Returns + /// `Ok(())` on success, error if not connected or send fails pub async fn send_ip_packet(&mut self, packet: &[u8]) -> Result<(), Error> { // Check for state updates from reader if let Some(mut rx) = self.state_rx.take() { @@ -514,10 +684,18 @@ impl IpMixStreamWriter { self.send_ipr_request(request).await } + /// Get the allocated IP addresses (writer half). + /// + /// # Returns + /// `Some(&IpPair)` if IPs are allocated, `None` otherwise pub fn allocated_ips(&self) -> Option<&IpPair> { self.allocated_ips.as_ref() } + /// Check if the tunnel is connected (writer half). + /// + /// # Returns + /// `true` if connected, `false` otherwise pub fn is_connected(&self) -> bool { self.connection_state == ConnectionState::Connected } From 2946ded2327b43d4d95a2e7a8aecb5d62c4a616e Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 13:52:36 +0000 Subject: [PATCH 118/139] Add bootstrap network config --- sdk/rust/nym-sdk/src/error.rs | 3 + sdk/rust/nym-sdk/src/stream_wrapper.rs | 2 + .../stream_wrapper/mixnet_stream_wrapper.rs | 70 ++++++++++--------- .../mixnet_stream_wrapper_ipr.rs | 32 ++++----- 4 files changed, 57 insertions(+), 50 deletions(-) diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index ea1954a8094..db7f43637a1 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -155,6 +155,9 @@ pub enum Error { #[error("Could not find peer address or surb tag")] MixStreamNoPeerOrSurb, + + #[error("No network env specified on new MixStream")] + MissingStreamConfig, } impl Error { diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index c13ec4aa682..881810d4326 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -5,6 +5,8 @@ mod mixnet_stream_wrapper; mod mixnet_stream_wrapper_ipr; +mod network_env; pub use mixnet_stream_wrapper::{MixSocket, MixStream, MixStreamReader, MixStreamWriter}; pub use mixnet_stream_wrapper_ipr::{IpMixStream, IpMixStreamReader, IpMixStreamWriter}; +pub use network_env::NetworkEnvironment; diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 4de13db33b6..8fd7faf4c46 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -11,6 +11,7 @@ use nym_network_defaults::setup_env; use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; use nym_sphinx::receiver::{ReconstructedMessage, ReconstructedMessageCodec}; use std::io; +use std::path::PathBuf; use std::pin::Pin; use std::task::{Context, Poll}; use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt, ReadBuf}; @@ -18,7 +19,6 @@ use tokio::sync::oneshot; use tokio_util::codec::{Encoder, Framed, FramedRead, FramedWrite}; use tracing::{debug, info, warn}; -/// High-level methods for MixnetClient impl MixnetClient { /// Send data to a recipient with reply SURBs. /// @@ -130,7 +130,6 @@ impl MixnetClient { } } -/// High-level methods for MixnetClientSender impl MixnetClientSender { /// Send data to a recipient with optional reply SURBs. /// @@ -192,10 +191,10 @@ impl MixSocket { /// /// Initializes a new mixnet client and prepares it for connections. /// # Arguments - /// * `env` - The environment to use. Defaults to Mainnet if None. - pub async fn new(env: Option) -> Result { + /// * `env` - The environment to use. + pub async fn new(env: PathBuf) -> Result { debug!("Loading env file: {:?}", env); - setup_env(env); + setup_env(Some(env)); let inner = MixnetClient::connect_new().await?; Ok(MixSocket { inner }) } @@ -284,25 +283,27 @@ impl MixStream { /// # Arguments /// * `socket` - Optional existing socket to use /// * `peer` - Optional Nym address to connect to (None = listening mode) - /// * `env` - The environment to use. Defaults to Mainnet if `None`. TODO MAKE PATH AND MAKE MORE CLEAR IN DOCS + /// * `env` - Optional environment to use. Required if not passing in an existing `socket`. pub async fn new( socket: Option, peer: Option, - env: Option, - ) -> Self { + env: Option, + ) -> Result { let client = match socket { Some(socket) => socket.into_inner(), None => { - debug!("Loading env file: {:?}", env); + if env.is_none() { + return Err(Error::MissingStreamConfig); + } setup_env(env); MixnetClient::connect_new().await.unwrap() } }; - Self { + Ok(Self { client, peer, peer_surb_tag: None, - } + }) } /// Create a listening stream that receives from anyone. @@ -322,9 +323,9 @@ impl MixStream { /// listener.send(b"Response").await?; /// } /// ``` - pub async fn listen(env: Option) -> Result { + pub async fn listen(env: PathBuf) -> Result { debug!("Loading env file: {:?}", env); - setup_env(env); + setup_env(Some(env)); let client = MixnetClient::connect_new().await?; Ok(Self { client, @@ -339,10 +340,10 @@ impl MixStream { /// /// # Arguments /// * `peer` - The Nym address to connect to - /// * `env` - The environment to use. Defaults to Mainnet if None - pub async fn connect(peer: Recipient, env: Option) -> Result { + /// * `env` - The environment to use. + pub async fn connect(peer: Recipient, env: PathBuf) -> Result { debug!("Loading env file: {:?}", env); - setup_env(env.clone()); + setup_env(Some(env.clone())); let socket = MixSocket::new(env).await?; Ok(socket.connect(peer).await?) } @@ -848,8 +849,9 @@ impl AsyncWrite for MixStreamWriter { #[cfg(test)] mod tests { - use super::*; + use crate::stream_wrapper::network_env::NetworkEnvironment; + use futures::StreamExt; use std::sync::Once; static INIT: Once = Once::new(); @@ -863,13 +865,6 @@ mod tests { }); } - impl MixSocket { - pub async fn new_test() -> Result { - let inner = MixnetClient::connect_new().await?; - Ok(MixSocket { inner }) - } - } - // #[tokio::test] // async fn change_network() -> Result<(), Box> { // init_logging(); @@ -886,19 +881,21 @@ mod tests { async fn simple_send_recv() -> Result<(), Box> { init_logging(); + let env = NetworkEnvironment::Mainnet; + // Create listener (no peer) - let listener_socket = MixSocket::new_test().await?; + let listener_socket = MixSocket::new(env.env_file_path()).await?; let listener_address = *listener_socket.local_addr(); let mut listener_stream = listener_socket.into_stream(); // Create sender connected to listener - let mut sender_stream = MixStream::connect(listener_address, None).await?; + let mut sender_stream = MixStream::connect(listener_address, env.env_file_path()).await?; - // Sender initiates with SURBs + // Sender initiates sender_stream.send(b"Hello, Mixnet!").await?; info!("Sent initial message"); - // Listener receives and extracts SURB + // Listener receives and extracts SURB tag let msg = tokio::time::timeout(tokio::time::Duration::from_secs(30), listener_stream.recv()) .await??; @@ -927,13 +924,14 @@ mod tests { #[tokio::test] async fn framed() -> Result<(), Box> { init_logging(); - use futures::StreamExt; - let receiver_socket = MixSocket::new_test().await?; + let env = NetworkEnvironment::Mainnet; + + let receiver_socket = MixSocket::new(env.env_file_path()).await?; let receiver_address = *receiver_socket.local_addr(); let mut receiver_stream = receiver_socket.into_stream(); - let sender_socket = MixSocket::new_test().await?; + let sender_socket = MixSocket::new(env.env_file_path()).await?; let sender_stream = sender_socket.connect(receiver_address).await?; let (sender_reader, mut sender_writer) = sender_stream.split(); @@ -968,11 +966,15 @@ mod tests { async fn split_concurrent() -> Result<(), Box> { init_logging(); - let sender_socket = MixSocket::new_test().await?; - let receiver_socket = MixSocket::new_test().await?; + let env = NetworkEnvironment::Mainnet; + + let sender_socket = MixSocket::new(env.env_file_path()).await?; + let receiver_socket = MixSocket::new(env.env_file_path()).await?; let receiver_address = *receiver_socket.local_addr(); - let sender_stream = MixStream::new(Some(sender_socket), Some(receiver_address), None).await; + // Passing no env var to MixStream since we're passing a socket that is already configured to use Mainnet + let sender_stream = + MixStream::new(Some(sender_socket), Some(receiver_address), None).await?; let receiver_stream = receiver_socket.into_stream(); let (mut sender_reader, mut sender_writer) = sender_stream.split(); diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 5e6591e03b5..022e469feb3 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only use super::mixnet_stream_wrapper::{MixStream, MixStreamReader, MixStreamWriter}; +use super::network_env::NetworkEnvironment; use crate::ip_packet_client::{ helpers::check_ipr_message_version, IprListener, MixnetMessageOutcome, }; @@ -10,6 +11,8 @@ use crate::{mixnet::Recipient, Error}; use std::collections::HashMap; use bytes::Bytes; +use futures::StreamExt; +use nym_crypto::asymmetric::ed25519; use nym_ip_packet_requests::{ v8::{ request::IpPacketRequest, @@ -17,12 +20,8 @@ use nym_ip_packet_requests::{ }, IpPair, }; -use nym_network_defaults::setup_env; -use nym_sphinx::receiver::ReconstructedMessageCodec; - -use futures::StreamExt; -use nym_crypto::asymmetric::ed25519; use nym_network_defaults::ApiUrl; +use nym_sphinx::receiver::ReconstructedMessageCodec; use nym_validator_client::nym_api::NymApiClientExt; use std::io; use std::pin::Pin; @@ -195,16 +194,17 @@ impl IpMixStream { /// /// # Returns /// New `IpMixStream` instance ready to connect - pub async fn new() -> Result { - // JS: I think you need some bootstrapping here, something would need to be passed to `new()` - // to indicate what endpoints to use - // again, for now I'm default to mainnet as you did before - let mainnet_network_defaults = crate::NymNetworkDetails::new_mainnet(); - let api_client = - create_nym_api_client(mainnet_network_defaults.nym_api_urls.unwrap_or_default())?; + pub async fn new(env: NetworkEnvironment) -> Result { + let network_defaults = env.network_defaults(); + let api_client = create_nym_api_client(network_defaults.nym_api_urls.unwrap_or_default())?; let ipr_address = get_random_ipr(api_client).await?; - let stream = MixStream::new(None, Some(Recipient::from(ipr_address)), None).await; + let stream = MixStream::new( + None, + Some(Recipient::from(ipr_address)), + Some(env.env_file_path()), + ) + .await?; Ok(Self { stream, @@ -743,7 +743,7 @@ mod tests { async fn connect_to_ipr() -> Result<(), Box> { init_logging(); - let mut stream = IpMixStream::new().await?; + let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let ip_pair = stream.connect_tunnel().await?; let ipv4: Ipv4Addr = ip_pair.ipv4; @@ -767,7 +767,7 @@ mod tests { async fn dns_ping_checks() -> Result<(), Box> { init_logging(); - let mut stream = IpMixStream::new().await?; + let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let ip_pair = stream.connect_tunnel().await?; info!( @@ -879,7 +879,7 @@ mod tests { async fn split_dns_ping_checks() -> Result<(), Box> { init_logging(); - let mut stream = IpMixStream::new().await?; + let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let ip_pair = stream.connect_tunnel().await?; info!( From efa49037b9ac1bb1bccbee3008429d5cf241e091 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 15:55:13 +0000 Subject: [PATCH 119/139] Update inline examples --- .../stream_wrapper/mixnet_stream_wrapper.rs | 124 ++++++++++-------- .../mixnet_stream_wrapper_ipr.rs | 17 ++- 2 files changed, 82 insertions(+), 59 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 8fd7faf4c46..79d0a92e50b 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -51,7 +51,7 @@ impl MixnetClient { /// # Arguments /// * `recipient_tag` - The SURB tag from a received message /// * `data` - The reply payload - pub async fn send_reply( + pub async fn send_stream_reply( &mut self, recipient_tag: AnonymousSenderTag, data: &[u8], @@ -111,11 +111,17 @@ impl MixnetClient { /// # Example /// ```no_run /// use futures::StreamExt; - /// - /// let mut framed = client.into_framed_read(); - /// while let Some(msg) = framed.next().await { - /// let msg = msg?; - /// println!("Received: {:?}", msg.message); + /// use nym_sdk::mixnet::MixnetClient; + /// + /// #[tokio::main] + /// async fn main() -> Result<(), Box> { + /// let mut client = MixnetClient::connect_new().await?; + /// let mut framed = client.into_framed_read(); + /// while let Some(msg) = framed.next().await { + /// let msg = msg?; + /// println!("Received: {:?}", msg.message); + /// } + /// Ok(()) /// } /// ``` pub fn into_framed_read(self) -> FramedRead { @@ -158,12 +164,10 @@ impl MixnetClientSender { /// Send a reply using a previously received SURB tag. /// - /// Identical to `MixnetClient::send_reply` but for the split sender. - /// /// # Arguments /// * `recipient_tag` - The SURB tag from a received message /// * `data` - The reply payload - pub async fn send_reply( + pub async fn send_stream_reply( &mut self, recipient_tag: AnonymousSenderTag, data: &[u8], @@ -221,16 +225,24 @@ impl MixSocket { /// /// # Example /// ```no_run - /// let socket = MixSocket::new().await?; - /// let mut listener = socket.into_stream(); + /// use nym_sdk::stream_wrapper::MixSocket; + /// use std::path::PathBuf; /// - /// // Receive from anyone - /// let msg = listener.recv().await?; + /// #[tokio::main] + /// async fn main() -> Result<(), Box> { + /// let env = PathBuf::from("path/to/env"); + /// let socket = MixSocket::new(env).await?; + /// let mut listener = socket.into_stream(); /// - /// // Reply anonymously using SURB - /// if let Some(surb) = msg.sender_tag { - /// listener.store_surb_tag(surb); - /// listener.send(b"Reply").await?; + /// // Receive from anyone + /// let msg = listener.recv().await?; + /// + /// // Reply anonymously using SURB + /// if let Some(surb) = msg.sender_tag { + /// listener.store_surb_tag(surb); + /// listener.send(b"Reply").await?; + /// } + /// Ok(()) /// } /// ``` pub fn into_stream(self) -> MixStream { @@ -316,11 +328,19 @@ impl MixStream { /// /// # Example /// ```no_run - /// let mut listener = MixStream::listen().await?; - /// let msg = listener.recv().await?; - /// if let Some(surb) = msg.sender_tag { - /// listener.store_surb_tag(surb); - /// listener.send(b"Response").await?; + /// use nym_sdk::stream_wrapper::MixStream; + /// use std::path::PathBuf; + /// + /// #[tokio::main] + /// async fn main() -> Result<(), Box> { + /// let env = PathBuf::from("path/to/env"); + /// let mut listener = MixStream::listen(env).await?; + /// let msg = listener.recv().await?; + /// if let Some(surb) = msg.sender_tag { + /// listener.store_surb_tag(surb); + /// listener.send(b"Response").await?; + /// } + /// Ok(()) /// } /// ``` pub async fn listen(env: PathBuf) -> Result { @@ -389,7 +409,7 @@ impl MixStream { match (self.peer_surb_tag, self.peer) { (Some(tag), _) => { // Have SURB tag - use it for anonymous reply - self.client.send_reply(tag, data).await + self.client.send_stream_reply(tag, data).await } (None, Some(peer)) => { // Have peer - send with default # of SURBs @@ -455,16 +475,22 @@ impl MixStream { /// # Example /// ```no_run /// use futures::{SinkExt, StreamExt}; - /// - /// let mut framed = stream.into_framed(); - /// - /// // Send - /// framed.send(InputMessage::Anonymous { ... }).await?; - /// - /// // Receive - /// if let Some(msg) = framed.next().await { - /// let msg = msg?; - /// println!("Received: {:?}", msg.message); + /// use nym_sdk::mixnet::{InputMessage, Recipient}; + /// use nym_sdk::stream_wrapper::MixStream; + /// use std::path::PathBuf; + /// + /// #[tokio::main] + /// async fn main() -> Result<(), Box> { + /// let env = PathBuf::from("path/to/env"); + /// let peer = Recipient::try_from_base58_string("recipient_address")?; + /// let stream = MixStream::connect(peer, env).await?; + /// let mut framed = stream.into_framed(); + /// + /// if let Some(msg) = framed.next().await { + /// let msg = msg?; + /// println!("Received: {:?}", msg.message); + /// } + /// Ok(()) /// } /// ``` pub fn into_framed(self) -> Framed { @@ -681,13 +707,17 @@ impl MixStreamReader { /// # Example /// ```no_run /// use futures::StreamExt; - /// - /// let mut framed = reader.into_framed(); - /// while let Some(msg) = framed.next().await { - /// let msg = msg?; - /// if let Some(surb) = msg.sender_tag { - /// // SURB automatically stored + /// use nym_sdk::stream_wrapper::MixStreamReader; + /// + /// async fn example(reader: MixStreamReader) -> Result<(), Box> { + /// let mut framed = reader.into_framed(); + /// while let Some(msg) = framed.next().await { + /// let msg = msg?; + /// if let Some(_surb) = msg.sender_tag { + /// // SURB automatically stored + /// } /// } + /// Ok(()) /// } /// ``` pub fn into_framed(self) -> FramedRead { @@ -742,7 +772,7 @@ impl MixStreamWriter { match (self.peer_surb_tag, self.peer) { (Some(tag), _) => { // Have SURB tag - use it for anonymous reply - self.sender.send_reply(tag, data).await + self.sender.send_stream_reply(tag, data).await } (None, Some(peer)) => { // Have peer - send with SURBs @@ -805,20 +835,6 @@ impl MixStreamWriter { /// Convert into a framed writer for sending messages. /// /// Returns a `FramedWrite` that automatically encodes `InputMessage`s. - /// - /// # Example - /// ```no_run - /// use futures::SinkExt; - /// - /// let mut framed = writer.into_framed(); - /// framed.send(InputMessage::Anonymous { - /// recipient, - /// data: b"Hello".to_vec(), - /// reply_surbs: 10, - /// lane: TransmissionLane::General, - /// max_retransmissions: Some(5), - /// }).await?; - /// ``` pub fn into_framed(self) -> FramedWrite { FramedWrite::new(self.sender, InputMessageCodec {}) } diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 022e469feb3..12c713ff0ff 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -166,7 +166,7 @@ async fn get_random_ipr(client: nym_http_api_client::Client) -> Result Result Result<(), Box> { +/// let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; +/// let ip_pair = stream.connect_tunnel().await?; +/// let packet_data = vec![0u8; 100]; +/// stream.send_ip_packet(&packet_data).await?; +/// Ok(()) +/// } /// ``` pub struct IpMixStream { stream: MixStream, @@ -187,7 +194,7 @@ pub struct IpMixStream { } impl IpMixStream { - /// Create a new IP packet router stream connected to the Nym mixnet. + /// Create a new IP packet router stream connected to the mixnet. /// /// Initializes connection to mainnet by default and selects an IPR gateway. /// Does not establish tunnel connection - call `connect_tunnel()` separately. From 005cdce24f3fda4d1020ba66f093e3db88ddfd2f Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 16:00:43 +0000 Subject: [PATCH 120/139] Add network_envs --- .../nym-sdk/src/stream_wrapper/network_env.rs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs b/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs new file mode 100644 index 00000000000..98d38df1f4d --- /dev/null +++ b/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs @@ -0,0 +1,37 @@ +use std::path::PathBuf; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum NetworkEnvironment { + Mainnet, + // Sandbox, +} + +impl NetworkEnvironment { + pub fn env_file_path(&self) -> PathBuf { + match self { + Self::Mainnet => PathBuf::from("../../../envs/sandbox.env"), + // Self::Sandbox => PathBuf::from("../../../envs/sandbox.env"), + } + } + + pub fn network_defaults(&self) -> crate::NymNetworkDetails { + match self { + Self::Mainnet => crate::NymNetworkDetails::new_mainnet(), + // Self::Sandbox => crate::NymNetworkDetails::new_sandbox(), // TODO make this fn + } + } + + pub fn from_str(s: &str) -> Result { + match s.to_lowercase().as_str() { + "mainnet" | "main" => Ok(Self::Mainnet), + // "sandbox" | "sand" => Ok(Self::Sandbox), + _ => Err(format!("Unknown env: {}", s)), + } + } +} + +impl Default for NetworkEnvironment { + fn default() -> Self { + Self::Mainnet + } +} From 8f2b5cf02774b6199784a8fc29221e6c2049022f Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 17:39:45 +0000 Subject: [PATCH 121/139] Example code --- sdk/rust/nym-sdk/src/stream_wrapper.rs | 42 +++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper.rs index 881810d4326..769d5ba87ab 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper.rs @@ -1,7 +1,47 @@ // Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-2.0-only -//! TODO +//! High-level streaming interface for the mixnet. +//! +//! # Basic Usage +//! ## Simple Send/Receive +//! +//! ```no_run +//! use nym_sdk::stream_wrapper::{MixSocket, MixStream, NetworkEnvironment}; +//! +//! #[tokio::main] +//! async fn main() -> Result<(), Box> { +//! let env = NetworkEnvironment::Mainnet; +//! +//! // Create listener (no peer) +//! let listener_socket = MixSocket::new(env.env_file_path()).await?; +//! let listener_address = *listener_socket.local_addr(); +//! let mut listener_stream = listener_socket.into_stream(); +//! +//! // Create sender connected to listener +//! let mut sender_stream = MixStream::connect(listener_address, env.env_file_path()).await?; +//! +//! // Sender initiates +//! sender_stream.send(b"Hello, Mixnet!").await?; +//! +//! // Listener receives and extracts SURB tag +//! let msg = listener_stream.recv().await?; +//! assert_eq!(msg.message, b"Hello, Mixnet!"); +//! +//! // Store SURB and reply anonymously +//! if let Some(surbs) = msg.sender_tag { +//! listener_stream.store_surb_tag(surbs); +//! listener_stream.send(b"Hello back!").await?; +//! } +//! +//! // Sender receives anonymous reply +//! let reply = sender_stream.recv().await?; +//! assert_eq!(reply.message, b"Hello back!"); +//! +//! Ok(()) +//! } +//! ``` +//! mod mixnet_stream_wrapper; mod mixnet_stream_wrapper_ipr; From 2068101607116d71e8e9699f0fc1727e80e24a8d Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 17:39:54 +0000 Subject: [PATCH 122/139] Fix useragent --- Cargo.lock | 46 +++++++++++++++---- .../mixnet_stream_wrapper_ipr.rs | 21 +++------ 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index edc741823f7..8d51e41b7b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4867,7 +4867,7 @@ dependencies = [ [[package]] name = "nym-api" -version = "1.1.67" +version = "1.1.68" dependencies = [ "anyhow", "async-trait", @@ -5093,7 +5093,7 @@ dependencies = [ [[package]] name = "nym-cli" -version = "1.1.64" +version = "1.1.65" dependencies = [ "anyhow", "base64 0.22.1", @@ -5176,7 +5176,7 @@ dependencies = [ [[package]] name = "nym-client" -version = "1.1.64" +version = "1.1.65" dependencies = [ "bs58", "clap", @@ -5508,8 +5508,11 @@ dependencies = [ "nym-crypto", "nym-ecash-contract-common", "nym-ecash-signer-check", + "nym-http-api-client", "nym-http-api-common", "nym-network-defaults", + "nym-pemstore", + "nym-upgrade-mode-check", "nym-validator-client", "rand 0.8.5", "reqwest 0.12.24", @@ -5580,6 +5583,7 @@ dependencies = [ "nym-http-api-client", "nym-http-api-common", "nym-serde-helpers", + "nym-upgrade-mode-check", "reqwest 0.12.24", "schemars 0.8.22", "serde", @@ -5707,6 +5711,7 @@ dependencies = [ "aead", "aes", "aes-gcm-siv", + "anyhow", "base64 0.22.1", "blake3", "bs58", @@ -5720,10 +5725,12 @@ dependencies = [ "jwt-simple", "nym-pemstore", "nym-sphinx-types", + "nym-test-utils", "rand 0.8.5", "rand_chacha 0.3.1", "serde", "serde_bytes", + "serde_json", "sha2 0.10.9", "subtle-encoding", "thiserror 2.0.17", @@ -6400,7 +6407,7 @@ dependencies = [ [[package]] name = "nym-network-requester" -version = "1.1.65" +version = "1.1.66" dependencies = [ "addr", "anyhow", @@ -6451,7 +6458,7 @@ dependencies = [ [[package]] name = "nym-node" -version = "1.19.0" +version = "1.20.0" dependencies = [ "anyhow", "arc-swap", @@ -6593,7 +6600,7 @@ dependencies = [ [[package]] name = "nym-node-status-api" -version = "4.0.10" +version = "4.0.11-rc1" dependencies = [ "ammonia", "anyhow", @@ -6845,6 +6852,7 @@ dependencies = [ "tokio", "tokio-util", "tracing", + "typed-builder", "url", ] @@ -6980,7 +6988,7 @@ dependencies = [ [[package]] name = "nym-socks5-client" -version = "1.1.64" +version = "1.1.65" dependencies = [ "bs58", "clap", @@ -7435,12 +7443,14 @@ dependencies = [ "jwt-simple", "nym-crypto", "nym-http-api-client", + "nym-test-utils", "reqwest 0.12.24", "serde", "serde_json", "thiserror 2.0.17", "time", "tracing", + "utoipa", ] [[package]] @@ -7727,7 +7737,7 @@ dependencies = [ [[package]] name = "nymvisor" -version = "0.1.29" +version = "0.1.30" dependencies = [ "anyhow", "bytes", @@ -11464,6 +11474,26 @@ dependencies = [ "utf-8", ] +[[package]] +name = "typed-builder" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0dd654273fc253fde1df4172c31fb6615cf8b041d3a4008a028ef8b1119e66" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c26257f448222014296978b2c8456e2cad4de308c35bdb1e383acd569ef5b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + [[package]] name = "typenum" version = "1.19.0" diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 12c713ff0ff..693b1256cff 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only use super::mixnet_stream_wrapper::{MixStream, MixStreamReader, MixStreamWriter}; -use super::network_env::NetworkEnvironment; +use super::network_env::{NetworkEnvironment}; use crate::ip_packet_client::{ helpers::check_ipr_message_version, IprListener, MixnetMessageOutcome, }; @@ -21,7 +21,6 @@ use nym_ip_packet_requests::{ IpPair, }; use nym_network_defaults::ApiUrl; -use nym_sphinx::receiver::ReconstructedMessageCodec; use nym_validator_client::nym_api::NymApiClientExt; use std::io; use std::pin::Pin; @@ -29,7 +28,6 @@ use std::task::{Context, Poll}; use std::time::Duration; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::sync::oneshot; -use tokio_util::codec::FramedRead; use tracing::{debug, error, info}; const IPR_CONNECT_TIMEOUT: Duration = Duration::from_secs(60); @@ -48,9 +46,6 @@ pub enum ConnectionState { Connected, } -// TODO MAKE NETWORK CONFIGURABLE -// TODO USERAGENT - /// Create a Nym API client with the provided URLs. /// /// # Arguments @@ -59,13 +54,11 @@ pub enum ConnectionState { /// # Returns /// Configured `nym_http_api_client::Client` or an error if URLs are invalid or empty fn create_nym_api_client(nym_api_urls: Vec) -> Result { - // TODO do something proper with this - let user_agent = UserAgent { - application: "nym-ipr-streamer".to_string(), - version: "0.0.1".to_string(), - platform: "rust".to_string(), - git_commit: "max/sdk-streamer".to_string(), - }; + + let user_agent = format!( + "nym-sdk/{}", + env!("CARGO_PKG_VERSION") + ); let urls = nym_api_urls .into_iter() @@ -80,7 +73,7 @@ fn create_nym_api_client(nym_api_urls: Vec) -> Result Date: Fri, 7 Nov 2025 17:51:13 +0000 Subject: [PATCH 123/139] rustfmt --- .../src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 693b1256cff..926f3677bda 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only use super::mixnet_stream_wrapper::{MixStream, MixStreamReader, MixStreamWriter}; -use super::network_env::{NetworkEnvironment}; +use super::network_env::NetworkEnvironment; use crate::ip_packet_client::{ helpers::check_ipr_message_version, IprListener, MixnetMessageOutcome, }; @@ -54,11 +54,7 @@ pub enum ConnectionState { /// # Returns /// Configured `nym_http_api_client::Client` or an error if URLs are invalid or empty fn create_nym_api_client(nym_api_urls: Vec) -> Result { - - let user_agent = format!( - "nym-sdk/{}", - env!("CARGO_PKG_VERSION") - ); + let user_agent = format!("nym-sdk/{}", env!("CARGO_PKG_VERSION")); let urls = nym_api_urls .into_iter() From 0b809e8f5d9e641cfd6b2162a626ad77ed872275 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 17:59:20 +0000 Subject: [PATCH 124/139] clippy --- common/nymsphinx/src/receiver.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/common/nymsphinx/src/receiver.rs b/common/nymsphinx/src/receiver.rs index ec8245598ea..da38e7fb092 100644 --- a/common/nymsphinx/src/receiver.rs +++ b/common/nymsphinx/src/receiver.rs @@ -6,7 +6,6 @@ use std::io; use crate::make_bincode_serializer; use crate::message::{NymMessage, NymMessageError, PaddedMessage, PlainMessage}; use bincode::Options; -use log::debug; use nym_crypto::aes::cipher::{KeyIvInit, StreamCipher}; use nym_crypto::asymmetric::x25519; use nym_crypto::shared_key::recompute_shared_key; From b451924a45c99503fa370e11859ee6f35e52cdce Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 18:13:24 +0000 Subject: [PATCH 125/139] Clippy --- sdk/rust/nym-sdk/src/error.rs | 1 + sdk/rust/nym-sdk/src/ip_packet_client/connect.rs | 2 +- .../src/stream_wrapper/mixnet_stream_wrapper.rs | 2 +- .../src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 1 - sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs | 11 +++-------- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/sdk/rust/nym-sdk/src/error.rs b/sdk/rust/nym-sdk/src/error.rs index db7f43637a1..28b128daf1c 100644 --- a/sdk/rust/nym-sdk/src/error.rs +++ b/sdk/rust/nym-sdk/src/error.rs @@ -129,6 +129,7 @@ pub enum Error { #[error("connect denied: {0:?}")] ConnectDenied(ConnectFailureReason), + #[allow(clippy::result_large_err)] #[error("api directory error: {0}")] GatewayDirectoryError(#[from] NymAPIError), diff --git a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs index aa97dd45ff7..182fb7660cf 100644 --- a/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs +++ b/sdk/rust/nym-sdk/src/ip_packet_client/connect.rs @@ -94,7 +94,7 @@ impl IprClientConnect { let surbs = 20; self.mixnet_sender .send(create_input_message( - Recipient::from(ip_packet_router_address), + ip_packet_router_address, request, surbs, )) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 79d0a92e50b..a98ca935bd5 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -365,7 +365,7 @@ impl MixStream { debug!("Loading env file: {:?}", env); setup_env(Some(env.clone())); let socket = MixSocket::new(env).await?; - Ok(socket.connect(peer).await?) + socket.connect(peer).await } /// Get the peer's Nym address (like `TcpStream::peer_addr`). diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 926f3677bda..f4c36e6c31a 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -6,7 +6,6 @@ use super::network_env::NetworkEnvironment; use crate::ip_packet_client::{ helpers::check_ipr_message_version, IprListener, MixnetMessageOutcome, }; -use crate::UserAgent; use crate::{mixnet::Recipient, Error}; use std::collections::HashMap; diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs b/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs index 98d38df1f4d..539b1a2982c 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs @@ -1,7 +1,8 @@ use std::path::PathBuf; -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)] pub enum NetworkEnvironment { + #[default] Mainnet, // Sandbox, } @@ -21,7 +22,7 @@ impl NetworkEnvironment { } } - pub fn from_str(s: &str) -> Result { + pub fn parse_network(s: &str) -> Result { match s.to_lowercase().as_str() { "mainnet" | "main" => Ok(Self::Mainnet), // "sandbox" | "sand" => Ok(Self::Sandbox), @@ -29,9 +30,3 @@ impl NetworkEnvironment { } } } - -impl Default for NetworkEnvironment { - fn default() -> Self { - Self::Mainnet - } -} From a2bff71a84d077d6c437ebd69ed62b4e2c09c3c9 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 18:21:24 +0000 Subject: [PATCH 126/139] clippy --- sdk/rust/nym-sdk/src/bandwidth/client.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/rust/nym-sdk/src/bandwidth/client.rs b/sdk/rust/nym-sdk/src/bandwidth/client.rs index e1ca5881856..fbe2eafbe66 100644 --- a/sdk/rust/nym-sdk/src/bandwidth/client.rs +++ b/sdk/rust/nym-sdk/src/bandwidth/client.rs @@ -29,6 +29,7 @@ where St: Storage + Clone, ::StorageError: Send + Sync + 'static, { + #[allow(clippy::result_large_err)] pub(crate) fn new( network_details: NymNetworkDetails, mnemonic: String, From e287507968cd84267959e52ed27a0225fc4fbb24 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 18:26:56 +0000 Subject: [PATCH 127/139] clippy --- sdk/rust/nym-sdk/src/mixnet/client.rs | 2 ++ sdk/rust/nym-sdk/src/mixnet/paths.rs | 1 + sdk/rust/nym-sdk/src/mixnet/sink.rs | 1 + .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 2 +- 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/mixnet/client.rs b/sdk/rust/nym-sdk/src/mixnet/client.rs index 5020c1bd5c8..a5a303ba25a 100644 --- a/sdk/rust/nym-sdk/src/mixnet/client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/client.rs @@ -340,6 +340,7 @@ where } /// Construct a [`DisconnectedMixnetClient`] from the setup specified. + #[allow(clippy::result_large_err)] pub fn build(self) -> Result> { let mut client = DisconnectedMixnetClient::new( self.config, @@ -445,6 +446,7 @@ where /// Callers have the option of supplying further parameters to: /// - store persistent identities at a location on-disk, if desired; /// - use SOCKS5 mode + #[allow(clippy::result_large_err)] fn new( config: Config, socks5_config: Option, diff --git a/sdk/rust/nym-sdk/src/mixnet/paths.rs b/sdk/rust/nym-sdk/src/mixnet/paths.rs index 5f8d60a7de2..adcb5b91585 100644 --- a/sdk/rust/nym-sdk/src/mixnet/paths.rs +++ b/sdk/rust/nym-sdk/src/mixnet/paths.rs @@ -53,6 +53,7 @@ impl StoragePaths { /// /// This function will return an error if it is passed a path to an existing file instead of a /// directory. + #[allow(clippy::result_large_err)] pub fn new_from_dir>(dir: P) -> Result { let dir = dir.as_ref(); if dir.is_file() { diff --git a/sdk/rust/nym-sdk/src/mixnet/sink.rs b/sdk/rust/nym-sdk/src/mixnet/sink.rs index b6f865f7f56..9bf40a8aef6 100644 --- a/sdk/rust/nym-sdk/src/mixnet/sink.rs +++ b/sdk/rust/nym-sdk/src/mixnet/sink.rs @@ -26,6 +26,7 @@ const SINK_BUFFER_SIZE_IN_MESSAGES: usize = 8; /// Traits that represents the ability to convert bytes into InputMessages that can be sent to the /// mixnet. This is typically used to set the destination and other sending parameters. pub trait MixnetMessageSinkTranslator: Unpin { + #[allow(clippy::result_large_err)] fn to_input_message(&self, bytes: &[u8]) -> Result; } diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index f4c36e6c31a..b006bbc2f58 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -196,7 +196,7 @@ impl IpMixStream { let stream = MixStream::new( None, - Some(Recipient::from(ipr_address)), + Some(ipr_address), Some(env.env_file_path()), ) .await?; From 135b5982ea99a4f2e17b7ccfe245806384594972 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 18:32:31 +0000 Subject: [PATCH 128/139] fmt --- .../src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index b006bbc2f58..d23d8021f24 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -194,12 +194,7 @@ impl IpMixStream { let api_client = create_nym_api_client(network_defaults.nym_api_urls.unwrap_or_default())?; let ipr_address = get_random_ipr(api_client).await?; - let stream = MixStream::new( - None, - Some(ipr_address), - Some(env.env_file_path()), - ) - .await?; + let stream = MixStream::new(None, Some(ipr_address), Some(env.env_file_path())).await?; Ok(Self { stream, From 611d2f69fd0e5d006fa9dfaad1cb6e52aa122b19 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 18:34:38 +0000 Subject: [PATCH 129/139] add missing network env --- mixtcp/examples/tls.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mixtcp/examples/tls.rs b/mixtcp/examples/tls.rs index 05ae0930749..17502a8ed77 100644 --- a/mixtcp/examples/tls.rs +++ b/mixtcp/examples/tls.rs @@ -7,7 +7,8 @@ use std::{ }; use tracing::info; -use nym_sdk::stream_wrapper::IpMixStream; +use nym_sdk::stream_wrapper::{IpMixStream, NetworkEnvironment}; + use smoltcp::{ iface::{Config, Interface, SocketSet}, socket::tcp, @@ -141,7 +142,7 @@ fn init_logging() { async fn main() -> Result<(), Box> { init_logging(); - let ipr_stream = IpMixStream::new().await?; + let ipr_stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; info!("Allocated IP: {}", allocated_ips.ipv4); From ab3701720b5b9081acdcb9a20aa1a00031123ff4 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 19:07:25 +0000 Subject: [PATCH 130/139] clippy --- sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index d23d8021f24..8dfde264a28 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -52,6 +52,7 @@ pub enum ConnectionState { /// /// # Returns /// Configured `nym_http_api_client::Client` or an error if URLs are invalid or empty +#[allow(clippy::result_large_err)] fn create_nym_api_client(nym_api_urls: Vec) -> Result { let user_agent = format!("nym-sdk/{}", env!("CARGO_PKG_VERSION")); From b1652234ab3834a8c3c080967edeabff15681cc5 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 19:14:33 +0000 Subject: [PATCH 131/139] fix ipmixstream new() --- mixtcp/examples/cloudflare_ping.rs | 4 ++-- mixtcp/examples/https_client.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mixtcp/examples/cloudflare_ping.rs b/mixtcp/examples/cloudflare_ping.rs index e8f4c9a196a..9200969a1a2 100644 --- a/mixtcp/examples/cloudflare_ping.rs +++ b/mixtcp/examples/cloudflare_ping.rs @@ -7,7 +7,7 @@ use std::{ }; use tracing::info; -use nym_sdk::stream_wrapper::IpMixStream; +use nym_sdk::stream_wrapper::{IpMixStream, NetworkEnvironment}; use smoltcp::{ iface::{Config, Interface, SocketSet}, socket::tcp, @@ -141,7 +141,7 @@ fn init_logging() { async fn main() -> Result<(), Box> { init_logging(); - let ipr_stream = IpMixStream::new().await?; + let ipr_stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let (mut device, bridge, allocated_ips) = create_device(ipr_stream).await?; info!("Allocated IP: {}", allocated_ips.ipv4); diff --git a/mixtcp/examples/https_client.rs b/mixtcp/examples/https_client.rs index 99b01024c21..27d3a180aa6 100644 --- a/mixtcp/examples/https_client.rs +++ b/mixtcp/examples/https_client.rs @@ -1,6 +1,6 @@ #![allow(clippy::result_large_err)] use mixtcp::{create_device, MixtcpError, NymIprDevice}; -use nym_sdk::stream_wrapper::IpMixStream; +use nym_sdk::stream_wrapper::{IpMixStream, NetworkEnvironment}; use reqwest::StatusCode; use rustls::{pki_types::ServerName, ClientConfig, ClientConnection}; use smoltcp::{ @@ -88,7 +88,7 @@ pub struct MixtcpReqwestClient { impl MixtcpReqwestClient { pub async fn new() -> Result { - let ipr_stream = IpMixStream::new() + let ipr_stream = IpMixStream::new(NetworkEnvironment::Mainnet) .await .map_err(|_| MixtcpError::MixnetConnectionFailed)?; From 7afa81947b289a7f11f3e7cd062c0488d68281a3 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 20:00:55 +0000 Subject: [PATCH 132/139] dont always run dns ping tests --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 8dfde264a28..f15e52f80d5 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -754,6 +754,7 @@ mod tests { Ok(()) } + #[ignore] #[tokio::test] async fn dns_ping_checks() -> Result<(), Box> { init_logging(); @@ -866,6 +867,7 @@ mod tests { Ok(()) } + #[ignore] #[tokio::test] async fn split_dns_ping_checks() -> Result<(), Box> { init_logging(); From 8ef3a6636e4cc584b1ccdbef11c6dcad29227f2c Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 20:23:52 +0000 Subject: [PATCH 133/139] remove unnecessary logging from unit tests --- .../stream_wrapper/mixnet_stream_wrapper.rs | 30 ------------------- .../mixnet_stream_wrapper_ipr.rs | 20 ++----------- 2 files changed, 2 insertions(+), 48 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index a98ca935bd5..3b445441a5b 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -868,35 +868,9 @@ mod tests { use super::*; use crate::stream_wrapper::network_env::NetworkEnvironment; use futures::StreamExt; - use std::sync::Once; - - static INIT: Once = Once::new(); - - fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); - }); - } - - // #[tokio::test] - // async fn change_network() -> Result<(), Box> { - // init_logging(); - // let listener_socket = MixSocket::new(Some("../../../envs/canary.env".to_string())).await?; - // let listener_address = *listener_socket.local_addr(); - // let mut listener_stream = listener_socket.into_stream(); - - // // TODO run with debug logging, you can see this is still pulling in mainnet endpoint even though setup_env() is being run with canary file. Debug. - - // Ok(()) - // } #[tokio::test] async fn simple_send_recv() -> Result<(), Box> { - init_logging(); - let env = NetworkEnvironment::Mainnet; // Create listener (no peer) @@ -939,8 +913,6 @@ mod tests { #[tokio::test] async fn framed() -> Result<(), Box> { - init_logging(); - let env = NetworkEnvironment::Mainnet; let receiver_socket = MixSocket::new(env.env_file_path()).await?; @@ -980,8 +952,6 @@ mod tests { #[tokio::test] async fn split_concurrent() -> Result<(), Box> { - init_logging(); - let env = NetworkEnvironment::Mainnet; let sender_socket = MixSocket::new(env.env_file_path()).await?; diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index f15e52f80d5..5d6913416e7 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -717,23 +717,9 @@ mod tests { icmp_identifier, is_icmp_echo_reply, is_icmp_v6_echo_reply, send_ping_v4, send_ping_v6, }; use std::net::{Ipv4Addr, Ipv6Addr}; - use std::sync::Once; - - static INIT: Once = Once::new(); - - fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); - }); - } #[tokio::test] async fn connect_to_ipr() -> Result<(), Box> { - init_logging(); - let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let ip_pair = stream.connect_tunnel().await?; @@ -755,10 +741,9 @@ mod tests { } #[ignore] + // ignoring because sometimes running these from the CI drops for some reason, maybe its throttled or something #[tokio::test] async fn dns_ping_checks() -> Result<(), Box> { - init_logging(); - let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let ip_pair = stream.connect_tunnel().await?; @@ -868,10 +853,9 @@ mod tests { } #[ignore] + // ignoring because sometimes running these from the CI drops for some reason, maybe its throttled or something #[tokio::test] async fn split_dns_ping_checks() -> Result<(), Box> { - init_logging(); - let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let ip_pair = stream.connect_tunnel().await?; From f1f1d9dcc9e9ec7800a407e68b27be51cbd08c29 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 20:24:08 +0000 Subject: [PATCH 134/139] mod logging to with poisoning retry --- mixtcp/examples/cloudflare_ping.rs | 12 +++++++----- mixtcp/examples/https_client.rs | 12 +++++++----- mixtcp/examples/tls.rs | 12 +++++++----- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/mixtcp/examples/cloudflare_ping.rs b/mixtcp/examples/cloudflare_ping.rs index 9200969a1a2..2c1d79f2b83 100644 --- a/mixtcp/examples/cloudflare_ping.rs +++ b/mixtcp/examples/cloudflare_ping.rs @@ -129,11 +129,13 @@ fn inspect_tls_packet(data: &[u8]) { } fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); + INIT.call_once_force(|state| { + if state.is_poisoned() { + eprintln!("Logger initialization was poisoned, retrying"); + } + if !tracing::dispatcher::has_been_set() { + nym_bin_common::logging::setup_tracing_logger(); + } }); } diff --git a/mixtcp/examples/https_client.rs b/mixtcp/examples/https_client.rs index 27d3a180aa6..c49f83f1808 100644 --- a/mixtcp/examples/https_client.rs +++ b/mixtcp/examples/https_client.rs @@ -274,11 +274,13 @@ impl MixtcpResponse { } fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); + INIT.call_once_force(|state| { + if state.is_poisoned() { + eprintln!("Logger initialization was poisoned, retrying"); + } + if !tracing::dispatcher::has_been_set() { + nym_bin_common::logging::setup_tracing_logger(); + } }); } diff --git a/mixtcp/examples/tls.rs b/mixtcp/examples/tls.rs index 17502a8ed77..749e9ecc147 100644 --- a/mixtcp/examples/tls.rs +++ b/mixtcp/examples/tls.rs @@ -130,11 +130,13 @@ fn inspect_tls_packet(data: &[u8]) { } fn init_logging() { - if tracing::dispatcher::has_been_set() { - return; - } - INIT.call_once(|| { - nym_bin_common::logging::setup_tracing_logger(); + INIT.call_once_force(|state| { + if state.is_poisoned() { + eprintln!("Logger initialization was poisoned, retrying"); + } + if !tracing::dispatcher::has_been_set() { + nym_bin_common::logging::setup_tracing_logger(); + } }); } From afa394f212ed6ec2d283446de957a10981d5de8a Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 20:56:15 +0000 Subject: [PATCH 135/139] mod ignore --- .../nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs index 5d6913416e7..9d8b02a5a73 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper_ipr.rs @@ -740,9 +740,8 @@ mod tests { Ok(()) } - #[ignore] - // ignoring because sometimes running these from the CI drops for some reason, maybe its throttled or something #[tokio::test] + #[ignore] async fn dns_ping_checks() -> Result<(), Box> { let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let ip_pair = stream.connect_tunnel().await?; @@ -852,9 +851,8 @@ mod tests { Ok(()) } - #[ignore] - // ignoring because sometimes running these from the CI drops for some reason, maybe its throttled or something #[tokio::test] + #[ignore] async fn split_dns_ping_checks() -> Result<(), Box> { let mut stream = IpMixStream::new(NetworkEnvironment::Mainnet).await?; let ip_pair = stream.connect_tunnel().await?; From fb6d59cbe70ae374a0111b2fe155ff9742574f60 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Fri, 7 Nov 2025 23:59:11 +0000 Subject: [PATCH 136/139] Fix env discovery --- .../nym-sdk/src/stream_wrapper/network_env.rs | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs b/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs index 539b1a2982c..dc85e048f4f 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs @@ -1,3 +1,4 @@ +use std::fs; use std::path::PathBuf; #[derive(Default, Debug, Clone, Copy, PartialEq, Eq)] @@ -7,18 +8,40 @@ pub enum NetworkEnvironment { // Sandbox, } +fn find_workspace_root() -> PathBuf { + let mut current = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + + loop { + let cargo_toml = current.join("Cargo.toml"); + + if cargo_toml.exists() { + if let Ok(contents) = fs::read_to_string(&cargo_toml) { + // Check if this Cargo.toml defines a workspace + if contents.contains("[workspace]") { + return current; + } + } + } + + if !current.pop() { + panic!("Could not find workspace root"); + } + } +} + impl NetworkEnvironment { pub fn env_file_path(&self) -> PathBuf { + let root = find_workspace_root(); match self { - Self::Mainnet => PathBuf::from("../../../envs/sandbox.env"), - // Self::Sandbox => PathBuf::from("../../../envs/sandbox.env"), + Self::Mainnet => PathBuf::from(root.join("envs/mainnet.env")), + // Self::Sandbox => PathBuf::from(root.join("envs/sandbox.env")), } } pub fn network_defaults(&self) -> crate::NymNetworkDetails { match self { Self::Mainnet => crate::NymNetworkDetails::new_mainnet(), - // Self::Sandbox => crate::NymNetworkDetails::new_sandbox(), // TODO make this fn + // Self::Sandbox => crate::NymNetworkDetails::new_sandbox(), // TODO } } From 447fa25001e63224468b5f4552e403e3405be6aa Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Sat, 8 Nov 2025 00:05:44 +0000 Subject: [PATCH 137/139] clippy --- sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs b/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs index dc85e048f4f..f7a4bf36015 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/network_env.rs @@ -33,8 +33,8 @@ impl NetworkEnvironment { pub fn env_file_path(&self) -> PathBuf { let root = find_workspace_root(); match self { - Self::Mainnet => PathBuf::from(root.join("envs/mainnet.env")), - // Self::Sandbox => PathBuf::from(root.join("envs/sandbox.env")), + Self::Mainnet => root.join("envs/mainnet.env"), + // Self::Sandbox => root.join("envs/sandbox.env"), } } From 52cc4bd75c5409ab0c6c7265ee7722cca5d11a6d Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Wed, 12 Nov 2025 09:42:57 +0000 Subject: [PATCH 138/139] comment --- sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs index 3b445441a5b..5c4b3bd770d 100644 --- a/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs +++ b/sdk/rust/nym-sdk/src/stream_wrapper/mixnet_stream_wrapper.rs @@ -368,7 +368,7 @@ impl MixStream { socket.connect(peer).await } - /// Get the peer's Nym address (like `TcpStream::peer_addr`). + /// Get the peer's Nym address. /// /// Returns `None` if this is a listening stream. pub fn peer_addr(&self) -> Option<&Recipient> { From 20bd542f161837178875c5125c87a2fcb5d15225 Mon Sep 17 00:00:00 2001 From: mfahampshire Date: Sat, 10 Jan 2026 22:44:21 +0000 Subject: [PATCH 139/139] add scratch notes to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 37bc8865732..95618708cbe 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ storybook-static **/.DS_Store cpu-cycles/libcpucycles/build foxyfox.env +scratch.txt .next ppa-private-key.b64