diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ab4cefd..606a81d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,6 @@ jobs: matrix: target: - fmo_server - - fmo_frontend_default - fmo_frontend_react_default steps: diff --git a/.gitignore b/.gitignore index 722a093..dd666b2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,3 @@ fedimint_observer.db .direnv .pg_dev /db_backups -/fmo_frontend/dist -/fmo_frontend/node_modules diff --git a/CLAUDE.md b/CLAUDE.md index afa1b8d..acc9e91 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,9 +19,6 @@ just pg_start # Run backend server with auto-reload just watch -# Run frontend with hot-reload (in separate terminal) -just serve_frontend - # Check code compilation and common issues (preferred during development) just clippy @@ -39,7 +36,6 @@ just final-check ```bash just build # Build everything just build_package fmo_server -just build_package fmo_frontend --target wasm32-unknown-unknown ``` ### Code Quality Commands @@ -63,7 +59,6 @@ just pg_restore BACKUP_FILE ### Testing Specific Components ```bash just test_package fmo_server -just test_package fmo_frontend --target wasm32-unknown-unknown ``` ## Architecture Overview @@ -74,17 +69,13 @@ just test_package fmo_frontend --target wasm32-unknown-unknown - `/config/*` endpoints - Federation configuration API (stable) - `/federations/*` endpoints - Federation monitoring API (unstable) - Background tasks for monitoring federations and syncing data -- `fmo_frontend/` - Frontend PWA (Leptos + WASM + Tailwind CSS) - - Component-based architecture with reactive state management - - Client-side routing with Leptos Router +- `fmo_frontend_react/` - Frontend (React + TypeScript) ### Key Patterns 1. **Shared Types**: All API types are defined in `fmo_api_types` and used by both frontend and backend 2. **Database Migrations**: Version-controlled SQL migrations in `fmo_server/schema/` (v0-v8) 3. **Background Monitoring**: `FederationObserver` spawns tasks to monitor multiple federations concurrently -4. **State Management**: - - Backend: Shared app state with Arc/RwLock for thread safety - - Frontend: Leptos signals and resources for reactive updates +4. **State Management**: Backend uses shared app state with Arc/RwLock for thread safety 5. **Error Handling**: Custom `AppError` type wrapping `anyhow::Error` for consistent error propagation ### Environment Configuration @@ -100,14 +91,6 @@ Required environment variables (see `sample.env`): - **Federations API** (`/federations/*`): Unstable API for federation monitoring data - **Admin endpoints**: Require bearer token authentication via `FO_ADMIN_AUTH` -### Frontend Development -The frontend uses Leptos with WASM compilation. Components are organized by feature: -- `src/components/federations/` - Federation list views -- `src/components/federation/` - Single federation details -- `src/components/nostr/` - Nostr integration views - -Use `just serve_frontend` for hot-reload development with Trunk. - ### Database Schema PostgreSQL with materialized views and complex indexes. Key tables: - `federations` - Federation configurations diff --git a/Cargo.lock b/Cargo.lock index d3e3a08..caa5ad0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -54,12 +54,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[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" @@ -71,9 +65,9 @@ dependencies = [ [[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", @@ -86,9 +80,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" @@ -101,43 +95,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", -] - -[[package]] -name = "any_spawner" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1384d3fe1eecb464229fcf6eebb72306591c56bf27b373561489458a7c73027d" -dependencies = [ - "futures", - "thiserror 2.0.12", - "wasm-bindgen-futures", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" -dependencies = [ - "backtrace", -] +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "aquamarine" @@ -150,14 +130,14 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "archery" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae2ed21cd55021f05707a807a5fc85695dafb98832921f6cfa06db67ca5b869" +checksum = "70e0a5f99dfebb87bb342d0f53bb92c81842e100bbb915223e38349580e5441d" [[package]] name = "arrayvec" @@ -189,7 +169,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", "synstructure", ] @@ -201,7 +181,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -229,9 +209,9 @@ dependencies = [ [[package]] name = "async-compat" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" +checksum = "a1ba85bc55464dcbf728b56d97e119d673f4cf9062be330a9a26f3acf504a590" dependencies = [ "futures-core", "futures-io", @@ -242,9 +222,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" dependencies = [ "async-task", "concurrent-queue", @@ -271,29 +251,29 @@ dependencies = [ [[package]] name = "async-io" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix", + "rustix 1.1.4", "slab", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] @@ -306,14 +286,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "async-std" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" +checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" dependencies = [ "async-channel 1.9.0", "async-global-executor", @@ -354,7 +334,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -365,13 +345,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[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.117", ] [[package]] @@ -398,7 +378,7 @@ dependencies = [ "js-sys", "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tokio-socks", "tokio-tungstenite", "url", @@ -443,50 +423,56 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "attohttpc" -version = "0.24.1" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" dependencies = [ - "http 0.2.12", + "base64 0.22.1", + "http 1.4.0", "log", "url", ] [[package]] -name = "attribute-derive" -version = "0.10.3" +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "aws-lc-rs" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0053e96dd3bec5b4879c23a138d6ef26f2cb936c9cdc96274ac2b9ed44b5bb54" +checksum = "d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9" dependencies = [ - "attribute-derive-macro", - "derive-where", - "manyhow", - "proc-macro2", - "quote", - "syn 2.0.104", + "aws-lc-sys 0.37.1", + "zeroize", ] [[package]] -name = "attribute-derive-macro" -version = "0.10.3" +name = "aws-lc-sys" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463b53ad0fd5b460af4b1915fe045ff4d946d025fb6c4dc3337752eaa980f71b" +checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" dependencies = [ - "collection_literals", - "interpolator", - "manyhow", - "proc-macro-utils", - "proc-macro2", - "quote", - "quote-use", - "syn 2.0.104", + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", ] [[package]] -name = "autocfg" -version = "1.5.0" +name = "aws-lc-sys" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] [[package]] name = "axum" @@ -498,10 +484,10 @@ dependencies = [ "axum-core", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.1", "hyper-util", "itoa", "matchit", @@ -531,7 +517,7 @@ dependencies = [ "async-trait", "axum-core", "base64 0.21.7", - "http 1.3.1", + "http 1.4.0", ] [[package]] @@ -543,7 +529,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "mime", @@ -569,9 +555,9 @@ dependencies = [ [[package]] name = "backon" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302eaff5357a264a2c42f127ecb8bac761cf99749fc3dc95677e2743991f99e7" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" dependencies = [ "fastrand", "gloo-timers 0.3.0", @@ -580,9 +566,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -590,7 +576,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -612,7 +598,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" dependencies = [ "bitcoin-internals 0.3.0", - "bitcoin_hashes 0.14.0", + "bitcoin_hashes 0.14.1", ] [[package]] @@ -629,18 +615,18 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64-url" -version = "3.0.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2b6c78c06f7288d5e3c3d683bde35a79531127c83b087e5d0d77c974b4b28" +checksum = "f5b428e9fb429c6fda7316e9b006f993e6b4c33005e4659339fb5214479dddec" dependencies = [ "base64 0.22.1", ] [[package]] name = "base64ct" -version = "1.8.0" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bech32" @@ -656,9 +642,9 @@ checksum = "98f7eed2b2781a6f0b5c903471d48e15f56fb4e1165df8a9a2337fd1a59d45ea" [[package]] name = "bech32" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" +checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" [[package]] name = "bincode" @@ -669,13 +655,36 @@ dependencies = [ "serde", ] +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags 2.11.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.117", + "which", +] + [[package]] name = "bip39" -version = "2.2.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" +checksum = "90dbd31c98227229239363921e60fcf5e558e43ec69094d46fc4996f08d1d5bc" dependencies = [ - "bitcoin_hashes 0.13.0", + "bitcoin_hashes 0.14.1", "serde", "unicode-normalization", ] @@ -723,17 +732,17 @@ dependencies = [ [[package]] name = "bitcoin" -version = "0.32.6" +version = "0.32.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8929a18b8e33ea6b3c09297b687baaa71fb1b97353243a3f1029fad5c59c5b" +checksum = "1e499f9fc0407f50fe98af744ab44fa67d409f76b6772e1689ec8485eb0c0f66" dependencies = [ "base58ck", - "bech32 0.11.0", + "bech32 0.11.1", "bitcoin-internals 0.3.0", "bitcoin-io", "bitcoin-units", - "bitcoin_hashes 0.14.0", - "hex-conservative 0.2.1", + "bitcoin_hashes 0.14.1", + "hex-conservative 0.2.2", "hex_lit", "secp256k1 0.29.1", "serde", @@ -759,9 +768,9 @@ dependencies = [ [[package]] name = "bitcoin-io" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" +checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" [[package]] name = "bitcoin-private" @@ -811,12 +820,12 @@ dependencies = [ [[package]] name = "bitcoin_hashes" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" dependencies = [ "bitcoin-io", - "hex-conservative 0.2.1", + "hex-conservative 0.2.2", "serde", ] @@ -828,9 +837,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bitmaps" @@ -909,9 +918,9 @@ checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "byte-slice-cast" @@ -927,15 +936,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" - -[[package]] -name = "camino" -version = "1.1.10" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cbc" @@ -948,18 +951,30 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.30" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", "shlex", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[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" @@ -993,17 +1008,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -1017,11 +1031,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" -version = "4.5.41" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -1029,9 +1054,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -1041,53 +1066,45 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] -name = "cobs" -version = "0.3.0" +name = "cmake" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ - "thiserror 2.0.12", + "cc", ] [[package]] -name = "codee" -version = "0.3.2" +name = "cobs" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd8bbfdadf2f8999c6e404697bc08016dce4a3d77dec465b36c9a0652fdb3327" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "serde", - "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.18", ] -[[package]] -name = "collection_literals" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b3f65b8fb8e88ba339f7d23a390fe1b0896217da05e2a66c584c9b29a91df8" - [[package]] name = "color-backtrace" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2123a5984bd52ca861c66f66a9ab9883b27115c607f801f86c1bc2a84eb69f0f" +checksum = "308329d5d62e877ba02943db3a8e8c052de9fde7ab48283395ba0e6494efbabd" dependencies = [ "backtrace", "btparse", @@ -1109,46 +1126,17 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "config" -version = "0.15.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b1eb4fb07bc7f012422df02766c7bd5971effb894f573865642f06fa3265440" -dependencies = [ - "convert_case 0.6.0", - "pathdiff", - "serde", - "toml", - "winnow", -] - -[[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.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "041fbfcf8e7054df725fb9985297e92422cdc80fcf313665f5ca3d761bb63f4c" - [[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", ] @@ -1164,41 +1152,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "const_str_slice_concat" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f67855af358fcb20fac58f9d714c94e2b228fe5694c1c9b4ead4a366343eda1b" - -[[package]] -name = "convert_case" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "convert_case" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "cookie" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" -dependencies = [ - "percent-encoding", - "time", - "version_check", -] - [[package]] name = "cordyceps" version = "0.3.4" @@ -1236,9 +1189,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -1287,9 +1240,9 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -1330,21 +1283,21 @@ dependencies = [ [[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", ] @@ -1375,7 +1328,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -1399,7 +1352,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -1410,36 +1363,23 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.104", -] - -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", + "syn 2.0.117", ] [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "deadpool" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ed5957ff93768adf7a65ab167a17835c3d2c3c50d084fe305174c112f468e2f" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" dependencies = [ "deadpool-runtime", + "lazy_static", "num_cpus", "tokio", ] @@ -1452,7 +1392,7 @@ checksum = "3d697d376cbfa018c23eb4caab1fd1883dd9c906a8c034e8d9a3cb06a7e0bef9" dependencies = [ "async-trait", "deadpool", - "getrandom 0.2.16", + "getrandom 0.2.17", "tokio", "tokio-postgres", "tracing", @@ -1467,18 +1407,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "default-struct-builder" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0df63c21a4383f94bd5388564829423f35c316aed85dc4f8427aded372c7c0d" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "der" version = "0.7.10" @@ -1513,29 +1441,18 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", ] -[[package]] -name = "derive-where" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "derive_more" version = "1.0.0" @@ -1553,7 +1470,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", "unicode-xid", ] @@ -1582,7 +1499,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -1598,15 +1515,15 @@ dependencies = [ [[package]] name = "dnssec-prover" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f9e1163868b86c37d43c586af9d917e699c87f1266ebfdf356ad1003458118" +checksum = "ec4f825369fc7134da70ca4040fddc8e03b80a46d249ae38d9c1c39b7b4476bf" [[package]] name = "document-features" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] @@ -1618,16 +1535,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] -name = "drain_filter_polyfill" -version = "0.1.3" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "669a445ee724c5c69b1b06fe0b63e70a1c84bc9bb7d9696cd4f4e3ec45050408" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[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 = "ed25519" @@ -1661,16 +1578,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "either_of" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216d23e0ec69759a17f05e1c553f3a6870e5ec73420fbb07807a6f34d5d1d5a4" -dependencies = [ - "paste", - "pin-project-lite", -] - [[package]] name = "embedded-io" version = "0.4.0" @@ -1701,7 +1608,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -1721,7 +1628,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -1730,30 +1637,25 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "erased" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1731451909bde27714eacba19c2566362a7f35224f52b153d3f42cf60f72472" - [[package]] name = "erased-serde" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" dependencies = [ "serde", + "serde_core", "typeid", ] [[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]] @@ -1763,8 +1665,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23be31c97b2e505ac6af0d72a201caead71298a957639061a10314f6d4860cd7" dependencies = [ "async-std", - "bitcoin 0.32.6", - "hex-conservative 0.2.1", + "bitcoin 0.32.8", + "hex-conservative 0.2.2", "log", "reqwest 0.11.27", "serde", @@ -1778,9 +1680,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", @@ -1793,7 +1695,7 @@ 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", ] @@ -1817,103 +1719,125 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fedimint-api-client" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", "async-channel 2.5.0", "async-trait", - "base64 0.22.1", - "bitcoin 0.32.6", - "fedimint-core 0.8.0-beta.2", - "fedimint-logging 0.8.0-beta.2", + "bitcoin 0.32.8", + "fedimint-connectors", + "fedimint-core 0.10.0", + "fedimint-logging 0.10.0", "futures", - "iroh 0.35.0", - "iroh 0.90.0", - "iroh-base 0.35.0", "itertools 0.14.0", "jsonrpsee-core", - "jsonrpsee-types", - "jsonrpsee-wasm-client", - "jsonrpsee-ws-client", - "lru 0.13.0", + "lru 0.16.3", "rand 0.8.5", - "rustls-pki-types", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.18", "tokio", - "tokio-rustls 0.26.2", + "tokio-stream", "tracing", - "url", - "webpki-roots 1.0.2", - "z32", ] [[package]] name = "fedimint-build" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "serde_json", ] [[package]] name = "fedimint-client-module" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", "aquamarine", "async-stream", "async-trait", - "bitcoin 0.32.6", + "bitcoin 0.32.8", "fedimint-api-client", "fedimint-build", - "fedimint-core 0.8.0-beta.2", + "fedimint-connectors", + "fedimint-core 0.10.0", "fedimint-derive-secret", "fedimint-eventlog", - "fedimint-logging 0.8.0-beta.2", + "fedimint-logging 0.10.0", "futures", "itertools 0.14.0", "rand 0.8.5", - "reqwest 0.12.22", + "reqwest 0.12.28", "serde", "serde_json", "strum 0.27.2", - "strum_macros 0.26.4", - "thiserror 2.0.12", + "strum_macros 0.27.2", + "thiserror 2.0.18", "tokio", "tokio-stream", "tracing", ] [[package]] -name = "fedimint-core" -version = "0.4.4" -source = "git+https://github.com/elsirion/fedimint?branch=v0.4.4-patch-xyz#ca970accfcb128a1d573cc0dee6844b84df235d8" +name = "fedimint-connectors" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", - "async-lock", - "async-recursion", "async-trait", - "backon 0.4.4", - "backtrace", - "base64-url", - "bech32 0.11.0", - "bincode", - "bitcoin 0.29.2", - "bitcoin 0.30.2", - "bitcoin_hashes 0.12.0", - "bitvec", - "bls12_381", - "erased-serde", - "fedimint-derive 0.4.4", + "aws-lc-sys 0.30.0", + "base64 0.22.1", + "fedimint-core 0.10.0", + "fedimint-logging 0.10.0", + "futures", + "iroh 0.35.0", + "iroh 0.90.0", + "iroh-base 0.35.0", + "jsonrpsee-core", + "jsonrpsee-types", + "jsonrpsee-wasm-client", + "jsonrpsee-ws-client", + "reqwest 0.12.28", + "rustls-pki-types", + "serde_json", + "thiserror 2.0.18", + "tokio", + "tokio-rustls 0.26.4", + "tracing", + "url", + "webpki-roots 1.0.6", + "z32", +] + +[[package]] +name = "fedimint-core" +version = "0.4.4" +source = "git+https://github.com/elsirion/fedimint?branch=v0.4.4-patch-xyz#ca970accfcb128a1d573cc0dee6844b84df235d8" +dependencies = [ + "anyhow", + "async-lock", + "async-recursion", + "async-trait", + "backon 0.4.4", + "backtrace", + "base64-url", + "bech32 0.11.1", + "bincode", + "bitcoin 0.29.2", + "bitcoin 0.30.2", + "bitcoin_hashes 0.12.0", + "bitvec", + "bls12_381", + "erased-serde", + "fedimint-derive 0.4.4", "fedimint-logging 0.4.4", "fedimint-threshold-crypto", "futures", "futures-util", - "getrandom 0.2.16", + "getrandom 0.2.17", "gloo-timers 0.3.0", "hex", "imbl 3.0.0", @@ -1944,47 +1868,49 @@ dependencies = [ [[package]] name = "fedimint-core" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", "async-channel 2.5.0", "async-lock", "async-recursion", "async-trait", - "backon 1.5.1", + "aws-lc-sys 0.30.0", + "backon 1.6.0", "backtrace", "base64 0.22.1", - "bech32 0.11.0", - "bincode", - "bitcoin 0.32.6", + "bech32 0.11.1", + "bitcoin 0.32.8", "bitcoin-io", "bitcoin-units", "bitvec", "bls12_381", "erased-serde", - "fedimint-derive 0.8.0-beta.2", - "fedimint-logging 0.8.0-beta.2", + "fedimint-derive 0.10.0", + "fedimint-logging 0.10.0", "fedimint-threshold-crypto", + "fedimint-util-error", "futures", "futures-util", - "getrandom 0.3.3", + "getrandom 0.3.4", "gloo-timers 0.3.0", "group", "hex", - "hex-conservative 0.3.0", + "hex-conservative 0.3.2", "imbl 5.0.0", + "iroh 0.35.0", "iroh-base 0.35.0", + "iroh-relay 0.35.0", "itertools 0.14.0", "js-sys", "jsonrpsee-core", - "lightning 0.1.5", + "lightning 0.1.8", "lightning-invoice 0.33.2", "lightning-types", "macro_rules_attribute", - "miniscript 12.3.4", + "miniscript 12.3.5", "n0-future", - "parity-scale-codec", "rand 0.8.5", "scopeguard", "secp256k1 0.29.1", @@ -1993,13 +1919,14 @@ dependencies = [ "serdect", "slotmap", "strum 0.27.2", - "strum_macros 0.26.4", - "thiserror 2.0.12", + "strum_macros 0.27.2", + "thiserror 2.0.18", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls 0.26.4", "tracing", "url", "wasm-bindgen-futures", + "z32", ] [[package]] @@ -2010,43 +1937,44 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "fedimint-derive" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "fedimint-derive-secret" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", - "bitcoin_hashes 0.14.0", + "bitcoin_hashes 0.14.1", "bls12_381", - "fedimint-core 0.8.0-beta.2", + "fedimint-core 0.10.0", "fedimint-hkdf", "ring", ] [[package]] name = "fedimint-eventlog" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", "async-trait", - "fedimint-core 0.8.0-beta.2", - "fedimint-logging 0.8.0-beta.2", + "fedimint-core 0.10.0", + "fedimint-logging 0.10.0", "futures", + "hex", "itertools 0.14.0", "serde", "serde_json", @@ -2056,27 +1984,33 @@ dependencies = [ [[package]] name = "fedimint-hkdf" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ - "bitcoin_hashes 0.14.0", + "bitcoin_hashes 0.14.1", ] [[package]] name = "fedimint-ln-common" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", - "bitcoin 0.32.6", - "fedimint-core 0.8.0-beta.2", + "async-trait", + "bitcoin 0.32.8", + "fedimint-connectors", + "fedimint-core 0.10.0", + "fedimint-logging 0.10.0", "fedimint-threshold-crypto", - "lightning 0.1.5", + "iroh 0.35.0", + "lightning 0.1.8", "lightning-invoice 0.33.2", + "reqwest 0.12.28", "serde", "serde-big-array", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.18", + "tokio", "tracing", ] @@ -2091,8 +2025,8 @@ dependencies = [ [[package]] name = "fedimint-logging" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", "tracing-subscriber", @@ -2100,61 +2034,61 @@ dependencies = [ [[package]] name = "fedimint-meta-client" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", "async-trait", "erased-serde", "fedimint-api-client", "fedimint-client-module", - "fedimint-core 0.8.0-beta.2", - "fedimint-logging 0.8.0-beta.2", + "fedimint-core 0.10.0", + "fedimint-logging 0.10.0", "fedimint-meta-common", "serde", "serde_json", "strum 0.27.2", - "strum_macros 0.26.4", - "thiserror 2.0.12", + "strum_macros 0.27.2", + "thiserror 2.0.18", "tracing", ] [[package]] name = "fedimint-meta-common" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", - "fedimint-core 0.8.0-beta.2", - "fedimint-logging 0.8.0-beta.2", + "fedimint-core 0.10.0", + "fedimint-logging 0.10.0", "hex", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.18", "tracing", ] [[package]] name = "fedimint-mint-common" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", - "bitcoin_hashes 0.14.0", - "fedimint-core 0.8.0-beta.2", + "bitcoin_hashes 0.14.1", + "fedimint-core 0.10.0", "fedimint-tbs", "serde", - "thiserror 2.0.12", + "thiserror 2.0.18", "tracing", ] [[package]] name = "fedimint-tbs" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "bls12_381", - "fedimint-core 0.8.0-beta.2", + "fedimint-core 0.10.0", "group", "hex", "rand 0.8.5", @@ -2185,19 +2119,27 @@ dependencies = [ "zeroize", ] +[[package]] +name = "fedimint-util-error" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" +dependencies = [ + "anyhow", +] + [[package]] name = "fedimint-wallet-common" -version = "0.8.0-beta.2" -source = "git+https://github.com/elsirion/fedimint?branch=v0.8-beta.2-patch-xyz#b3b6a41a48120b298dcd8560cd6c312e9a4bbfe9" +version = "0.10.0" +source = "git+https://github.com/fedimint/fedimint?tag=v0.10.0#76f6c7ce5435a609a256d58b0924161c5fc9b3ec" dependencies = [ "anyhow", - "bitcoin 0.32.6", - "fedimint-core 0.8.0-beta.2", + "bitcoin 0.32.8", + "fedimint-core 0.10.0", "hex", "impl-tools", - "miniscript 12.3.4", + "miniscript 12.3.5", "serde", - "thiserror 2.0.12", + "thiserror 2.0.18", "tracing", ] @@ -2218,6 +2160,12 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "flume" version = "0.11.1" @@ -2226,45 +2174,19 @@ checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", - "spin", + "spin 0.9.8", ] [[package]] name = "fmo_api_types" version = "0.1.0" dependencies = [ - "bitcoin 0.32.6", + "bitcoin 0.32.8", "chrono", - "fedimint-core 0.8.0-beta.2", + "fedimint-core 0.10.0", "serde", ] -[[package]] -name = "fmo_frontend" -version = "0.1.0" -dependencies = [ - "anyhow", - "chrono", - "console_error_panic_hook", - "fedimint-core 0.8.0-beta.2", - "fmo_api_types", - "futures", - "itertools 0.12.1", - "leptos", - "leptos-chartistry", - "leptos-use", - "leptos_meta", - "leptos_router", - "nostr-sdk", - "num-format", - "reqwest 0.12.22", - "serde_json", - "tokio", - "tracing", - "tracing-wasm", - "web-sys", -] - [[package]] name = "fmo_server" version = "0.2.0" @@ -2273,7 +2195,7 @@ dependencies = [ "async-stream", "axum", "axum-auth", - "bitcoin 0.32.6", + "bitcoin 0.32.8", "chrono", "clap", "csv", @@ -2281,7 +2203,8 @@ dependencies = [ "dotenv", "esplora-client", "fedimint-api-client", - "fedimint-core 0.8.0-beta.2", + "fedimint-connectors", + "fedimint-core 0.10.0", "fedimint-ln-common", "fedimint-meta-client", "fedimint-mint-common", @@ -2292,7 +2215,7 @@ dependencies = [ "nostr-sdk", "postgres-from-row", "regex", - "reqwest 0.12.22", + "reqwest 0.12.28", "serde", "serde_json", "stability-pool-common", @@ -2315,15 +2238,27 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[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", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "funty" version = "2.0.0" @@ -2332,9 +2267,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -2347,22 +2282,22 @@ dependencies = [ [[package]] name = "futures-buffered" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe940397c8b744b9c2c974791c2c08bca2c3242ce0290393249e98f215a00472" +checksum = "4421cb78ee172b6b06080093479d3c50f058e7c81b7d577bbb8d118d551d4cd5" dependencies = [ "cordyceps", "diatomic-waker", "futures-core", "pin-project-lite", - "spin", + "spin 0.10.0", ] [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -2370,33 +2305,32 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", "futures-util", - "num_cpus", ] [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -2407,26 +2341,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" @@ -2440,9 +2374,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -2452,22 +2386,22 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] [[package]] name = "generator" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" dependencies = [ "cc", "cfg-if", "libc", "log", "rustversion", - "windows 0.61.3", + "windows-link 0.2.1", + "windows-result 0.4.1", ] [[package]] @@ -2483,9 +2417,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -2496,29 +2430,42 @@ dependencies = [ [[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 = "getrandom" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[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" @@ -2530,7 +2477,7 @@ dependencies = [ "futures-core", "futures-sink", "gloo-utils", - "http 1.3.1", + "http 1.4.0", "js-sys", "pin-project", "serde", @@ -2589,12 +2536,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "guardian" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e2ac29387b1aa07a1e448f7bb4f35b500787971e965b02842b900afa5c8f6f" - [[package]] name = "h2" version = "0.3.27" @@ -2616,16 +2557,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.1", + "http 1.4.0", "indexmap", "slab", "tokio", @@ -2650,19 +2591,24 @@ checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.1.5", +] [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.2.0", ] [[package]] @@ -2675,7 +2621,7 @@ dependencies = [ "hash32", "rustc_version", "serde", - "spin", + "spin 0.9.8", "stable_deref_trait", ] @@ -2708,18 +2654,18 @@ checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" [[package]] name = "hex-conservative" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" dependencies = [ "arrayvec", ] [[package]] name = "hex-conservative" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afe881d0527571892c4034822e59bb10c6c991cce6abe8199b6f5cf10766f55" +checksum = "830e599c2904b08f0834ee6337d8fe8f0ed4a63b5d9e7a7f49c0ffa06d08d360" dependencies = [ "arrayvec", ] @@ -2752,9 +2698,9 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand 0.9.1", + "rand 0.9.2", "ring", - "thiserror 2.0.12", + "thiserror 2.0.18", "tinyvec", "tokio", "tracing", @@ -2774,10 +2720,10 @@ dependencies = [ "moka", "once_cell", "parking_lot", - "rand 0.9.1", + "rand 0.9.2", "resolv-conf", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.18", "tokio", "tracing", ] @@ -2803,24 +2749,24 @@ dependencies = [ [[package]] name = "hmac-sha256" -version = "1.1.12" +version = "1.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" +checksum = "ec9d92d097f4749b64e8cc33d924d9f40a2d4eb91402b458014b781f5733d60f" [[package]] -name = "hostname-validator" -version = "1.1.1" +name = "home" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] [[package]] -name = "html-escape" -version = "0.2.13" +name = "hostname-validator" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" -dependencies = [ - "utf8-width", -] +checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" [[package]] name = "http" @@ -2835,12 +2781,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -2862,7 +2807,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http 1.4.0", ] [[package]] @@ -2873,7 +2818,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "pin-project-lite", ] @@ -2890,20 +2835,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "hydration_context" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8714ae4adeaa846d838f380fbd72f049197de629948f91bf045329e0cf0a283" -dependencies = [ - "futures", - "once_cell", - "or_poisoned", - "pin-project-lite", - "serde", - "throw_error", -] - [[package]] name = "hyper" version = "0.14.32" @@ -2921,7 +2852,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -2930,20 +2861,22 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", - "h2 0.4.11", - "http 1.3.1", + "futures-core", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -2969,36 +2902,35 @@ 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", + "http 1.4.0", + "hyper 1.8.1", "hyper-util", - "rustls 0.23.29", + "rustls 0.23.37", "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.6", ] [[package]] name = "hyper-util" -version = "0.1.15" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", - "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.8.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.2", "tokio", "tower-service", "tracing", @@ -3006,9 +2938,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3016,7 +2948,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -3030,9 +2962,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -3043,9 +2975,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -3056,11 +2988,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -3071,42 +3002,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -3114,6 +3041,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -3122,9 +3055,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", @@ -3143,20 +3076,20 @@ dependencies = [ [[package]] name = "igd-next" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06464e726471718db9ad3fefc020529fabcde03313a0fc3967510e2db5add12" +checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" dependencies = [ "async-trait", "attohttpc", "bytes", "futures", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.1", "hyper-util", "log", - "rand 0.9.1", + "rand 0.9.2", "tokio", "url", "xmltree", @@ -3184,7 +3117,7 @@ dependencies = [ "archery", "bitmaps", "imbl-sized-chunks", - "rand_core 0.9.3", + "rand_core 0.9.5", "rand_xoshiro 0.7.0", "version_check", ] @@ -3207,19 +3140,19 @@ dependencies = [ "autocfg", "impl-tools-lib", "proc-macro-error2", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "impl-tools-lib" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6a9b65dadb575faa21065e8464e88ec3e991b3d6745972dec69d1be6cffcfe" +checksum = "ab699036df31c1f7d3561bfa6e9cb9bc3bb0fd2e2cd9bf121c31cb961d049ddf" dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -3230,7 +3163,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -3254,12 +3187,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] @@ -3284,30 +3219,13 @@ dependencies = [ "web-sys", ] -[[package]] -name = "interpolator" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" - -[[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 = "ipconfig" 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", @@ -3321,9 +3239,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -3338,7 +3256,7 @@ dependencies = [ "aead", "anyhow", "atomic-waker", - "backon 1.5.1", + "backon 1.6.0", "bytes", "cfg_aliases", "concurrent-queue", @@ -3349,9 +3267,9 @@ dependencies = [ "ed25519-dalek", "futures-buffered", "futures-util", - "getrandom 0.3.3", + "getrandom 0.3.4", "hickory-resolver", - "http 1.3.1", + "http 1.4.0", "igd-next", "instant", "iroh-base 0.35.0", @@ -3368,9 +3286,9 @@ dependencies = [ "portmapper 0.5.0", "rand 0.8.5", "rcgen", - "reqwest 0.12.22", + "reqwest 0.12.28", "ring", - "rustls 0.23.29", + "rustls 0.23.37", "rustls-webpki 0.102.8", "serde", "smallvec", @@ -3378,7 +3296,7 @@ dependencies = [ "strum 0.26.3", "stun-rs", "surge-ping", - "thiserror 2.0.12", + "thiserror 2.0.18", "time", "tokio", "tokio-stream", @@ -3398,7 +3316,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9436f319c2d24bca1b28a2fab4477c8d2ac795ab2d3aeda142d207b38ec068f4" dependencies = [ "aead", - "backon 1.5.1", + "backon 1.6.0", "bytes", "cfg_aliases", "crypto_box", @@ -3408,9 +3326,9 @@ dependencies = [ "ed25519-dalek", "futures-buffered", "futures-util", - "getrandom 0.3.3", + "getrandom 0.3.4", "hickory-resolver", - "http 1.3.1", + "http 1.4.0", "igd-next", "instant", "iroh-base 0.90.0", @@ -3429,11 +3347,11 @@ dependencies = [ "pkarr", "portmapper 0.6.1", "rand 0.8.5", - "reqwest 0.12.22", + "reqwest 0.12.28", "ring", - "rustls 0.23.29", + "rustls 0.23.37", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.9", "serde", "smallvec", "snafu", @@ -3465,7 +3383,7 @@ dependencies = [ "postcard", "rand_core 0.6.4", "serde", - "thiserror 2.0.12", + "thiserror 2.0.18", "url", ] @@ -3523,7 +3441,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -3537,10 +3455,10 @@ dependencies = [ "iroh-quinn-proto", "iroh-quinn-udp", "pin-project-lite", - "rustc-hash", - "rustls 0.23.29", - "socket2", - "thiserror 2.0.12", + "rustc-hash 2.1.1", + "rustls 0.23.37", + "socket2 0.5.10", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -3557,10 +3475,10 @@ dependencies = [ "iroh-quinn-proto", "iroh-quinn-udp", "pin-project-lite", - "rustc-hash", - "rustls 0.23.29", - "socket2", - "thiserror 2.0.12", + "rustc-hash 2.1.1", + "rustls 0.23.37", + "socket2 0.5.10", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -3573,14 +3491,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "929d5d8fa77d5c304d3ee7cae9aede31f13908bd049f9de8c7c0094ad6f7c535" dependencies = [ "bytes", - "getrandom 0.2.16", + "getrandom 0.2.17", "rand 0.8.5", "ring", - "rustc-hash", - "rustls 0.23.29", + "rustc-hash 2.1.1", + "rustls 0.23.37", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -3595,7 +3513,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -3611,11 +3529,11 @@ dependencies = [ "cfg_aliases", "data-encoding", "derive_more", - "getrandom 0.3.3", + "getrandom 0.3.4", "hickory-resolver", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.1", "hyper-util", "iroh-base 0.35.0", "iroh-metrics 0.34.0", @@ -3628,16 +3546,16 @@ dependencies = [ "pkarr", "postcard", "rand 0.8.5", - "reqwest 0.12.22", - "rustls 0.23.29", + "reqwest 0.12.28", + "rustls 0.23.37", "rustls-webpki 0.102.8", "serde", "sha1", "strum 0.26.3", "stun-rs", - "thiserror 2.0.12", + "thiserror 2.0.18", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tokio-util", "tokio-websockets", "tracing", @@ -3657,11 +3575,11 @@ dependencies = [ "cfg_aliases", "data-encoding", "derive_more", - "getrandom 0.3.3", + "getrandom 0.3.4", "hickory-resolver", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.1", "hyper-util", "iroh-base 0.90.0", "iroh-metrics 0.35.0", @@ -3676,16 +3594,16 @@ dependencies = [ "pkarr", "postcard", "rand 0.8.5", - "reqwest 0.12.22", - "rustls 0.23.29", + "reqwest 0.12.28", + "rustls 0.23.37", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.9", "serde", "sha1", "snafu", "strum 0.26.3", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tokio-util", "tokio-websockets", "tracing", @@ -3697,9 +3615,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -3730,15 +3648,25 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "jobserver" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -3746,23 +3674,23 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bacb85abf4117092455e1573625e21b8f8ef4dec8aff13361140b2dc266cdff2" +checksum = "cc4280b709ac3bb5e16cf3bad5056a0ec8df55fa89edfe996361219aadc2c7ea" dependencies = [ "base64 0.22.1", "futures-channel", "futures-util", "gloo-net", - "http 1.3.1", + "http 1.4.0", "jsonrpsee-core", "pin-project", - "rustls 0.23.29", + "rustls 0.23.37", "rustls-pki-types", "soketto", "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tokio-util", "tracing", "url", @@ -3770,16 +3698,16 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456196007ca3a14db478346f58c7238028d55ee15c1df15115596e411ff27925" +checksum = "348ee569eaed52926b5e740aae20863762b16596476e943c9e415a6479021622" dependencies = [ "async-trait", "futures-timer", "futures-util", "jsonrpsee-types", "pin-project", - "rustc-hash", + "rustc-hash 2.1.1", "serde", "serde_json", "thiserror 1.0.69", @@ -3791,11 +3719,11 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a8e70baf945b6b5752fc8eb38c918a48f1234daf11355e07106d963f860089" +checksum = "b0f05e0028e55b15dbd2107163b3c744cd3bb4474f193f95d9708acbf5677e44" dependencies = [ - "http 1.3.1", + "http 1.4.0", "serde", "serde_json", "thiserror 1.0.69", @@ -3803,9 +3731,9 @@ dependencies = [ [[package]] name = "jsonrpsee-wasm-client" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6558a9586cad43019dafd0b6311d0938f46efc116b34b28c74778bc11a2edf6" +checksum = "e9d745e4f543fc10fc0e2b11aa1f3be506b1e475d412167e7191a65ecd239f1c" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -3814,11 +3742,11 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b3323d890aa384f12148e8d2a1fd18eb66e9e7e825f9de4fa53bcc19b93eef" +checksum = "78fc744f17e7926d57f478cf9ca6e1ee5d8332bf0514860b1a3cdf1742e614cc" dependencies = [ - "http 1.3.1", + "http 1.4.0", "jsonrpsee-client-transport", "jsonrpsee-core", "jsonrpsee-types", @@ -3827,9 +3755,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ "cpufeatures", ] @@ -3850,233 +3778,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "leptos" -version = "0.8.3" +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c202a7897aa73c90ac4ce73713512d871f75e79847558d9e88f778659b164dc" -dependencies = [ - "any_spawner", - "cfg-if", - "either_of", - "futures", - "getrandom 0.3.3", - "hydration_context", - "leptos_config", - "leptos_dom", - "leptos_hot_reload", - "leptos_macro", - "leptos_server", - "oco_ref", - "or_poisoned", - "paste", - "reactive_graph", - "rustc-hash", - "rustc_version", - "send_wrapper 0.6.0", - "serde", - "serde_qs", - "server_fn", - "slotmap", - "tachys", - "thiserror 2.0.12", - "throw_error", - "typed-builder", - "typed-builder-macro", - "wasm-bindgen", - "web-sys", -] +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] -name = "leptos-chartistry" -version = "0.2.2" +name = "leb128fmt" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f40cb5107c4c1ea5b06de6b95b13ab0eb2bb5ae30bbcb19fdbe65004c733318" -dependencies = [ - "chrono", - "leptos", - "leptos-use", - "log", - "web-sys", -] +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] -name = "leptos-use" -version = "0.16.2" +name = "libc" +version = "0.2.182" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" + +[[package]] +name = "libloading" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6eac17e7d306b4ad67158aba97c1490884ba304add4321069cb63fe0834c3b1" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "chrono", - "codee", - "cookie", - "default-struct-builder", - "futures-util", - "gloo-timers 0.3.0", - "js-sys", - "lazy_static", - "leptos", - "paste", - "send_wrapper 0.6.0", - "thiserror 2.0.12", - "unic-langid", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "windows-link 0.2.1", ] [[package]] -name = "leptos_config" -version = "0.8.3" +name = "libm" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74eec2103dfa808f4b13c149dfbd3842f13a5948489fda3de31cc565fb28dbec" -dependencies = [ - "config", - "regex", - "serde", - "thiserror 2.0.12", - "typed-builder", -] +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] -name = "leptos_dom" -version = "0.8.3" +name = "libredox" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b845379c33884f0dead9abb5aa3d258d7bd507789fc2527a5972f82c0757c7" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" dependencies = [ - "js-sys", - "or_poisoned", - "reactive_graph", - "send_wrapper 0.6.0", - "tachys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "leptos_hot_reload" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fae732329192df886803f076515d73c883166a4c8cbc5532584d0d1e43539300" -dependencies = [ - "anyhow", - "camino", - "indexmap", - "parking_lot", - "proc-macro2", - "quote", - "rstml", - "serde", - "syn 2.0.104", - "walkdir", -] - -[[package]] -name = "leptos_macro" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e32ae8783d4b64838167e026ef773dbc53399e9e6658e9c2f65e0ce67a5ccec" -dependencies = [ - "attribute-derive", - "cfg-if", - "convert_case 0.8.0", - "html-escape", - "itertools 0.14.0", - "leptos_hot_reload", - "prettyplease", - "proc-macro-error2", - "proc-macro2", - "quote", - "rstml", - "rustc_version", - "server_fn_macro", - "syn 2.0.104", - "uuid", -] - -[[package]] -name = "leptos_meta" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3235579f4c56361dddc57d32df39ad527f5853e0757826b73fc3d558e9d362b0" -dependencies = [ - "futures", - "indexmap", - "leptos", - "once_cell", - "or_poisoned", - "send_wrapper 0.6.0", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "leptos_router" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b6df1b107c301bd39c114768a1196a8dfcbdae869364b3f0247e3f554b503a" -dependencies = [ - "any_spawner", - "either_of", - "futures", - "gloo-net", - "js-sys", - "leptos", - "leptos_router_macro", - "or_poisoned", - "reactive_graph", - "rustc_version", - "send_wrapper 0.6.0", - "tachys", - "thiserror 2.0.12", - "url", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "leptos_router_macro" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d35d4bb7922e74546fac3e852b0f3252e9996e04fca12c359aba1e5958cfda8" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "leptos_server" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26851048e161998b8f9fb3261a833ec64df2a2669ea95f360c54b7f47a1e07cb" -dependencies = [ - "any_spawner", - "base64 0.22.1", - "codee", - "futures", - "hydration_context", - "or_poisoned", - "reactive_graph", - "send_wrapper 0.6.0", - "serde", - "serde_json", - "server_fn", - "tachys", + "libc", ] -[[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 = "lightning" version = "0.0.123" @@ -4089,12 +3832,12 @@ dependencies = [ [[package]] name = "lightning" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e540fcb289a76826c9c0b078d3dd1f05691972c5a53fb4d3120540862040a147" +checksum = "8ffe63f56b10d214be1ade8698ee80af82d981237cae3e581e7a631f5f4959f3" dependencies = [ - "bech32 0.11.0", - "bitcoin 0.32.6", + "bech32 0.11.1", + "bitcoin 0.32.8", "dnssec-prover", "hashbrown 0.13.2", "libm", @@ -4121,8 +3864,8 @@ version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11209f386879b97198b2bfc9e9c1e5d42870825c6bd4376f17f95357244d6600" dependencies = [ - "bech32 0.11.0", - "bitcoin 0.32.6", + "bech32 0.11.1", + "bitcoin 0.32.8", "lightning-types", "serde", ] @@ -4133,32 +3876,32 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2cd84d4e71472035903e43caded8ecc123066ce466329ccd5ae537a8d5488c7" dependencies = [ - "bitcoin 0.32.6", + "bitcoin 0.32.8", ] [[package]] -name = "linear-map" -version = "1.2.0" +name = "linux-raw-sys" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" -version = "0.4.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "lnurl-pay" @@ -4167,26 +3910,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02c042191c2e3f27147decfad8182eea2c7dd1c6c1733562e25d3d401369669d" dependencies = [ "bech32 0.10.0-beta", - "reqwest 0.12.22", + "reqwest 0.12.28", "serde", "serde_json", ] [[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" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" dependencies = [ "value-bag", ] @@ -4210,7 +3952,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -4219,7 +3961,16 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", +] + +[[package]] +name = "lru" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" +dependencies = [ + "hashbrown 0.16.1", ] [[package]] @@ -4256,46 +4007,23 @@ dependencies = [ "ed25519-dalek", "flume", "futures-lite", - "getrandom 0.2.16", + "getrandom 0.2.17", "lru 0.13.0", "serde", "serde_bencode", "serde_bytes", "sha1_smol", - "thiserror 2.0.12", + "thiserror 2.0.18", "tracing", ] -[[package]] -name = "manyhow" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b33efb3ca6d3b07393750d4030418d594ab1139cee518f0dc88db70fec873587" -dependencies = [ - "manyhow-macros", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "manyhow-macros" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fce34d199b78b6e6073abf984c9cf5fd3e9330145a93ee0738a7443e371495" -dependencies = [ - "proc-macro-utils", - "proc-macro2", - "quote", -] - [[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]] @@ -4322,9 +4050,9 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.7.5" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "mime" @@ -4351,12 +4079,12 @@ dependencies = [ [[package]] name = "miniscript" -version = "12.3.4" +version = "12.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1eeb3bbebc87062b99fbb8c9067d30dab85469f4cf12248a2667777cc86b282" +checksum = "487906208f38448e186e3deb02f2b8ef046a9078b0de00bdb28bf4fb9b76951c" dependencies = [ - "bech32 0.11.0", - "bitcoin 0.32.6", + "bech32 0.11.1", + "bitcoin 0.32.8", "serde", ] @@ -4371,31 +4099,29 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "moka" -version = "0.12.10" +version = "0.12.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "b4ac832c50ced444ef6be0767a008b02c106a909ba79d1d830501e94b96f6b7e" dependencies = [ "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", - "loom", + "equivalent", "parking_lot", "portable-atomic", - "rustc_version", "smallvec", "tagptr", - "thiserror 1.0.69", "uuid", ] @@ -4422,9 +4148,9 @@ dependencies = [ [[package]] name = "n0-snafu" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4fed465ff57041f29db78a9adc8864296ef93c6c16029f9e192dc303404ebd0" +checksum = "1815107e577a95bfccedb4cfabc73d709c0db6d12de3f14e0f284a8c5036dc4f" dependencies = [ "anyhow", "btparse", @@ -4452,14 +4178,14 @@ checksum = "e664971378a3987224f7a0e10059782035e89899ae403718ee07de85bec42afe" [[package]] name = "nested_enum_utils" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43fa9161ed44d30e9702fe42bd78693bceac0fed02f647da749f36109023d3a3" +checksum = "b1d5475271bdd36a4a2769eac1ef88df0f99428ea43e52dfd8b0ee5cb674695f" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.117", ] [[package]] @@ -4511,7 +4237,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0800eae8638a299eaa67476e1c6b6692922273e0f7939fd188fc861c837b9cd2" dependencies = [ "anyhow", - "bitflags 2.9.1", + "bitflags 2.11.0", "byteorder", "libc", "log", @@ -4542,17 +4268,17 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.12", + "thiserror 2.0.18", ] [[package]] name = "netlink-sys" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae" dependencies = [ "bytes", - "futures", + "futures-util", "libc", "log", "tokio", @@ -4580,14 +4306,14 @@ dependencies = [ "netlink-sys", "serde", "snafu", - "socket2", + "socket2 0.5.10", "time", "tokio", "tokio-util", "tracing", "web-sys", - "windows 0.59.0", - "windows-result", + "windows", + "windows-result 0.3.4", "wmi", ] @@ -4615,23 +4341,17 @@ dependencies = [ "pin-project-lite", "serde", "snafu", - "socket2", + "socket2 0.5.10", "time", "tokio", "tokio-util", "tracing", "web-sys", - "windows 0.59.0", - "windows-result", + "windows", + "windows-result 0.3.4", "wmi", ] -[[package]] -name = "next_tuple" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60993920e071b0c9b66f14e2b32740a4e27ffc82854dcd72035887f336a09a28" - [[package]] name = "no-std-net" version = "0.6.0" @@ -4661,12 +4381,12 @@ dependencies = [ "cbc", "chacha20", "chacha20poly1305", - "getrandom 0.2.16", + "getrandom 0.2.17", "instant", "js-sys", "negentropy", "once_cell", - "reqwest 0.12.22", + "reqwest 0.12.28", "scrypt", "serde", "serde_json", @@ -4762,7 +4482,7 @@ checksum = "c50f94c405726d3e0095e89e72f75ce7f6587b94a8bd8dc8054b73f65c0fd68c" dependencies = [ "base32", "document-features", - "getrandom 0.2.16", + "getrandom 0.2.17", "httpdate", "js-sys", "once_cell", @@ -4771,12 +4491,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "overload", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -4791,19 +4510,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-format" -version = "0.4.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec", - "itoa", -] +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-integer" @@ -4835,9 +4544,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -4845,14 +4554,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -4870,22 +4579,30 @@ dependencies = [ ] [[package]] -name = "object" -version = "0.36.7" +name = "objc2-core-foundation" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "memchr", + "bitflags 2.11.0", ] [[package]] -name = "oco_ref" -version = "0.2.0" +name = "objc2-system-configuration" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b94982fe39a861561cf67ff17a7849f2cedadbbad960a797634032b7abb998" +checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" dependencies = [ - "serde", - "thiserror 1.0.69", + "objc2-core-foundation", +] + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", ] [[package]] @@ -4909,9 +4626,9 @@ dependencies = [ [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "opaque-debug" @@ -4919,18 +4636,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "or_poisoned" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c04f5d74368e4d0dfe06c45c8627c81bd7c317d52762d118fb9b3076f6420fd" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "pairing" version = "0.23.0" @@ -4965,7 +4670,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -4976,9 +4681,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", @@ -4986,15 +4691,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]] @@ -5014,12 +4719,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pathdiff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" - [[package]] name = "pbkdf2" version = "0.12.2" @@ -5032,12 +4731,12 @@ dependencies = [ [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64 0.22.1", - "serde", + "serde_core", ] [[package]] @@ -5051,26 +4750,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.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" dependencies = [ "memchr", - "thiserror 2.0.12", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" dependencies = [ "pest", "pest_generator", @@ -5078,22 +4776,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" dependencies = [ "pest", "sha2", @@ -5111,47 +4809,48 @@ dependencies = [ [[package]] name = "phf" -version = "0.11.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ "phf_shared", + "serde", ] [[package]] name = "phf_shared" -version = "0.11.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" dependencies = [ "siphasher", ] [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -5161,9 +4860,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" dependencies = [ "atomic-waker", "fastrand", @@ -5172,9 +4871,9 @@ dependencies = [ [[package]] name = "pkarr" -version = "3.8.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a50f65a2b97031863fbdff2f085ba832360b4bef3106d1fcff9ab5bf4063fe" +checksum = "5eb1f2f4311bae1da11f930c804c724c9914cf55ae51a9ee0440fc98826984f7" dependencies = [ "async-compat", "base32", @@ -5185,17 +4884,17 @@ dependencies = [ "ed25519-dalek", "futures-buffered", "futures-lite", - "getrandom 0.2.16", + "getrandom 0.2.17", "log", "lru 0.13.0", "mainline", "ntimestamp", - "reqwest 0.12.22", + "reqwest 0.12.28", "self_cell", "serde", "sha1_smol", "simple-dns", - "thiserror 2.0.12", + "thiserror 2.0.18", "tokio", "tracing", "url", @@ -5230,7 +4929,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -5256,16 +4955,16 @@ dependencies = [ [[package]] name = "polling" -version = "3.9.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix", - "windows-sys 0.60.2", + "rustix 1.1.4", + "windows-sys 0.61.2", ] [[package]] @@ -5281,9 +4980,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portmapper" @@ -5307,7 +5006,7 @@ dependencies = [ "serde", "smallvec", "snafu", - "socket2", + "socket2 0.5.10", "time", "tokio", "tokio-util", @@ -5338,7 +5037,7 @@ dependencies = [ "serde", "smallvec", "snafu", - "socket2", + "socket2 0.5.10", "time", "tokio", "tokio-util", @@ -5353,14 +5052,14 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b122a615d72104fb3d8b26523fdf9232cd8ee06949fb37e4ce3ff964d15dffd" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "postcard" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c1de96e20f51df24ca73cafcc4690e044854d803259db27a00a461cb3b9d17a" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" dependencies = [ "cobs", "embedded-io 0.4.0", @@ -5372,13 +5071,13 @@ dependencies = [ [[package]] name = "postcard-derive" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f049d94cb6dda6938cc8a531d2898e7c08d71c6de63d8e67123cca6cdde2cc" +checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -5400,14 +5099,14 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "postgres-protocol" -version = "0.6.8" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54" +checksum = "3ee9dd5fe15055d2b6806f4736aa0c9637217074e224bbec46d4041b91bb9491" dependencies = [ "base64 0.22.1", "byteorder", @@ -5416,30 +5115,30 @@ dependencies = [ "hmac", "md-5", "memchr", - "rand 0.9.1", + "rand 0.9.2", "sha2", "stringprep", ] [[package]] name = "postgres-types" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" +checksum = "54b858f82211e84682fecd373f68e1ceae642d8d751a1ebd13f33de6257b3e20" dependencies = [ "bytes", "chrono", "fallible-iterator 0.2.0", "postgres-protocol", - "serde", + "serde_core", "serde_json", ] [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -5472,9 +5171,9 @@ dependencies = [ [[package]] name = "precis-profiles" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4f67f78f50388f03494794766ba824a704db16fb5d400fe8d545fa7bc0d3f1" +checksum = "31e2768890a47af73a032af9f0cedbddce3c9d06cf8de201d5b8f2436ded7674" dependencies = [ "lazy_static", "precis-core", @@ -5495,19 +5194,19 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.35" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ "toml_edit", ] @@ -5555,57 +5254,32 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.104", -] - -[[package]] -name = "proc-macro-utils" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaf08a13de400bc215877b5bdc088f241b12eb42f0a548d3390dc1c56bb7071" -dependencies = [ - "proc-macro2", - "quote", - "smallvec", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "version_check", - "yansi", -] - [[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", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", - "rustls 0.23.29", - "socket2", - "thiserror 2.0.12", + "rustc-hash 2.1.1", + "rustls 0.23.37", + "socket2 0.6.2", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -5613,20 +5287,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", + "rustc-hash 2.1.1", + "rustls 0.23.37", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -5634,47 +5308,25 @@ 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.2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "quote-use" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9619db1197b497a36178cfc736dc96b271fe918875fbf1344c436a7e93d0321e" -dependencies = [ - "quote", - "quote-use-macros", -] - -[[package]] -name = "quote-use-macros" -version = "0.8.4" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ebfb7faafadc06a7ab141a6f67bcfb24cb8beb158c6fe933f2f035afa99f35" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ - "proc-macro-utils", "proc-macro2", - "quote", - "syn 2.0.104", ] [[package]] @@ -5712,12 +5364,12 @@ 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", + "rand_core 0.9.5", ] [[package]] @@ -5737,7 +5389,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -5746,16 +5398,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -5773,7 +5425,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -5790,115 +5442,48 @@ dependencies = [ ] [[package]] -name = "reactive_graph" -version = "0.2.3" +name = "redox_syscall" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c79f7561c7c246e2c2feab3b0b63502b213e589d7768032bbfc5ea7b267140b9" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "any_spawner", - "async-lock", - "futures", - "guardian", - "hydration_context", - "or_poisoned", - "pin-project-lite", - "rustc-hash", - "rustc_version", - "send_wrapper 0.6.0", - "serde", - "slotmap", - "thiserror 2.0.12", - "web-sys", + "bitflags 2.11.0", ] [[package]] -name = "reactive_stores" -version = "0.2.3" +name = "regex" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edd67f166cfec4ffc6abf271bada268c13dac0b0318f4c6a76a877490d0617a" -dependencies = [ - "dashmap", - "guardian", - "itertools 0.14.0", - "or_poisoned", - "paste", - "reactive_graph", - "reactive_stores_macro", - "rustc-hash", - "send_wrapper 0.6.0", -] - -[[package]] -name = "reactive_stores_macro" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2418b703f385f35481737d8f2ccd9ae3de850dd778bce09817f30338f3cb5ca2" -dependencies = [ - "convert_case 0.8.0", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "redox_syscall" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3a5d9f0aba1dbcec1cc47f0ff94a4b778fe55bca98a6dfa92e4e094e57b1c4" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" 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" +version = "0.4.14" 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" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-lite" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" - -[[package]] -name = "regex-syntax" -version = "0.6.29" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" @@ -5944,20 +5529,20 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.22" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.11", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.1", "hyper-rustls 0.27.7", "hyper-util", "js-sys", @@ -5966,31 +5551,31 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.29", + "rustls 0.23.37", "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", - "tower-http 0.6.6", + "tower-http 0.6.8", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.2", + "webpki-roots 1.0.6", ] [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "ring" @@ -6000,32 +5585,23 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", ] [[package]] -name = "rstml" -version = "0.12.1" +name = "rustc-demangle" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61cf4616de7499fc5164570d40ca4e1b24d231c6833a88bff0fe00725080fd56" -dependencies = [ - "derive-where", - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.104", - "syn_derive", - "thiserror 2.0.12", -] +checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] -name = "rustc-demangle" -version = "0.1.25" +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" @@ -6053,15 +5629,28 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys", - "windows-sys 0.60.2", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.11.0", + "errno", + "libc", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", ] [[package]] @@ -6078,15 +5667,16 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.29" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ + "aws-lc-rs", "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.9", "subtle", "zeroize", ] @@ -6102,9 +5692,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", @@ -6133,10 +5723,11 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -6144,15 +5735,15 @@ 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" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "salsa20" @@ -6163,15 +5754,6 @@ dependencies = [ "cipher", ] -[[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 = "scoped-tls" version = "1.0.1" @@ -6248,7 +5830,7 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "bitcoin_hashes 0.14.0", + "bitcoin_hashes 0.14.1", "rand 0.8.5", "secp256k1-sys 0.10.1", "serde", @@ -6315,15 +5897,15 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" +checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "send_wrapper" @@ -6336,16 +5918,14 @@ name = "send_wrapper" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" -dependencies = [ - "futures-core", -] [[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", ] @@ -6370,65 +5950,57 @@ 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.117", ] [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "indexmap", "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[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", -] - -[[package]] -name = "serde_qs" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3faaf9e727533a19351a43cc5a8de957372163c7d35cc48c90b75cdda13c352" -dependencies = [ - "percent-encoding", - "serde", - "thiserror 2.0.12", -] - -[[package]] -name = "serde_spanned" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" -dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -6453,64 +6025,6 @@ dependencies = [ "serde", ] -[[package]] -name = "server_fn" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27fbd25ecc066481e383e2ed62ab2480e708aa3fe46cba36e95f58e61dfd04" -dependencies = [ - "base64 0.22.1", - "bytes", - "const-str", - "const_format", - "dashmap", - "futures", - "gloo-net", - "http 1.3.1", - "js-sys", - "pin-project-lite", - "rustc_version", - "rustversion", - "send_wrapper 0.6.0", - "serde", - "serde_json", - "serde_qs", - "server_fn_macro_default", - "thiserror 2.0.12", - "throw_error", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "xxhash-rust", -] - -[[package]] -name = "server_fn_macro" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb49d7bd176738e31d6ebb0e821e8dc1ffb0560b0b88f050ac965e67f5fc8315" -dependencies = [ - "const_format", - "convert_case 0.8.0", - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.104", - "xxhash-rust", -] - -[[package]] -name = "server_fn_macro_default" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcd78e5bf1bd14642d2504e6de7942fa73acc40359eb0aae0876ae88d86491b" -dependencies = [ - "server_fn_macro", - "syn 2.0.104", -] - [[package]] name = "sha1" version = "0.10.6" @@ -6566,10 +6080,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -6594,26 +6109,26 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.11.0", ] [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slotmap" -version = "1.0.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "version_check", ] @@ -6626,9 +6141,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "snafu" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320b01e011bf8d5d7a4a4a4be966d9160968935849c83b918827f6a435e7f627" +checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" dependencies = [ "backtrace", "snafu-derive", @@ -6636,14 +6151,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1961e2ef424c1424204d3a5d6975f934f56b6d50ff5732382d84ebf460e147f7" +checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -6656,6 +6171,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "soketto" version = "0.8.1" @@ -6680,6 +6205,12 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spin" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" + [[package]] name = "spki" version = "0.7.3" @@ -6707,9 +6238,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 = "stringprep" @@ -6756,7 +6287,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -6768,7 +6299,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -6792,7 +6323,7 @@ dependencies = [ "precis-core", "precis-profiles", "quoted-string-parser", - "rand 0.9.1", + "rand 0.9.2", ] [[package]] @@ -6803,15 +6334,15 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "surge-ping" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fda78103d8016bb25c331ddc54af634e801806463682cc3e549d335df644d95" +checksum = "30498e9c9feba213c3df6ed675bdf75519ccbee493517e7225305898c86cac05" dependencies = [ "hex", "parking_lot", "pnet_packet", - "rand 0.9.1", - "socket2", + "rand 0.9.2", + "socket2 0.6.2", "thiserror 1.0.69", "tokio", "tracing", @@ -6824,33 +6355,20 @@ 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" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "syn_derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb066a04799e45f5d582e8fc6ec8e6d6896040d00898eb4e6a835196815b219" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "sync_wrapper" version = "0.1.2" @@ -6874,7 +6392,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -6894,7 +6412,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.11.0", "core-foundation", "system-configuration-sys 0.6.0", ] @@ -6919,40 +6437,6 @@ dependencies = [ "libc", ] -[[package]] -name = "tachys" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d706b2ab0fa7e14b878d638faee3dafed08a2ab9ff7f116ad2445cce04bfaaa" -dependencies = [ - "any_spawner", - "async-trait", - "const_str_slice_concat", - "drain_filter_polyfill", - "either_of", - "erased", - "futures", - "html-escape", - "indexmap", - "itertools 0.14.0", - "js-sys", - "linear-map", - "next_tuple", - "oco_ref", - "or_poisoned", - "parking_lot", - "paste", - "reactive_graph", - "reactive_stores", - "rustc-hash", - "rustc_version", - "send_wrapper 0.6.0", - "slotmap", - "throw_error", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "tagptr" version = "0.2.0" @@ -6985,11 +6469,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.18", ] [[package]] @@ -7000,18 +6484,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -7023,42 +6507,33 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "throw_error" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e42a6afdde94f3e656fae18f837cb9bbe500a5ac5de325b09f3ec05b9c28e3" -dependencies = [ - "pin-project-lite", -] - [[package]] name = "time" -version = "0.3.41" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", "js-sys", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -7075,9 +6550,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -7085,9 +6560,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", ] @@ -7100,41 +6575,38 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.46.1" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2", + "socket2 0.6.2", "tokio-macros", "tracing", - "windows-sys 0.52.0", + "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.117", ] [[package]] name = "tokio-postgres" -version = "0.7.13" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0" +checksum = "dcea47c8f71744367793f16c2db1f11cb859d28f436bdb4ca9193eb1f787ee42" dependencies = [ "async-trait", "byteorder", @@ -7149,8 +6621,8 @@ dependencies = [ "pin-project-lite", "postgres-protocol", "postgres-types", - "rand 0.9.1", - "socket2", + "rand 0.9.2", + "socket2 0.6.2", "tokio", "tokio-util", "whoami", @@ -7168,11 +6640,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.37", "tokio", ] @@ -7190,9 +6662,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -7208,26 +6680,25 @@ checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" dependencies = [ "futures-util", "log", - "rustls 0.23.29", + "rustls 0.23.37", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tungstenite", "webpki-roots 0.26.11", ] [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", "futures-util", - "hashbrown 0.15.4", "pin-project-lite", "tokio", ] @@ -7242,71 +6713,53 @@ dependencies = [ "bytes", "futures-core", "futures-sink", - "getrandom 0.3.3", - "http 1.3.1", + "getrandom 0.3.4", + "http 1.4.0", "httparse", - "rand 0.9.1", + "rand 0.9.2", "ring", "rustls-pki-types", "simdutf8", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tokio-util", ] -[[package]] -name = "toml" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0aee96c12fa71097902e0bb061a5e1ebd766a6636bb605ba401c45c1650eac" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime 0.7.0", - "toml_parser", - "winnow", -] - [[package]] name = "toml_datetime" -version = "0.6.11" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" - -[[package]] -name = "toml_datetime" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ - "serde", + "serde_core", ] [[package]] name = "toml_edit" -version = "0.22.27" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", - "toml_datetime 0.6.11", + "toml_datetime", + "toml_parser", "winnow", ] [[package]] name = "toml_parser" -version = "1.0.1" +version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ "winnow", ] [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -7324,9 +6777,9 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.11.0", "bytes", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -7336,14 +6789,14 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.11.0", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "iri-string", "pin-project-lite", @@ -7366,9 +6819,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -7378,20 +6831,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -7420,14 +6873,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -7436,17 +6889,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "tracing-wasm" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" -dependencies = [ - "tracing", - "tracing-subscriber", - "wasm-bindgen", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -7462,37 +6904,17 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 1.3.1", + "http 1.4.0", "httparse", "log", "rand 0.8.5", - "rustls 0.23.29", + "rustls 0.23.37", "rustls-pki-types", "sha1", "thiserror 1.0.69", "utf-8", ] -[[package]] -name = "typed-builder" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce63bcaf7e9806c206f7d7b9c1f38e0dce8bb165a80af0898161058b19248534" -dependencies = [ - "typed-builder-macro", -] - -[[package]] -name = "typed-builder-macro" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d8d828da2a3d759d3519cdf29a5bac49c77d039ad36d0782edadbf9cd5415b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "typeid" version = "1.0.3" @@ -7501,9 +6923,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[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-parse" @@ -7520,24 +6942,6 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" -[[package]] -name = "unic-langid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" -dependencies = [ - "unic-langid-impl", -] - -[[package]] -name = "unic-langid-impl" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" -dependencies = [ - "tinystr", -] - [[package]] name = "unicode-bidi" version = "0.3.18" @@ -7546,30 +6950,24 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" 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" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-xid" @@ -7595,14 +6993,15 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -7611,12 +7010,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf8-width" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -7631,11 +7024,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.4.1", "js-sys", "wasm-bindgen", ] @@ -7648,9 +7041,9 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" +checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" [[package]] name = "version_check" @@ -7658,16 +7051,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[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" @@ -7685,52 +7068,61 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasite" -version = "0.1.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" +checksum = "66fe902b4a6b8028a753d5424909b764ccf79b7a209eac9bf97e59cda9f71a42" +dependencies = [ + "wasi 0.14.7+wasi-0.2.4", +] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" 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" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -7739,9 +7131,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7749,26 +7141,48 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.104", - "wasm-bindgen-backend", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" version = "0.4.2" @@ -7782,11 +7196,23 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -7814,34 +7240,48 @@ 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.6", ] [[package]] name = "webpki-roots" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" dependencies = [ "rustls-pki-types", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.44", +] + [[package]] name = "whoami" -version = "1.6.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +checksum = "d6a5b12f9df4f978d2cfdb1bd3bac52433f44393342d7ee9c25f5a1c14c0f45d" dependencies = [ - "redox_syscall", + "libc", + "libredox", + "objc2-system-configuration", "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" @@ -7861,11 +7301,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]] @@ -7881,29 +7321,7 @@ 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", + "windows-targets 0.53.5", ] [[package]] @@ -7914,33 +7332,22 @@ checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" dependencies = [ "windows-implement 0.59.0", "windows-interface", - "windows-result", + "windows-result 0.3.4", "windows-strings 0.3.1", - "windows-targets 0.53.2", + "windows-targets 0.53.5", ] [[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-implement 0.60.2", "windows-interface", - "windows-link", - "windows-result", - "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", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -7951,29 +7358,29 @@ checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[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.117", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -7983,14 +7390,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] -name = "windows-numerics" -version = "0.2.0" +name = "windows-link" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" -dependencies = [ - "windows-core 0.61.2", - "windows-link", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" @@ -7998,7 +7401,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "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]] @@ -8007,16 +7419,16 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" 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]] @@ -8052,7 +7464,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]] @@ -8088,27 +7509,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", -] - -[[package]] -name = "windows-threading" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" -dependencies = [ - "windows-link", + "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]] @@ -8125,9 +7538,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" @@ -8143,9 +7556,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" @@ -8161,9 +7574,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" @@ -8173,9 +7586,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" @@ -8191,9 +7604,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" @@ -8209,9 +7622,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" @@ -8227,9 +7640,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" @@ -8245,15 +7658,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.12" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -8269,12 +7682,91 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" dependencies = [ - "bitflags 2.9.1", + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", ] [[package]] @@ -8287,16 +7779,16 @@ dependencies = [ "futures", "log", "serde", - "thiserror 2.0.12", - "windows 0.59.0", + "thiserror 2.0.18", + "windows", "windows-core 0.59.0", ] [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "ws_stream_wasm" @@ -8311,7 +7803,7 @@ dependencies = [ "pharos", "rustc_version", "send_wrapper 0.6.0", - "thiserror 2.0.12", + "thiserror 2.0.18", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -8345,9 +7837,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xmltree" @@ -8358,18 +7850,6 @@ dependencies = [ "xml-rs", ] -[[package]] -name = "xxhash-rust" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" - -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - [[package]] name = "yasna" version = "0.5.2" @@ -8381,11 +7861,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -8393,13 +7872,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", "synstructure", ] @@ -8411,22 +7890,22 @@ checksum = "2164e798d9e3d84ee2c91139ace54638059a3b23e361f5c11781c2c6459bde0f" [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] [[package]] @@ -8446,21 +7925,21 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", "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" [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -8469,9 +7948,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -8480,11 +7959,17 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.117", ] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/Cargo.toml b/Cargo.toml index cc15e68..f1897ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,16 +1,16 @@ [workspace] members = [ "fmo_api_types", - "fmo_frontend", "fmo_server", ] resolver = "2" [workspace.dependencies] -fedimint-api-client = { version = "0.8.0-beta.2", git = "https://github.com/elsirion/fedimint", branch = "v0.8-beta.2-patch-xyz" } -fedimint-core = { version = "0.8.0-beta.2", git = "https://github.com/elsirion/fedimint", branch = "v0.8-beta.2-patch-xyz" } -fedimint-ln-common = { version = "0.8.0-beta.2", git = "https://github.com/elsirion/fedimint", branch = "v0.8-beta.2-patch-xyz" } -fedimint-meta-client = { version = "0.8.0-beta.2", git = "https://github.com/elsirion/fedimint", branch = "v0.8-beta.2-patch-xyz" } -fedimint-mint-common = { version = "0.8.0-beta.2", git = "https://github.com/elsirion/fedimint", branch = "v0.8-beta.2-patch-xyz" } -fedimint-wallet-common = { version = "0.8.0-beta.2", git = "https://github.com/elsirion/fedimint", branch = "v0.8-beta.2-patch-xyz" } +fedimint-api-client = { version = "0.10.0", git = "https://github.com/fedimint/fedimint", tag = "v0.10.0" } +fedimint-connectors = { version = "0.10.0", git = "https://github.com/fedimint/fedimint", tag = "v0.10.0" } +fedimint-core = { version = "0.10.0", git = "https://github.com/fedimint/fedimint", tag = "v0.10.0" } +fedimint-ln-common = { version = "0.10.0", git = "https://github.com/fedimint/fedimint", tag = "v0.10.0" } +fedimint-meta-client = { version = "0.10.0", git = "https://github.com/fedimint/fedimint", tag = "v0.10.0" } +fedimint-mint-common = { version = "0.10.0", git = "https://github.com/fedimint/fedimint", tag = "v0.10.0" } +fedimint-wallet-common = { version = "0.10.0", git = "https://github.com/fedimint/fedimint", tag = "v0.10.0" } diff --git a/README.md b/README.md index 1127c01..ac9a01a 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,8 @@ These APIs live under the `/federations` path, you can find all the endpoints in One example is the [`/federations`](https://observer.fedimint.org/api/federations) endpoint itself that returns a list of all federations that are being observed. -This API is also the data source for the frontend that powers https://observer.fedimint.org and is also hosted in this -repository in the `fmo_frontend` directory. The frontend is a Leptos PWA, so is fully written in Rust and compiled to -WASM. It uses [Tailwind](https://tailwindcss.com/) and [Flowbite](https://flowbite.com/) for styling. +This API is also the data source for the frontend that powers https://observer.fedimint.org. The frontend is hosted in +the `fmo_frontend_react` directory and is built with React and TypeScript. When it comes to stability guarantees the Postgres database should always be migratable backwards-compatibly, so we don't lose historic data. The API under `/federations` isn't stable at this point and I'd recommend to subscribing to @@ -40,7 +39,6 @@ In there you can run a variety of `just` commands (to be called as `just - - - - - - - - - - - - - - - - diff --git a/fmo_frontend/package-lock.json b/fmo_frontend/package-lock.json deleted file mode 100644 index 9481745..0000000 --- a/fmo_frontend/package-lock.json +++ /dev/null @@ -1,1003 +0,0 @@ -{ - "name": "webimint-rs", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "devDependencies": { - "@tailwindcss/forms": "^0.5.4", - "tailwindcss": "^3.3.3" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@tailwindcss/forms": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.4.tgz", - "integrity": "sha512-YAm12D3R7/9Mh4jFbYSMnsd6jG++8KxogWgqs7hbdo/86aWjjlIEvL7+QYdVELmAI0InXTpZqFIg5e7aDVWI2Q==", - "dev": true, - "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true, - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", - "dev": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - } - } -} diff --git a/fmo_frontend/package.json b/fmo_frontend/package.json deleted file mode 100644 index 67f7d66..0000000 --- a/fmo_frontend/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "COMMENT": "Package.json is needed to install dependencies of Tailwind only", - "devDependencies": { - "tailwindcss": "^3.3.3" - } -} diff --git a/fmo_frontend/src/components/alert.rs b/fmo_frontend/src/components/alert.rs deleted file mode 100644 index 825ad8b..0000000 --- a/fmo_frontend/src/components/alert.rs +++ /dev/null @@ -1,41 +0,0 @@ -use leptos::prelude::*; - -#[component] -pub fn Alert( - #[prop(into, optional)] title: Option, - #[prop(into)] message: String, - level: AlertLevel, - #[prop(into, optional)] class: String, -) -> impl IntoView { - let style = match level { - AlertLevel::Info => "p-4 mb-4 text-sm text-blue-800 rounded-lg bg-blue-50 dark:bg-gray-800 dark:text-blue-400", - AlertLevel::Warning => "p-4 mb-4 text-sm text-yellow-800 rounded-lg bg-yellow-50 dark:bg-gray-800 dark:text-yellow-300", - AlertLevel::Error => "p-4 mb-4 text-sm text-red-800 rounded-lg bg-red-50 dark:bg-gray-800 dark:text-red-400", - AlertLevel::Success => "p-4 mb-4 text-sm text-green-800 rounded-lg bg-green-50 dark:bg-gray-800 dark:text-green-400", - }; - - let class = format!("{} {}", style, class); - - let title = title.unwrap_or_else(|| match level { - AlertLevel::Info => "Info: ".to_string(), - AlertLevel::Warning => "Warning: ".to_string(), - AlertLevel::Error => "Error: ".to_string(), - AlertLevel::Success => "Success: ".to_string(), - }); - - view! { - - } -} - -#[allow(dead_code)] -#[derive(Debug, Clone, Copy)] -pub enum AlertLevel { - Info, - Warning, - Error, - Success, -} diff --git a/fmo_frontend/src/components/badge.rs b/fmo_frontend/src/components/badge.rs deleted file mode 100644 index d953f91..0000000 --- a/fmo_frontend/src/components/badge.rs +++ /dev/null @@ -1,40 +0,0 @@ -use leptos::either::Either; -use leptos::prelude::*; - -#[component] -pub fn Badge( - level: BadgeLevel, - #[prop(default = None)] tooltip: Option, - children: Children, -) -> impl IntoView { - let style = match level { - BadgeLevel::Info => "bg-blue-100 text-blue-800 text-xs font-medium me-2 px-2.5 py-0.5 rounded dark:bg-blue-900 dark:text-blue-300", - BadgeLevel::Warning => "bg-yellow-100 text-yellow-800 text-xs font-medium me-2 px-2.5 py-0.5 rounded dark:bg-yellow-900 dark:text-yellow-300", - BadgeLevel::Error => "bg-red-100 text-red-800 text-xs font-medium me-2 px-2.5 py-0.5 rounded dark:bg-red-900 dark:text-red-300", - BadgeLevel::Success => "bg-green-100 text-green-800 text-xs font-medium me-2 px-2.5 py-0.5 rounded dark:bg-green-900 dark:text-green-300", - }; - - match tooltip { - Some(tooltip_str) => Either::Left(view! { - - - { children() } - - - }), - None => Either::Right(view! { - - { children() } - - }), - } -} - -#[allow(dead_code)] -#[derive(Debug, Clone, Copy)] -pub enum BadgeLevel { - Info, - Warning, - Error, - Success, -} diff --git a/fmo_frontend/src/components/button.rs b/fmo_frontend/src/components/button.rs deleted file mode 100644 index 95e0ae3..0000000 --- a/fmo_frontend/src/components/button.rs +++ /dev/null @@ -1,64 +0,0 @@ -use std::borrow::Cow; - -use leptos::prelude::*; - -#[component] -pub fn Button( - #[prop(default = PRIMARY_BUTTON)] color_scheme: ButtonColors, - #[prop(into, optional)] class: String, - on_click: F, - #[prop(into, optional)] disabled: Signal, - children: Children, -) -> impl IntoView { - const COMMON: &str = "whitespace-nowrap font-medium rounded-lg text-sm px-5"; - - let class = move || { - let color_scheme_class = if disabled.get() { - &color_scheme.disabled - } else { - &color_scheme.enabled - }; - - format!("{} {} {}", COMMON, color_scheme_class, class) - }; - - view! { - - } -} - -pub const PRIMARY_BUTTON: ButtonColors = ButtonColors::new( - "text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800", - "text-white bg-blue-400 dark:bg-blue-500 cursor-not-allowed font-medium rounded-lg" -); -pub const SECONDARY_BUTTON: ButtonColors = ButtonColors::new( - "text-gray-900 focus:outline-none bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700", - "text-gray-400 dark:text-gray-600 cursor-not-allowed" - -); -pub const SUCCESS_BUTTON: ButtonColors = ButtonColors::new( - "text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 dark:bg-green-600 dark:hover:bg-green-700 focus:outline-none", - "text-white bg-green-400 dark:bg-green-500 cursor-not-allowed font-medium rounded-lg" -); - -#[derive(Debug, Clone)] -pub struct ButtonColors { - enabled: Cow<'static, str>, - disabled: Cow<'static, str>, -} - -impl ButtonColors { - pub const fn new(enabled: &'static str, disabled: &'static str) -> Self { - Self { - enabled: Cow::Borrowed(enabled), - disabled: Cow::Borrowed(disabled), - } - } -} diff --git a/fmo_frontend/src/components/copyable.rs b/fmo_frontend/src/components/copyable.rs deleted file mode 100644 index 1a73b96..0000000 --- a/fmo_frontend/src/components/copyable.rs +++ /dev/null @@ -1,40 +0,0 @@ -use leptos::prelude::*; -use web_sys::window; - -// TODO: on_success/on_failure callbacks -#[component] -pub fn Copyable(text: String) -> impl IntoView { - let text_inner = text.clone(); - let copy_action = move |_| { - if let Some(clipboard) = window().map(|w| w.navigator().clipboard()) { - let _ = clipboard.write_text(&text_inner); - } else { - // handle the lack of clipboard! - } - }; - - view! { - - - } -} diff --git a/fmo_frontend/src/components/federation/activity.rs b/fmo_frontend/src/components/federation/activity.rs deleted file mode 100644 index b66db37..0000000 --- a/fmo_frontend/src/components/federation/activity.rs +++ /dev/null @@ -1,214 +0,0 @@ -use std::collections::BTreeMap; -use std::fmt::Display; -use std::ops::Mul; -use std::str::FromStr; - -use chrono::{DateTime, NaiveDate, NaiveDateTime, Utc}; -use fedimint_core::config::FederationId; -use fedimint_core::Amount; -use fmo_api_types::FederationActivity; -use itertools::Itertools; -use leptos::prelude::*; - -use super::chart::TimeLineChart; -use crate::components::alert::{Alert, AlertLevel}; -use crate::util::AsBitcoin; - -#[component] -pub fn ActivityChart(id: FederationId) -> impl IntoView { - let history_resource = LocalResource::new(move || async move { - fetch_federation_history(id) - .await - .map_err(|e| e.to_string()) - }); - - view! { - {move || { - match history_resource.get() { - Some(Ok(history)) => view! { }.into_any(), - Some(Err(e)) => view! {

"Error: " {e}

}.into_any(), - None => view! {

"Loading ..."

}.into_any(), - } - }} - } -} - -#[component] -pub fn ChartInner(data: BTreeMap) -> impl IntoView { - let (total_volume, volumes_btc) = { - let total = Amount::from_msats( - data.values() - .map(|data| data.amount_transferred.msats) - .sum::(), - ); - let volumes_btc = data - .iter() - .map(|(date, data)| { - ( - NaiveDateTime::from(*date).and_utc(), - data.amount_transferred.msats as f64 / 100_000_000_000.0, - ) - }) - .collect::>(); - - (total, volumes_btc) - }; - - let (total_transactions, transactions) = { - let total = data.values().map(|data| data.num_transactions).sum::(); - let transactions = data - .iter() - .map(|(date, data)| { - ( - NaiveDateTime::from(*date).and_utc(), - data.num_transactions as f64, - ) - }) - .collect::>(); - (total, transactions) - }; - - let (chart_type, set_chart_type) = signal(ChartType::Volume); - let (filter_outliers, set_filter_outliers) = signal(true); - - let chart_name_signal = RwSignal::new("".to_owned()); - Effect::new(move |_| { - let chart_name = match chart_type.get() { - ChartType::Volume => "Daily Volume", - ChartType::Transactions => "Daily Transactions", - } - .to_owned(); - - chart_name_signal.set(chart_name); - }); - - let chart_data = move || match chart_type.get() { - ChartType::Volume if filter_outliers.get() => remove_outliers(volumes_btc.clone()), - ChartType::Volume => volumes_btc.clone(), - ChartType::Transactions => transactions.clone(), - }; - - view! { - -
-
-
-
- {move || { - match chart_type.get() { - ChartType::Volume => total_volume.as_bitcoin(6).to_string(), - ChartType::Transactions => total_transactions.to_string(), - } - }} - -
-

- {move || { - match chart_type.get() { - ChartType::Volume => "Total Volume", - ChartType::Transactions => "Total Transactions", - } - }} - -

-
- -
- - -
-
-
- -
-
- - - -
- } -} - -async fn fetch_federation_history( - federation_id: FederationId, -) -> Result, String> { - let url = format!( - "{}/federations/{}/transactions/histogram", - crate::BASE_URL, - federation_id - ); - let res = reqwest::get(&url).await.map_err(|e| e.to_string())?; - let json = res.json().await.map_err(|e| e.to_string())?; - Ok(json) -} - -#[derive(Debug, Clone, Copy, PartialEq)] -enum ChartType { - Volume, - Transactions, -} - -impl FromStr for ChartType { - type Err = (); - - fn from_str(s: &str) -> Result { - match s { - "Volume" => Ok(Self::Volume), - "Transactions" => Ok(Self::Transactions), - _ => Err(()), - } - } -} - -impl Display for ChartType { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::Volume => write!(f, "Volume"), - Self::Transactions => write!(f, "Transactions"), - } - } -} - -fn remove_outliers(data: Vec<(DateTime, T)>) -> Vec<(DateTime, T)> -where - T: Copy + PartialOrd + Mul + From, -{ - let percentile_95 = data - .iter() - .map(|(_, val)| *val) - .sorted_by(|a, b| a.partial_cmp(b).expect("No NaNs expected")) - .collect::>()[data.len() * 95 / 100]; - - data.into_iter() - .filter(|(_, val)| *val < percentile_95 * T::from(10u8)) - .collect() -} diff --git a/fmo_frontend/src/components/federation/chart.rs b/fmo_frontend/src/components/federation/chart.rs deleted file mode 100644 index ffc42af..0000000 --- a/fmo_frontend/src/components/federation/chart.rs +++ /dev/null @@ -1,59 +0,0 @@ -use chrono::{DateTime, Utc}; -use leptos::prelude::*; -use leptos_chartistry::{ - AspectRatio, AxisMarker, Chart, Interpolation, IntoInner, Line, Period, RotatedLabel, Series, - TickLabels, Timestamps, Tooltip, XGridLine, XGuideLine, YGridLine, YGuideLine, -}; -use leptos_use::use_preferred_dark; - -#[component] -pub fn TimeLineChart( - #[prop(into)] name: RwSignal, - #[prop(into)] data: Signal, f64)>>, -) -> impl IntoView { - let prefers_dark = use_preferred_dark(); - - let line = { - let mut line = Line::new(|data: &(DateTime, f64)| data.1) - .with_interpolation(Interpolation::Linear); - line.name = name; - line - }; - - let top_label = { - let mut label = RotatedLabel::middle(""); - label.text = name; - label - }; - - view! { -
- , f64)| data.0).line(line) - data=data - /> -
- } -} diff --git a/fmo_frontend/src/components/federation/general.rs b/fmo_frontend/src/components/federation/general.rs deleted file mode 100644 index 6393267..0000000 --- a/fmo_frontend/src/components/federation/general.rs +++ /dev/null @@ -1,105 +0,0 @@ -use fedimint_core::config::JsonClientConfig; -use leptos::prelude::*; - -#[component] -pub fn General(config: JsonClientConfig) -> impl IntoView { - let module_badges = get_modules(&config).into_iter().map(|module| { - view! { - - {module} - - } - }).collect::>(); - - view! { -
-
-
- Federation -
-
-
-
- - - - - - - - - - - - - - - -
- Network - {get_network(&config)}
- Modules - {module_badges}
- Confirmations -
- Required -
{get_confirmations_required(&config)}
-
-
-
- } -} - -fn get_network(cfg: &JsonClientConfig) -> String { - // TODO: don't assume so much - cfg.modules - .iter() - .find_map(|(_, m)| { - if m.kind().as_str() != "wallet" { - return None; - } - - Some( - m.value()["network"] - .as_str() - .expect("Network is of type string") - .to_owned(), - ) - }) - .expect("Wallet module is expected to be present") -} - -fn get_modules(cfg: &JsonClientConfig) -> Vec { - cfg.modules - .values() - .map(|m| m.kind().as_str().to_owned()) - .collect() -} - -fn get_confirmations_required(cfg: &JsonClientConfig) -> u64 { - // TODO: don't assume so much - cfg.modules - .iter() - .find_map(|(_, m)| { - if m.kind().as_str() != "wallet" { - return None; - } - - Some( - m.value()["finality_delay"] - .as_u64() - .expect("finality_delay is of type integer") - + 1, - ) - }) - .expect("Wallet module is expected to be present") -} diff --git a/fmo_frontend/src/components/federation/guardians.rs b/fmo_frontend/src/components/federation/guardians.rs deleted file mode 100644 index ecd6e66..0000000 --- a/fmo_frontend/src/components/federation/guardians.rs +++ /dev/null @@ -1,137 +0,0 @@ -use std::collections::BTreeMap; - -use fedimint_core::config::FederationId; -use fedimint_core::util::backoff_util::background_backoff; -use fedimint_core::util::retry; -use fedimint_core::{NumPeers, PeerId}; -use fmo_api_types::GuardianHealth; -use leptos::prelude::*; - -use crate::components::badge::{Badge, BadgeLevel}; -use crate::BASE_URL; - -#[component] -pub fn Guardians(federation_id: FederationId, guardians: Vec) -> impl IntoView { - let n = guardians.len(); - let t = NumPeers::from(n).threshold(); - - let health_resource = - LocalResource::new(move || async move { fetch_guardian_health(federation_id).await }); - - let warn_if_true = |warn| { - if warn { - BadgeLevel::Warning - } else { - BadgeLevel::Success - } - }; - - let guardians = guardians - .into_iter() - .enumerate() - .map(|(guardian_idx, guardian)| { - view! { -
  • -
    -
    -

    - {guardian.name} -

    -

    - {guardian.url} -

    -

    - { move || match health_resource.get() { - Some(health) => { - let health = health.get(&PeerId::from(guardian_idx as u16)).expect("Guardian exists").clone(); - - let mut badges = vec![]; - if let Some(latest) = health.latest { - badges.push(view! { - - Online - - }.into_view()); - - badges.push(view! { - - {format!("Session {}", latest.session_count)} - - }.into_view()); - - badges.push(view! { - - {format!("Block {}", latest.block_height - 1)} - - }.into_view()); - } else { - badges.push(view! { - - Offline - - }.into_view()); - } - - view! { {badges} }.into_any() - } - None => { - view! { - - "Loading" - - }.into_any() - } - }} -

    -
    -
    -
  • - } - }) - .collect::>(); - - view! { -
    -
    -
    - Guardians -
    -

    - {format!("{} of {} Federation", t, n)} -

    -
    -
    -
      - {guardians} -
    -
    -
    - } -} - -pub struct Guardian { - pub name: String, - pub url: String, -} - -async fn fetch_guardian_health(id: FederationId) -> BTreeMap { - retry( - "fetching guardian health", - background_backoff(), - || async move { - reqwest::get(format!("{}/federations/{}/health", BASE_URL, id)) - .await? - .json::>() - .await - .map_err(Into::into) - }, - ) - .await - .expect("Will never return Err") -} diff --git a/fmo_frontend/src/components/federation/mod.rs b/fmo_frontend/src/components/federation/mod.rs deleted file mode 100644 index b14a480..0000000 --- a/fmo_frontend/src/components/federation/mod.rs +++ /dev/null @@ -1,172 +0,0 @@ -mod activity; -mod chart; -mod general; -mod guardians; -pub mod nostr_vote; -pub mod stars_selector; -mod utxos; - -use std::collections::BTreeMap; -use std::str::FromStr; - -use fedimint_core::config::{FederationId, JsonClientConfig}; -use leptos::prelude::*; -use leptos_meta::Title; -use leptos_router::hooks::use_params; -use leptos_router::params::{Params, ParamsError, ParamsMap}; -use utxos::Utxos; - -use crate::components::federation::activity::ActivityChart; -use crate::components::federation::general::General; -use crate::components::federation::guardians::{Guardian, Guardians}; -use crate::components::federation::nostr_vote::NostrVote; -use crate::components::tabs::{Tab, Tabs}; -use crate::BASE_URL; - -#[component] -pub fn Federation() -> impl IntoView { - let id = move || { - let params = use_params::(); - params.with(|params| params.as_ref().map(|params| params.id).ok()) - }; - - let config_resource = LocalResource::new(move || async move { - match id() { - Some(id) => { - let config = fetch_federation_config(id) - .await - .map_err(|e| e.to_string())?; - Result::<_, String>::Ok(config) - } - None => Err("No federation id".to_owned()), - } - }); - - let meta_resource = LocalResource::new(move || async move { - match id() { - Some(id) => { - let meta = fetch_federation_meta(id).await.map_err(|e| e.to_string())?; - Result::<_, String>::Ok(meta) - } - None => Err("No federation id".to_owned()), - } - }); - - view! { - Invalid federation id

    } - } - > - { - meta.get("federation_name") - .and_then(|name| name.as_str()) - .map(|name| name.to_owned()) - .unwrap_or_else(|| id().unwrap().to_string()) - } - _ => "Fedimint Observer".to_owned(), - } - } - /> - <div> - <h2 class="text-4xl my-8 font-extrabold dark:text-white truncate"> - {move || { - match meta_resource.get() { - Some(Ok(meta)) => { - meta.get("federation_name") - .and_then(|name| name.as_str()) - .map(|name| name.to_owned()) - .unwrap_or_else(|| id().unwrap().to_string()) - } - Some(Err(e)) => format!("Error: {}", e), - None => "Loading ...".to_owned(), - } - }} - </h2> - {move || { - match config_resource.get() { - Some(Ok(config)) => { - view! { - <div class="flex flex-wrap items-stretch gap-4 "> - <div class="flex-1 min-w-[400px]"> - <Guardians - federation_id=id().unwrap() - guardians=config - .global - .api_endpoints.values().map(|guardian| Guardian { - name: guardian.name.clone(), - url: guardian.url.to_string(), - }) - .collect() - /> - </div> - <div class="flex-1 min-w-[400px]"> - <General config=config.clone() /> - <div class="h-4" /> - <NostrVote config=config.clone() /> - </div> - </div> - <Tabs default="Activity"> - <Tab name="Activity"> - <ActivityChart id=id().unwrap()/> - </Tab> - <Tab name="UTXOs"> - <Utxos federation_id=id().unwrap()/> - </Tab> - <Tab name="Config"> - <div class="w-full overflow-x-scroll my-4"> - <pre class="dark:text-white"> - {serde_json::to_string_pretty(&config) - .expect("can be encoded")} - </pre> - </div> - </Tab> - </Tabs> - } - .into_any() - } - Some(Err(e)) => view! { <p>{format!("Error: {}", e)}</p> }.into_any(), - None => view! { <p>"Loading..."</p> }.into_any(), - } - }} - - </div> - </Show> - } -} - -#[derive(Debug, Clone, PartialEq, Eq)] -struct FederationParams { - id: FederationId, -} - -impl Params for FederationParams { - fn from_map(map: &ParamsMap) -> Result<Self, ParamsError> { - map.get("id") - .and_then(|id| FederationId::from_str(id.as_str()).ok()) - .map(|id| FederationParams { id }) - .ok_or_else(|| ParamsError::MissingParam("id".into())) - } -} - -async fn fetch_federation_config(id: FederationId) -> Result<JsonClientConfig, anyhow::Error> { - reqwest::get(format!("{}/federations/{}/config", BASE_URL, id)) - .await? - .json() - .await - .map_err(Into::into) -} - -async fn fetch_federation_meta( - id: FederationId, -) -> Result<BTreeMap<String, serde_json::Value>, anyhow::Error> { - reqwest::get(format!("{}/federations/{}/meta", BASE_URL, id)) - .await? - .json() - .await - .map_err(Into::into) -} diff --git a/fmo_frontend/src/components/federation/nostr_vote.rs b/fmo_frontend/src/components/federation/nostr_vote.rs deleted file mode 100644 index 4ef864b..0000000 --- a/fmo_frontend/src/components/federation/nostr_vote.rs +++ /dev/null @@ -1,157 +0,0 @@ -use anyhow::ensure; -use fedimint_core::config::{FederationId, JsonClientConfig}; -use leptos::prelude::*; -use nostr_sdk::{EventBuilder, Kind, SingleLetterTag, Tag, TagKind}; -use reqwest::StatusCode; - -use crate::components::alert::{Alert, AlertLevel}; -use crate::components::federation::stars_selector::StarsSelector; -use crate::BASE_URL; - -#[component] -pub fn NostrVote(config: JsonClientConfig) -> impl IntoView { - let federation_id = config.global.calculate_federation_id(); - - let (in_progress, set_in_progress) = signal(false); - let sign_rating_action = Action::<(u8, String), std::result::Result<(), String>>::new_local( - move |(rating, comment): &(u8, String)| { - let comment_inner = comment.clone(); - let rating_inner = *rating; - async move { - let res = sign_and_publish_rating(federation_id, rating_inner, &comment_inner) - .await - .map_err(|e| e.to_string()); - set_in_progress.set(false); - res - } - }, - ); - - let (rating, set_rating) = signal(5u8); - let (comment, st_comment) = signal("".to_owned()); - view! { - <div class="w-full p-4 bg-white border border-gray-200 rounded-lg shadow sm:p-8 dark:bg-gray-800 dark:border-gray-700"> - <div class="flex items-center justify-between mb-4"> - <h5 class="text-xl font-bold leading-none text-gray-900 dark:text-white"> - Recommend - </h5> - </div> - <div class="flow-root"> - <div class="relative overflow-x-auto"> - <form - on:submit=move |ev| { - ev.prevent_default(); - set_in_progress.set(true); - sign_rating_action.dispatch((rating.get(), comment.get())); - } - > - { move || { - match sign_rating_action.value().get() { - Some(Ok(())) => { - view! { - <Alert - level=AlertLevel::Success - message="Your recommendation was published!" - /> - }.into_any() - }, - Some(Err(e)) => { - view! { - <Alert - level=AlertLevel::Error - message=e - /> - }.into_any() - }, - None => { - view! { <div style="display: none;"><Alert message="" level=AlertLevel::Info /></div> }.into_any() - } - } - }} - <div class="mb-6"> - <div> - <StarsSelector - default_value=5 - selected_stars=set_rating - /> - <span class="mx-4 inline-block text-xl dark:text-white"> - {move || {rating.get()}} "/5" - </span> - </div> - </div> - <div class="mb-6"> - <input - class="block w-full p-4 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 text-base focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" - type="text" - placeholder="Comment" - on:input=move |ev| { - st_comment.set(event_target_value(&ev)); - } - prop:value=comment - /> - </div> - { move || { - let is_disabled = in_progress.get(); - view! { - <input - type="submit" - value="Rate" - disabled=is_disabled - class=move || if is_disabled { - "text-white bg-blue-400 dark:bg-blue-500 cursor-not-allowed font-medium rounded-lg text-sm px-5 py-2.5 text-center" - } else { - "text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800" - } - /> - } - }} - </form> - </div> - </div> - </div> - } -} - -async fn sign_and_publish_rating( - federation_id: FederationId, - rating: u8, - comment: &str, -) -> anyhow::Result<()> { - let signer = nostr_sdk::nostr::nips::nip07::Nip07Signer::new()?; - - let tags = vec![ - Tag::custom( - TagKind::SingleLetter(SingleLetterTag::from_char('d').unwrap()), - [federation_id.to_string()], - ), - Tag::custom( - TagKind::SingleLetter(SingleLetterTag::from_char('n').unwrap()), - ["mainnet"], - ), - Tag::custom( - TagKind::SingleLetter(SingleLetterTag::from_char('k').unwrap()), - ["38173"], - ), - ]; - let unsigned_event = - EventBuilder::new(Kind::Custom(38000), format!("[{rating}/5] {comment}"), tags) - .to_unsigned_event(signer.get_public_key().await?); - - let event = signer.sign_event(unsigned_event).await?; - - let client = reqwest::Client::new(); - let response = client - .put(format!("{}/federations/nostr/rating", BASE_URL)) - .json(&event) - .send() - .await?; - - let status = response.status(); - ensure!( - status == StatusCode::OK, - "Unexpected status code {}", - status - ); - - Ok(()) -} diff --git a/fmo_frontend/src/components/federation/utxos.rs b/fmo_frontend/src/components/federation/utxos.rs deleted file mode 100644 index 00338bd..0000000 --- a/fmo_frontend/src/components/federation/utxos.rs +++ /dev/null @@ -1,86 +0,0 @@ -use fedimint_core::config::FederationId; -use fmo_api_types::FederationUtxo; -use leptos::prelude::*; - -use crate::components::alert::{Alert, AlertLevel}; -use crate::util::AsBitcoin; - -#[component] -pub fn Utxos(federation_id: FederationId) -> impl IntoView { - let utxo_resource = LocalResource::new(move || fetch_federation_utxos(federation_id)); - - view! { - {move || { - match utxo_resource.get() { - Some(Ok(utxos)) => { - let rows = utxos - .iter() - .map(|utxo| { - view! { - <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"> - <td class="px-6 py-4"> - <a - href=format!( - "https://mempool.space/address/{}", - utxo.address.clone().assume_checked().to_string(), - ) - - class="text-blue-600 underline dark:text-blue-500 hover:no-underline" - > - <pre> - <span class="truncate flex-shrink min-w-0"> - {utxo.out_point.txid.to_string()} - </span> - <span class="flex-shrink-0"> - ":" {utxo.out_point.vout.to_string()} - </span> - </pre> - </a> - </td> - <td class="px-6 py-4"> - {utxo.amount.as_bitcoin(8).to_string()} - </td> - </tr> - } - }) - .collect_view(); - view! { - <div> - <Alert - message="The UTXO view is reconstructed from a combination of the public federation log and on-chain transactions, hence unconfirmed change UTXOs may be missing." - level=AlertLevel::Info - class="my-4" - /> - <table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400"> - <thead class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400"> - <tr> - <th scope="col" class="px-6 py-3"> - "UTXOs (" - {utxos.len()} - " total)" - </th> - <th scope="col" class="px-6 py-3"> - Amount - </th> - </tr> - </thead> - <tbody>{rows}</tbody> - </table> - </div> - }.into_any() - }, - Some(Err(e)) => view! { <p>"Error: " {e}</p> }.into_any(), - None => view! { <p>"Loading ..."</p> }.into_any(), - } - }} - } -} - -async fn fetch_federation_utxos( - federation_id: FederationId, -) -> Result<Vec<FederationUtxo>, String> { - let url = format!("{}/federations/{}/utxos", crate::BASE_URL, federation_id); - let res = reqwest::get(&url).await.map_err(|e| e.to_string())?; - let json = res.json().await.map_err(|e| e.to_string())?; - Ok(json) -} diff --git a/fmo_frontend/src/components/federations/federation_row.rs b/fmo_frontend/src/components/federations/federation_row.rs deleted file mode 100644 index 4037720..0000000 --- a/fmo_frontend/src/components/federations/federation_row.rs +++ /dev/null @@ -1,73 +0,0 @@ -use fedimint_core::config::FederationId; -use fedimint_core::Amount; -use fmo_api_types::{FederationHealth, FederationRating}; -use leptos::either::Either; -use leptos::prelude::*; - -use crate::components::badge::{Badge, BadgeLevel}; -use crate::components::federations::rating::Rating; -use crate::components::Copyable; -use crate::util::AsBitcoin; - -#[component] -pub fn FederationRow( - id: FederationId, - name: String, - rating: FederationRating, - invite: String, - total_assets: Amount, - avg_txs: f64, - avg_volume: Amount, - health: FederationHealth, -) -> impl IntoView { - view! { - <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"> - <th - scope="row" - class="px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white" - > - <a - href=format!("/federations/{id}") - class="font-medium text-blue-600 dark:text-blue-500 hover:underline" - > - {name} - </a> - </th> - <td> - <Rating - count=rating.count - rating=rating.avg - /> - </td> - <td class="px-6 py-4"> - { match health { - FederationHealth::Online => { - Either::Left(view! { <Copyable text=invite/> }) - }, - FederationHealth::Degraded => { - Either::Right(view! { - <Badge level=BadgeLevel::Warning> - "Degraded" - </Badge> - }) - } - FederationHealth::Offline => { - Either::Right(view! { - <Badge level=BadgeLevel::Error> - "Offline" - </Badge> - }) - }, - }} - </td> - <td class="px-6 py-4">{total_assets.as_bitcoin(6).to_string()}</td> - <td class="px-6 py-4"> - <ul> - <li>{format!("#tx: {:.1}", avg_txs)}</li> - <li>{format!("volume: {}", avg_volume.as_bitcoin(6))}</li> - </ul> - </td> - </tr> - } - .into_view() -} diff --git a/fmo_frontend/src/components/federations/mod.rs b/fmo_frontend/src/components/federations/mod.rs deleted file mode 100644 index 615d9af..0000000 --- a/fmo_frontend/src/components/federations/mod.rs +++ /dev/null @@ -1,201 +0,0 @@ -mod federation_row; -pub mod rating; -mod totals; - -use fedimint_core::Amount; -use fmo_api_types::{FederationHealth, FederationSummary}; -use itertools::Itertools; -use leptos::prelude::*; -use leptos_meta::Title; - -use crate::components::federations::federation_row::FederationRow; -use crate::components::federations::totals::Totals; -use crate::BASE_URL; - -#[component] -pub fn Federations() -> impl IntoView { - let federations_res = - LocalResource::new(|| async { fetch_federations().await.map_err(|e| e.to_string()) }); - - fn to_row((summary, avg_txs, avg_volume): (FederationSummary, f64, Amount)) -> impl IntoView { - view! { - <FederationRow - id=summary.id - name=summary.name.clone().unwrap_or_else(|| "Unnamed".to_owned()) - rating=summary.nostr_votes - invite=summary.invite.clone() - total_assets=summary.deposits - avg_txs=avg_txs - avg_volume=avg_volume - health=summary.health - /> - } - } - - let active_rows = move || { - Some( - federations_res - .get()? - .ok()? - .into_iter() - .filter(|(summary, _, _)| summary.health != FederationHealth::Offline) - .map(to_row) - .collect::<Vec<_>>(), - ) - }; - let inactive_rows = move || { - Some( - federations_res - .get()? - .ok()? - .into_iter() - .filter(|(summary, _, _)| summary.health == FederationHealth::Offline) - .map(to_row) - .collect::<Vec<_>>(), - ) - }; - - let (collapse_offline, set_collapse_offline) = signal(true); - - view! { - <Title - text="Fedimint Observer" - /> - <div class="my-16"> - <Totals/> - </div> - <div class="relative overflow-x-auto shadow-md sm:rounded-lg"> - <table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400"> - <caption class="p-5 text-lg font-semibold text-left rtl:text-right text-gray-900 bg-white dark:text-white dark:bg-gray-800"> - "Observed Federations" - <p class="mt-1 text-sm font-normal text-gray-500 dark:text-gray-400"> - "List of all active federations this instance is collecting statistics on" - </p> - </caption> - <thead class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400"> - <tr> - <th scope="col" class="px-6 py-3"> - "Name" - </th> - <th scope="col" class="px-6 py-3"> - <a - href="https://github.com/nostr-protocol/nips/pull/1110" - class="underline hover:no-underline" - > - "Recommendations" - </a> - </th> - <th scope="col" class="px-6 py-3"> - "Invite Code" - </th> - <th scope="col" class="px-6 py-3"> - "Total Assets" - </th> - <th scope="col" class="px-6 py-3"> - "Average Activity (7d)" - </th> - </tr> - </thead> - <tbody>{active_rows}</tbody> - </table> - </div> - <div class="relative overflow-x-auto shadow-md sm:rounded-lg mt-6"> - <table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400"> - <caption - class="p-5 text-lg font-semibold text-left rtl:text-right text-gray-900 bg-white dark:text-white dark:bg-gray-800" - on:click=move |_| set_collapse_offline.set(!collapse_offline.get_untracked()) - > - <svg - class=move || if collapse_offline.get() { - "w-3 h-3 shrink-0 inline mr-2 rotate-180" - } else { - "w-3 h-3 shrink-0 inline mr-2" - } - xmlns="http://www.w3.org/2000/svg" - fill="none" - viewBox="0 0 10 6" - > - <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5 5 1 1 5"/> - </svg> - <span>"Shut Down Federations"</span> - <p class="mt-1 text-sm font-normal text-gray-500 dark:text-gray-400"> - "List of federations that have ceased operations but were observed in the past" - </p> - </caption> - <thead - class=move || if collapse_offline.get() { - "hidden" - } else { - "text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400" - } - > - <tr> - <th scope="col" class="px-6 py-3"> - "Name" - </th> - <th scope="col" class="px-6 py-3"> - <a - href="https://github.com/nostr-protocol/nips/pull/1110" - class="underline hover:no-underline" - > - "Recommendations" - </a> - </th> - <th scope="col" class="px-6 py-3"> - "Invite Code" - </th> - <th scope="col" class="px-6 py-3"> - "Total Assets" - </th> - <th scope="col" class="px-6 py-3"> - "Average Activity (7d)" - </th> - </tr> - </thead> - <tbody - class=move || if collapse_offline.get() { - "hidden" - } else { - "" - } - >{inactive_rows}</tbody> - </table> - </div> - } -} - -async fn fetch_federations() -> anyhow::Result<Vec<(FederationSummary, f64, Amount)>> { - fn rating_index(rating: &fmo_api_types::FederationRating) -> f64 { - rating.avg.unwrap_or(0.0) * (rating.count as f64 + 1.0).log10() - } - - let url = format!("{}/federations", BASE_URL); - let response = reqwest::get(&url).await?; - let federations: Vec<FederationSummary> = response.json().await?; - - let federations = federations - .into_iter() - .map(|federation_summary| { - let avg_txs = federation_summary - .last_7d_activity - .iter() - .map(|tx| tx.num_transactions) - .sum::<u64>() as f64 - / federation_summary.last_7d_activity.len() as f64; - let avg_volume = Amount::from_msats( - federation_summary - .last_7d_activity - .iter() - .map(|tx| tx.amount_transferred.msats) - .sum::<u64>() - / federation_summary.last_7d_activity.len() as u64, - ); - (federation_summary, avg_txs, avg_volume) - }) - .sorted_by(|(a, _, _), (b, _, _)| { - rating_index(&b.nostr_votes).total_cmp(&rating_index(&a.nostr_votes)) - }) - .collect::<Vec<_>>(); - - Ok(federations) -} diff --git a/fmo_frontend/src/components/federations/rating.rs b/fmo_frontend/src/components/federations/rating.rs deleted file mode 100644 index 4ddd02d..0000000 --- a/fmo_frontend/src/components/federations/rating.rs +++ /dev/null @@ -1,25 +0,0 @@ -use leptos::prelude::*; - -#[component] -pub fn Rating(count: u64, rating: Option<f64>) -> impl IntoView { - view! { - <div class="flex justify-center"> - <div> - <div class="flex items-center"> - <svg class="w-4 h-4 text-yellow-300 me-1" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 22 20"> - <path d="M20.924 7.625a1.523 1.523 0 0 0-1.238-1.044l-5.051-.734-2.259-4.577a1.534 1.534 0 0 0-2.752 0L7.365 5.847l-5.051.734A1.535 1.535 0 0 0 1.463 9.2l3.656 3.563-.863 5.031a1.532 1.532 0 0 0 2.226 1.616L11 17.033l4.518 2.375a1.534 1.534 0 0 0 2.226-1.617l-.863-5.03L20.537 9.2a1.523 1.523 0 0 0 .387-1.575Z"/> - </svg> - <p class="ms-2 text-sm font-bold text-gray-900 dark:text-white"> - { - match rating { - Some(rating) => format!("{:.1}", rating), - None => "N/A".to_string() - } - } - </p> - </div> - <span class="text-sm font-medium text-gray-900 dark:text-white">{count} " votes"</span> - </div> - </div> - } -} diff --git a/fmo_frontend/src/components/federations/totals.rs b/fmo_frontend/src/components/federations/totals.rs deleted file mode 100644 index 3110efe..0000000 --- a/fmo_frontend/src/components/federations/totals.rs +++ /dev/null @@ -1,99 +0,0 @@ -use fedimint_core::util::backoff_util::background_backoff; -use fedimint_core::util::retry; -use fmo_api_types::FedimintTotals; -use leptos::prelude::*; -use num_format::{Locale, ToFormattedString}; - -#[component] -pub fn Totals() -> impl IntoView { - let totals_res = LocalResource::new(|| async { - retry( - "fetching federation totals", - background_backoff(), - fetch_federation_totals, - ) - .await - .expect("Will never return Err") - }); - - view! { - <div class="flex items-center justify-center space-x-10 dark:text-white"> - <div class="text-center"> - {move || { - match totals_res.get() { - Some(totals) => { - view! { - <div class="text-4xl font-bold mb-2"> - {totals.federations.to_formatted_string(&Locale::en)} - </div> - } - } - None => { - view! { - <div class="text-4xl font-bold mb-2"> - {"Loading...".to_string()} - </div> - } - } - } - }} <div class="text-gray-500">Observed Federations</div> - </div> - <div class="border-l border-gray-300 h-12"></div> - <div class="text-center"> - {move || { - match totals_res.get() { - Some(totals) => { - view! { - <div class="text-4xl font-bold mb-2 dark:text-white"> - {totals.tx_count.to_formatted_string(&Locale::en)} - </div> - } - } - None => { - view! { - <div class="text-4xl font-bold mb-2 dark:text-white"> - {"Loading...".to_string()} - </div> - } - } - } - }} <div class="text-gray-500">Total Transactions</div> - </div> - <div class="border-l border-gray-300 h-12"></div> - <div class="text-center"> - {move || { - view! { - <div class="text-4xl font-bold dark:text-white mb-2"> - <svg - xmlns="http://www.w3.org/2000/svg" - width="40" - height="40" - fill="currentColor" - class="bi bi-currency-bitcoin inline align-bottom" - viewBox="0 0 16 16" - > - <path d="M5.5 13v1.25c0 .138.112.25.25.25h1a.25.25 0 0 0 .25-.25V13h.5v1.25c0 .138.112.25.25.25h1a.25.25 0 0 0 .25-.25V13h.084c1.992 0 3.416-1.033 3.416-2.82 0-1.502-1.007-2.323-2.186-2.44v-.088c.97-.242 1.683-.974 1.683-2.19C11.997 3.93 10.847 3 9.092 3H9V1.75a.25.25 0 0 0-.25-.25h-1a.25.25 0 0 0-.25.25V3h-.573V1.75a.25.25 0 0 0-.25-.25H5.75a.25.25 0 0 0-.25.25V3l-1.998.011a.25.25 0 0 0-.25.25v.989c0 .137.11.25.248.25l.755-.005a.75.75 0 0 1 .745.75v5.505a.75.75 0 0 1-.75.75l-.748.011a.25.25 0 0 0-.25.25v1c0 .138.112.25.25.25zm1.427-8.513h1.719c.906 0 1.438.498 1.438 1.312 0 .871-.575 1.362-1.877 1.362h-1.28zm0 4.051h1.84c1.137 0 1.756.58 1.756 1.524 0 .953-.626 1.45-2.158 1.45H6.927z"></path> - </svg> - {match totals_res.get() { - Some(totals) => { - format!( - "{:.*}", - 5, - totals.tx_volume.msats as f64 / 100_000_000_000f64, - ) - } - None => "Loading …".to_owned(), - }} - </div> - } - }} <div class="text-gray-500">Total Volume</div> - </div> - </div> - } -} - -async fn fetch_federation_totals() -> anyhow::Result<FedimintTotals> { - let url = format!("{}/federations/totals", crate::BASE_URL); - let res = reqwest::get(&url).await?; - Ok(res.json().await?) -} diff --git a/fmo_frontend/src/components/mod.rs b/fmo_frontend/src/components/mod.rs deleted file mode 100644 index 65276b0..0000000 --- a/fmo_frontend/src/components/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -mod alert; -mod badge; -pub mod button; -mod copyable; -mod federation; -mod federations; -mod navbar; -pub mod nostr; -mod tabs; - -pub use copyable::Copyable; -pub use federation::Federation; -pub use federations::Federations; -pub use navbar::{NavBar, NavItem}; diff --git a/fmo_frontend/src/components/navbar.rs b/fmo_frontend/src/components/navbar.rs deleted file mode 100644 index f77b2be..0000000 --- a/fmo_frontend/src/components/navbar.rs +++ /dev/null @@ -1,79 +0,0 @@ -use leptos::prelude::*; - -pub struct NavItem { - pub name: String, - pub href: String, - pub active: bool, -} - -#[component] -pub fn NavBar(items: Vec<NavItem>) -> impl IntoView { - let items = items.into_iter().map(|item| { - if item.active { - view! { - <li> - <a - href=item.href - class="block py-2 px-3 text-white bg-blue-700 rounded md:bg-transparent md:text-blue-700 md:p-0 md:dark:text-blue-500" - aria-current="page" - > - {item.name} - </a> - </li> - } - } else { - view! { - <li> - <a - href=item.href - class="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 md:dark:hover:text-blue-500 dark:text-white dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700" - aria-current="page" - > - {item.name} - </a> - </li> - } - } - }).collect::<Vec<_>>(); - - view! { - <nav class="bg-white border-gray-200 dark:bg-gray-900"> - <div class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4"> - <a href="/" class="flex items-center space-x-3 rtl:space-x-reverse"> - <img src="/fedimint.png" class="h-8" alt="Fedimint Logo"/> - <span class="self-center text-2xl font-semibold whitespace-nowrap dark:text-white"> - Fedimint Observer - </span> - </a> - <div class="flex md:order-2"> - <a - href="https://github.com/elsirion/fedimint-observer/" - class="inline-flex items-center justify-center h-9 mr-3 px-3 text-xs font-medium text-gray-900 bg-white border border-gray-200 rounded-lg focus:outline-none hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-2 focus:ring-gray-300 dark:focus:ring-gray-500 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700" - > - <svg - class="w-3.5 h-3.5 mr-2" - aria-hidden="true" - xmlns="http://www.w3.org/2000/svg" - fill="currentColor" - viewBox="0 0 20 20" - > - <path - fill-rule="evenodd" - d="M10 .333A9.911 9.911 0 0 0 6.866 19.65c.5.092.678-.215.678-.477 0-.237-.01-1.017-.014-1.845-2.757.6-3.338-1.169-3.338-1.169a2.627 2.627 0 0 0-1.1-1.451c-.9-.615.07-.6.07-.6a2.084 2.084 0 0 1 1.518 1.021 2.11 2.11 0 0 0 2.884.823c.044-.503.268-.973.63-1.325-2.2-.25-4.516-1.1-4.516-4.9A3.832 3.832 0 0 1 4.7 7.068a3.56 3.56 0 0 1 .095-2.623s.832-.266 2.726 1.016a9.409 9.409 0 0 1 4.962 0c1.89-1.282 2.717-1.016 2.717-1.016.366.83.402 1.768.1 2.623a3.827 3.827 0 0 1 1.02 2.659c0 3.807-2.319 4.644-4.525 4.889a2.366 2.366 0 0 1 .673 1.834c0 1.326-.012 2.394-.012 2.72 0 .263.18.572.681.475A9.911 9.911 0 0 0 10 .333Z" - clip-rule="evenodd" - ></path> - </svg> - "Fedimint Observer" - </a> - </div> - <div - class="items-center justify-between hidden w-full md:flex md:w-auto md:order-1" - > - <ul class="flex flex-col p-4 md:p-0 mt-4 font-medium border border-gray-100 rounded-lg bg-gray-50 md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 md:bg-white dark:bg-gray-800 md:dark:bg-gray-900 dark:border-gray-700"> - {items} - </ul> - </div> - </div> - </nav> - } -} diff --git a/fmo_frontend/src/components/nostr/check_federation.rs b/fmo_frontend/src/components/nostr/check_federation.rs deleted file mode 100644 index bf57257..0000000 --- a/fmo_frontend/src/components/nostr/check_federation.rs +++ /dev/null @@ -1,415 +0,0 @@ -use std::borrow::Cow; -use std::collections::BTreeMap; - -use anyhow::{ensure, Context}; -use fedimint_core::config::JsonClientConfig; -use fedimint_core::core::ModuleKind; -use fedimint_core::invite_code::InviteCode; -use leptos::either::Either; -use leptos::html::Input; -use leptos::prelude::*; -use leptos_router::hooks::use_query; -use leptos_router::params::{Params, ParamsError, ParamsMap}; -use nostr_sdk::{EventBuilder, Kind, SingleLetterTag, Tag, TagKind}; -use reqwest::StatusCode; - -use crate::components::alert::{Alert, AlertLevel}; -use crate::components::badge::{Badge, BadgeLevel}; -use crate::components::button::{Button, SUCCESS_BUTTON}; -use crate::BASE_URL; - -#[derive(Debug, Clone)] -struct FederationInfo { - federation_name: String, - federation_config: JsonClientConfig, -} - -#[derive(Debug, Clone, PartialEq, Eq)] -struct CheckQuery { - check: Option<String>, -} - -impl Params for CheckQuery { - fn from_map(map: &ParamsMap) -> Result<Self, ParamsError> { - Ok(CheckQuery { - check: map.get("check").map(|s| s.to_string()), - }) - } -} - -#[component] -pub fn CheckFederation() -> impl IntoView { - let invite_input_ref = NodeRef::<Input>::new(); - let query = use_query::<CheckQuery>(); - - let check_federation_action = - Action::<(), std::result::Result<FederationInfo, String>>::new_local( - move |&()| async move { - let check_federation_inner = move || async move { - let invite_code = invite_input_ref - .get_untracked() - .expect("invite_input_ref should be loaded by now") - .value(); - - let federation_config = { - let url = format!("{}/config/{invite_code}", BASE_URL); - let response = reqwest::get(&url).await?; - let config: JsonClientConfig = response.json().await?; - config - }; - - let federation_name = { - let url = format!("{}/config/{invite_code}/meta", BASE_URL); - let response = reqwest::get(&url).await?; - let meta: BTreeMap<String, serde_json::Value> = response.json().await?; - meta.get("federation_name") - .context("No name found")? - .as_str() - .context("Name isn't a string")? - .to_owned() - }; - - Result::<_, anyhow::Error>::Ok(FederationInfo { - federation_name, - federation_config, - }) - }; - - check_federation_inner().await.map_err(|e| e.to_string()) - }, - ); - - fn or_loading<I: IntoView>(maybe_value: Option<I>) -> impl IntoView { - if let Some(value) = maybe_value { - Either::Left(view! { - <span> - {value} - </span> - }) - } else { - Either::Right(view! { - <div class="h-2.5 bg-gray-200 rounded-full dark:bg-gray-700 w-48"></div> - }) - } - } - - let federation_name = move || { - or_loading( - check_federation_action - .value() - .get() - .and_then(|info| Some(info.ok()?.federation_name.clone())), - ) - }; - let federation_guardians = move || { - or_loading( - check_federation_action - .value() - .get() - .and_then(|info| Some(info.ok()?.federation_config.global.api_endpoints.len())), - ) - }; - let federation_modules = move || { - or_loading(check_federation_action.value().get().and_then(|info| { - let info = info.ok()?; - Some( - get_modules(&info.federation_config) - .into_iter() - .map(|kind| { - view! { - <Badge - level=BadgeLevel::Info - > - {kind} - </Badge> - } - }) - .collect::<Vec<_>>(), - ) - })) - }; - let federation_network = move || { - or_loading(check_federation_action.value().get().and_then(|info| { - let info = info.ok()?; - Some(get_network(&info.federation_config)) - })) - }; - - let announce_federation_action = - Action::<(), std::result::Result<(), String>>::new_local(move |&()| async move { - let federation_info = check_federation_action - .value() - .get_untracked() - .expect("Button should only be clickable if federation info was fetched") - .expect( - "Button should only be clickable if federation info fetching was successful", - ); - - sign_and_publish_federation(&federation_info.federation_config) - .await - .map_err(|e| e.to_string())?; - - Result::<_, String>::Ok(()) - }); - let announce_button_disabled = Signal::derive(move || { - check_federation_action.pending().get() - || !check_federation_action - .value() - .get() - .map(|info| info.is_ok()) - .unwrap_or(false) - || announce_federation_action.pending().get() - || announce_federation_action - .value() - .get() - .map(|res| res.is_ok()) - .unwrap_or(false) - }); - - // Handle deep-linking: auto-fill input and trigger check if 'check' parameter - // is present - Effect::new(move |_| { - if let Ok(query_params) = query.get() { - if let Some(ref check_value) = query_params.check { - if let Some(input_element) = invite_input_ref.get() { - input_element.set_value(check_value); - check_federation_action.dispatch(()); - } - } - } - }); - - view! { - <div class="relative overflow-x-auto shadow-md sm:rounded-lg mt-8"> - <h1 class="p-5 text-lg font-semibold text-left rtl:text-right text-gray-900 bg-white dark:text-white dark:bg-gray-800"> - Inspect Federation - <p class="mt-1 text-sm font-normal text-gray-500 dark:text-gray-400"> - "Fetch federation info by invite code" - </p> - </h1> - - <div class="p-5 pt-0 dark:text-white dark:bg-gray-800"> - <form - class="flex gap-2 items-center" - on:submit=move |ev| { - ev.prevent_default(); - check_federation_action.dispatch(()); - } - > - <div class="relative flex-1"> - <input - node_ref=invite_input_ref - placeholder=" " - type="text" - class="block px-2.5 h-11 w-full text-sm text-gray-900 bg-transparent rounded-lg border-gray-300 appearance-none dark:text-white dark:border-gray-600 dark:focus:border-blue-500 focus:outline-none focus:ring-0 focus:border-blue-600 peer border" - /> - <label - for="floating_outlined" - class="absolute text-sm text-gray-500 dark:text-gray-400 duration-300 transform -translate-y-4 scale-75 top-2 z-10 origin-[0] bg-white dark:bg-gray-800 px-2 peer-focus:px-2 peer-focus:text-blue-600 peer-focus:dark:text-blue-500 peer-placeholder-shown:scale-100 peer-placeholder-shown:-translate-y-1/2 peer-placeholder-shown:top-1/2 peer-focus:top-2 peer-focus:scale-75 peer-focus:-translate-y-4 rtl:peer-focus:translate-x-1/4 rtl:peer-focus:left-auto start-1" - > - Invite Code - </label> - </div> - <Button - on_click=move || { - check_federation_action.dispatch(()); - } - disabled=check_federation_action.pending() - class="h-11" - > - Check Federation - </Button> - <Button - on_click=move || { - announce_federation_action.dispatch(()); - } - disabled=announce_button_disabled - color_scheme=SUCCESS_BUTTON - class="h-11" - > - Announce Federation - </Button> - </form> - { - let error_alert = move || announce_federation_action.value().get() - .and_then(|res| res.err()) - .map(|e| view! { - <Alert - message=e - level=AlertLevel::Error - class="mt-4" - /> - }); - let success_alert = move || announce_federation_action.value().get() - .and_then(|res| res.ok()) - .map(|_| view! { - <Alert - message="Federation announced successfully! Reload the page to see it listed" - level=AlertLevel::Success - class="mt-4" - /> - }); - view! { - {error_alert} - {success_alert} - } - } - - { - let table_view = move || { - (check_federation_action.pending().get() || check_federation_action.value().get().map(|info| info.is_ok()).unwrap_or(false)) - .then(|| view! { - <div class="flow-root mt-4"> - <div class="relative overflow-x-auto"> - <table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400"> - <tbody> - <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"> - <th - scope="row" - class="px-6 py-4 font-medium text-gray-900 dark:text-white" - > - Name - </th> - <td class="px-6 py-4">{federation_name}</td> - </tr> - <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"> - <th - scope="row" - class="px-6 py-4 font-medium text-gray-900 dark:text-white" - > - Guardians - </th> - <td class="px-6 py-4 whitespace-normal">{federation_guardians}</td> - </tr> - <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"> - <th - scope="row" - class="px-6 py-4 font-medium text-gray-900 dark:text-white" - > - Modules - </th> - <td class="px-6 py-4 whitespace-normal">{federation_modules}</td> - </tr> - <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"> - <th - scope="row" - class="px-6 py-4 font-medium text-gray-900 dark:text-white" - > - Network - </th> - <td class="px-6 py-4 whitespace-normal">{federation_network}</td> - </tr> - </tbody> - </table> - </div> - </div> - }) - }; - let error_alert = move || { - check_federation_action.value().get() - .and_then(|res| res.err()) - .map(|e| view! { - <Alert - message=e - level=AlertLevel::Error - class="mt-4" - /> - }) - }; - view! { - {table_view} - {error_alert} - } - } - </div> - </div> - } -} - -fn get_network(config: &JsonClientConfig) -> String { - config - .modules - .iter() - .find_map(|(_, module)| { - module.is_kind(&ModuleKind::from("wallet")).then(|| { - module - .value() - .get("network") - .expect("Network is of type string") - .as_str() - .expect("Network is of type string") - .to_owned() - }) - }) - .expect("Wallet module is expected to be present") -} - -fn get_modules(config: &JsonClientConfig) -> Vec<String> { - config - .modules - .values() - .map(|module| module.kind().as_str().to_owned()) - .collect() -} - -async fn sign_and_publish_federation(config: &JsonClientConfig) -> anyhow::Result<()> { - let signer = nostr_sdk::nostr::nips::nip07::Nip07Signer::new()?; - - let federation_id = config.global.calculate_federation_id().to_string(); - let invite_code = InviteCode::new_with_essential_num_guardians( - &config - .global - .api_endpoints - .iter() - .map(|(&peer_id, peer_data)| (peer_id, peer_data.url.clone())) - .collect(), - config.global.calculate_federation_id(), - ) - .to_string(); - let network = get_network(config); - let modules = get_modules(config); - - let tags = vec![ - Tag::custom( - TagKind::SingleLetter(SingleLetterTag::from_char('d').unwrap()), - [federation_id], - ), - Tag::custom( - TagKind::SingleLetter(SingleLetterTag::from_char('u').unwrap()), - [invite_code], - ), - Tag::custom( - TagKind::SingleLetter(SingleLetterTag::from_char('n').unwrap()), - [network], - ), - Tag::custom( - TagKind::Custom(Cow::Borrowed("modules")), - [modules.join(",")], - ), - ]; - let unsigned_event = EventBuilder::new( - Kind::Custom(38173), - // TODO: make this take into account meta announcements or leave it out - serde_json::to_string(&config.global.meta).expect("Meta should be serializable"), - tags, - ) - .to_unsigned_event(signer.get_public_key().await?); - - let event = signer.sign_event(unsigned_event).await?; - - let client = reqwest::Client::new(); - let response = client - .put(format!("{}/nostr/federations", BASE_URL)) - .json(&event) - .send() - .await?; - - let status = response.status(); - ensure!( - status == StatusCode::OK, - "Unexpected status code {}", - status - ); - - Ok(()) -} diff --git a/fmo_frontend/src/components/nostr/mod.rs b/fmo_frontend/src/components/nostr/mod.rs deleted file mode 100644 index 734c6f3..0000000 --- a/fmo_frontend/src/components/nostr/mod.rs +++ /dev/null @@ -1,241 +0,0 @@ -mod check_federation; -mod nostr_federation_row; - -use std::collections::BTreeMap; - -use anyhow::Context; -use check_federation::CheckFederation; -use fedimint_core::config::FederationId; -use fedimint_core::invite_code::InviteCode; -use fedimint_core::util::backoff_util::background_backoff; -use fedimint_core::util::retry; -use fmo_api_types::FederationSummary; -use leptos::prelude::*; -use leptos_meta::Title; -use nostr_federation_row::NostrFederationRow; - -use crate::BASE_URL; - -#[component] -pub fn NostrFederations() -> impl IntoView { - let nostr_federations_res = LocalResource::new(fetch_nostr_federations); - let observed_federations_res = LocalResource::new(fetch_observed_federations); - - // Signal to store federation names as they are fetched - let (federation_names, set_federation_names) = signal(BTreeMap::<FederationId, String>::new()); - - let (collapse_offline, set_collapse_offline) = signal(true); - - // Spawn tasks to fetch each federation name independently - Effect::new(move || { - if let Some(federations) = nostr_federations_res.get() { - for (federation_id, invite_code) in federations { - // Spawn independent task for each federation - leptos::task::spawn_local(async move { - if let Some(name) = fetch_federation_name(invite_code).await { - set_federation_names.update(|names| { - names.insert(federation_id, name); - }); - } - }); - } - } - }); - - view! { - <Title - text="Fedimint Observer" - /> - - <CheckFederation /> - - <div class="relative overflow-x-auto shadow-md sm:rounded-lg mt-8"> - <table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400"> - <caption class="p-5 text-lg font-semibold text-left rtl:text-right text-gray-900 bg-white dark:text-white dark:bg-gray-800"> - "Online Nostr Federations" - <p class="mt-1 text-sm font-normal text-gray-500 dark:text-gray-400"> - "Federations announced via Nostr that are currently online" - </p> - </caption> - <thead class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400"> - <tr> - <th scope="col" class="px-6 py-3"> - "Name" - </th> - <th scope="col" class="px-6 py-3"> - "Invite Code" - </th> - </tr> - </thead> - <tbody> - { move || { - let observed_ids = observed_federations_res.get() - .unwrap_or_default() - .into_iter() - .map(|summary| summary.id) - .collect::<std::collections::HashSet<_>>(); - - let names = federation_names.get(); - - nostr_federations_res.get().unwrap_or_default() - .into_iter() - .filter_map(|(federation_id, invite_code)| { - let name = names.get(&federation_id).cloned(); - // Only show if we have a name (online) - name.as_ref()?; - let is_observed = observed_ids.contains(&federation_id); - Some(view! { - <NostrFederationRow - federation_id=federation_id - invite_code=invite_code - is_observed=is_observed - federation_name=name - /> - }) - }) - .collect::<Vec<_>>() - }} - </tbody> - </table> - </div> - - <div class="relative overflow-x-auto shadow-md sm:rounded-lg mt-6"> - <table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400"> - <caption - class="p-5 text-lg font-semibold text-left rtl:text-right text-gray-900 bg-white dark:text-white dark:bg-gray-800" - on:click=move |_| set_collapse_offline.set(!collapse_offline.get_untracked()) - > - <svg - class=move || if collapse_offline.get() { - "w-3 h-3 shrink-0 inline mr-2 rotate-180" - } else { - "w-3 h-3 shrink-0 inline mr-2" - } - xmlns="http://www.w3.org/2000/svg" - fill="none" - viewBox="0 0 10 6" - > - <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5 5 1 1 5"/> - </svg> - <span>"Offline Nostr Federations"</span> - <p class="mt-1 text-sm font-normal text-gray-500 dark:text-gray-400"> - "Federations announced via Nostr that are currently offline or unreachable" - </p> - </caption> - <thead - class=move || if collapse_offline.get() { - "hidden" - } else { - "text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400" - } - > - <tr> - <th scope="col" class="px-6 py-3"> - "Name" - </th> - <th scope="col" class="px-6 py-3"> - "Invite Code" - </th> - </tr> - </thead> - <tbody - class=move || if collapse_offline.get() { - "hidden" - } else { - "" - } - > - { move || { - let observed_ids = observed_federations_res.get() - .unwrap_or_default() - .into_iter() - .map(|summary| summary.id) - .collect::<std::collections::HashSet<_>>(); - - let names = federation_names.get(); - - nostr_federations_res.get().unwrap_or_default() - .into_iter() - .filter_map(|(federation_id, invite_code)| { - let name = names.get(&federation_id).cloned(); - // Only show if we don't have a name (offline) - if name.is_some() { - return None; - } - let is_observed = observed_ids.contains(&federation_id); - Some(view! { - <NostrFederationRow - federation_id=federation_id - invite_code=invite_code - is_observed=is_observed - federation_name=name - /> - }) - }) - .collect::<Vec<_>>() - }} - </tbody> - </table> - </div> - } -} -async fn fetch_nostr_federations() -> BTreeMap<FederationId, InviteCode> { - let url = format!("{}/nostr/federations", BASE_URL); - - let fetch_nostr_federations_impl = || { - let url_inner = url.clone(); - async move { - let response = reqwest::get(&url_inner).await?; - let federations: BTreeMap<FederationId, InviteCode> = response.json().await?; - Ok(federations) - } - }; - - retry( - "Fetching Nostr federations", - background_backoff(), - fetch_nostr_federations_impl, - ) - .await - .expect("Will never return Err") -} - -async fn fetch_observed_federations() -> Vec<FederationSummary> { - let url = format!("{}/federations", BASE_URL); - - let fetch_observed_federations_impl = || { - let url_inner = url.clone(); - async move { - let response = reqwest::get(&url_inner).await?; - let federations: Vec<FederationSummary> = response.json().await?; - Ok(federations) - } - }; - - retry( - "Fetching observed federations", - background_backoff(), - fetch_observed_federations_impl, - ) - .await - .expect("Will never return Err") -} - -async fn fetch_federation_name(invite_code: InviteCode) -> Option<String> { - let url = format!("{}/config/{invite_code}/meta", BASE_URL); - - let response = reqwest::get(&url).await.ok()?; - if !response.status().is_success() { - return None; - } - - let federation: BTreeMap<String, serde_json::Value> = response.json().await.ok()?; - federation - .get("federation_name") - .context("No name found") - .ok()? - .as_str() - .context("Name isn't a string") - .ok() - .map(|s| s.to_owned()) -} diff --git a/fmo_frontend/src/components/nostr/nostr_federation_row.rs b/fmo_frontend/src/components/nostr/nostr_federation_row.rs deleted file mode 100644 index 8a81f79..0000000 --- a/fmo_frontend/src/components/nostr/nostr_federation_row.rs +++ /dev/null @@ -1,44 +0,0 @@ -use fedimint_core::config::FederationId; -use fedimint_core::invite_code::InviteCode; -use leptos::prelude::*; - -use crate::components::badge::{Badge, BadgeLevel}; -use crate::components::Copyable; - -#[component] -pub fn NostrFederationRow( - federation_id: FederationId, - invite_code: InviteCode, - is_observed: bool, - federation_name: Option<String>, -) -> impl IntoView { - view! { - <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"> - <th - scope="row" - class="px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white" - > - <div class="flex items-center gap-2"> - <span> - {federation_name.clone().unwrap_or_else(|| federation_id.to_string())} - </span> - { - // Show "Unobserved" badge if we have a name and federation is not observed - if !is_observed && federation_name.is_some() { - Some(view! { - <Badge level=BadgeLevel::Info tooltip=Some("Not currently observed by this instance".to_string())> - "Unobserved" - </Badge> - }) - } else { - None - } - } - </div> - </th> - <td> - <Copyable text=invite_code.to_string()/> - </td> - </tr> - } -} diff --git a/fmo_frontend/src/components/tabs.rs b/fmo_frontend/src/components/tabs.rs deleted file mode 100644 index 354587a..0000000 --- a/fmo_frontend/src/components/tabs.rs +++ /dev/null @@ -1,58 +0,0 @@ -use leptos::prelude::*; - -#[component] -pub fn Tabs(#[prop(into)] default: String, children: Children) -> impl IntoView { - let (active_tab, set_active_tab) = signal(default.clone()); - - // Extract tab names from children - this is a simplified approach - // In Leptos 0.8.x, we'll use a more direct approach - let tabs = ["Activity", "UTXOs", "Config"]; - - let tab_buttons = tabs.iter().map(|tab_name| { - let tab_name_owned = tab_name.to_string(); - let tab_name_click = tab_name_owned.clone(); - - const INACTIVE_CLASSES: &str = "inline-block p-4 border-b-2 border-transparent rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300"; - const ACTIVE_CLASSES: &str = "inline-block p-4 text-blue-600 border-b-2 border-blue-600 rounded-t-lg active dark:text-blue-500 dark:border-blue-500"; - - view! { - <li class="me-2"> - <a - href="#" - class=move || { - if tab_name_owned == active_tab.get() { - ACTIVE_CLASSES - } else { - INACTIVE_CLASSES - } - } - on:click=move |_| set_active_tab.set(tab_name_click.clone()) - > - {*tab_name} - </a> - </li> - } - }).collect_view(); - - provide_context(active_tab); - - view! { - <div class="text-sm font-medium text-center text-gray-500 border-b border-gray-200 dark:text-gray-400 dark:border-gray-700"> - <ul class="flex flex-wrap -mb-px">{tab_buttons}</ul> - </div> - <div> - {children()} - </div> - } -} - -#[component] -pub fn Tab(#[prop(into)] name: String, children: Children) -> impl IntoView { - let active_tab = use_context::<ReadSignal<String>>().expect("Tab must be used within Tabs"); - - view! { - <div style:display=move || if active_tab.get() == name { "block" } else { "none" }> - {children()} - </div> - } -} diff --git a/fmo_frontend/src/lib.rs b/fmo_frontend/src/lib.rs deleted file mode 100644 index 845df05..0000000 --- a/fmo_frontend/src/lib.rs +++ /dev/null @@ -1,7 +0,0 @@ -pub mod components; -mod util; - -const BASE_URL: &str = match option_env!("FMO_API_SERVER") { - Some(url) => url, - None => "http://127.0.0.1:3000", -}; diff --git a/fmo_frontend/src/main.rs b/fmo_frontend/src/main.rs deleted file mode 100644 index ba52a32..0000000 --- a/fmo_frontend/src/main.rs +++ /dev/null @@ -1,48 +0,0 @@ -use fmo_frontend::components::nostr::NostrFederations; -use fmo_frontend::components::{Federation, Federations, NavBar, NavItem}; -use leptos::prelude::*; -use leptos_meta::{provide_meta_context, Link}; -use leptos_router::components::{Route, Router, Routes}; -use leptos_router::path; - -fn main() { - // set up logging - tracing_wasm::set_as_global_default(); - console_error_panic_hook::set_once(); - provide_meta_context(); - - mount_to_body(move || { - view! { - <Link - rel="icon" - type_="image/x-icon" - href="/fedimint.png" - /> - <body class="dark:bg-gray-900"> - <Router> - <main class="container mx-auto max-w-6xl px-4 min-h-screen pb-4"> - <NavBar items=vec![ - NavItem { - name: "Home".to_owned(), - href: "/".to_owned(), - // TODO: make this actually work - active: false, - }, - NavItem { - name: "Nostr".to_owned(), - href: "/nostr".to_owned(), - active: false, - }, - ]/> - <Routes fallback=|| view! { <div>"Page not found"</div> }> - <Route path=path!("/") view=|| view! { <Federations/> }/> - <Route path=path!("/federations/:id") view=|| view! { <Federation/> }/> - <Route path=path!("/nostr") view=|| view! { <NostrFederations/> }/> - <Route path=path!("/about") view=|| view! { <div>"About"</div> }/> - </Routes> - </main> - </Router> - </body> - } - }) -} diff --git a/fmo_frontend/src/util.rs b/fmo_frontend/src/util.rs deleted file mode 100644 index 9c9f200..0000000 --- a/fmo_frontend/src/util.rs +++ /dev/null @@ -1,32 +0,0 @@ -use std::fmt::Display; - -use fedimint_core::Amount; - -pub struct FmtBitcoin { - amount: Amount, - precision: usize, -} - -impl Display for FmtBitcoin { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "{:.*} BTC", - self.precision, - self.amount.msats as f64 / 100_000_000_000f64 - ) - } -} - -pub trait AsBitcoin { - fn as_bitcoin(&self, precision: usize) -> FmtBitcoin; -} - -impl AsBitcoin for Amount { - fn as_bitcoin(&self, precision: usize) -> FmtBitcoin { - FmtBitcoin { - amount: *self, - precision, - } - } -} diff --git a/fmo_frontend/style/tailwind.css b/fmo_frontend/style/tailwind.css deleted file mode 100644 index b5c61c9..0000000 --- a/fmo_frontend/style/tailwind.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/fmo_frontend/tailwind.config.js b/fmo_frontend/tailwind.config.js deleted file mode 100644 index 1ce304b..0000000 --- a/fmo_frontend/tailwind.config.js +++ /dev/null @@ -1,15 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: { - files: ["*.html", "**/*.rs"], - }, - plugins: [ - ], - // https://github.com/fedimint/ui/blob/master/packages/ui/src/theme.tsx - theme: { - fontFamily: { - heading: ['Space Grotesk', 'monospace'], - body: ['Inter', 'sans-serif'], - }, - }, -}; diff --git a/fmo_server/Cargo.toml b/fmo_server/Cargo.toml index f0cf657..c5a1f79 100644 --- a/fmo_server/Cargo.toml +++ b/fmo_server/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" [dependencies] fedimint-api-client = { workspace = true } +fedimint-connectors = { workspace = true } fedimint-core = { workspace = true } fedimint-ln-common = { workspace = true } fedimint-meta-client = { workspace = true } diff --git a/fmo_server/src/config/meta.rs b/fmo_server/src/config/meta.rs index 25eaa43..c83a26c 100644 --- a/fmo_server/src/config/meta.rs +++ b/fmo_server/src/config/meta.rs @@ -160,15 +160,16 @@ impl ConsensusMetaCache { bail!("No meta module found in federation"); }; - let api_client = DynGlobalApi::from_endpoints( - config - .global - .api_endpoints - .iter() - .map(|(peer_id, peer)| (*peer_id, peer.url.clone())), - &None, - ) - .await?; + let connectors = fedimint_connectors::ConnectorRegistry::build_from_client_env()? + .bind() + .await?; + let peers = config + .global + .api_endpoints + .iter() + .map(|(peer_id, peer)| (*peer_id, peer.url.clone())) + .collect(); + let api_client = DynGlobalApi::new(connectors, peers, None)?; let module_api = api_client.with_module(*meta_instance_id); diff --git a/fmo_server/src/config/mod.rs b/fmo_server/src/config/mod.rs index 4f577b0..eb4fa2d 100644 --- a/fmo_server/src/config/mod.rs +++ b/fmo_server/src/config/mod.rs @@ -86,8 +86,10 @@ impl FederationConfigCache { } async fn fetch_config_inner(invite: &InviteCode) -> anyhow::Result<JsonClientConfig> { - let raw_config = fedimint_api_client::api::net::Connector::default() - .download_from_invite_code(invite) + let connectors = fedimint_connectors::ConnectorRegistry::build_from_client_env()? + .bind() .await?; + let (raw_config, _api) = + fedimint_api_client::download_from_invite_code(&connectors, invite).await?; config_to_json(raw_config) } diff --git a/fmo_server/src/federation/guardians.rs b/fmo_server/src/federation/guardians.rs index dd2f159..a2b4bc0 100644 --- a/fmo_server/src/federation/guardians.rs +++ b/fmo_server/src/federation/guardians.rs @@ -27,15 +27,13 @@ impl FederationObserver { const REQUEST_INTERVAL: Duration = Duration::from_secs(60); let mut interval = tokio::time::interval(REQUEST_INTERVAL); - let api = DynGlobalApi::from_endpoints( - config - .global - .api_endpoints - .iter() - .map(|(&peer_id, peer_url)| (peer_id, peer_url.url.clone())), - &None, - ) - .await?; + let peers = config + .global + .api_endpoints + .iter() + .map(|(&peer_id, peer_url)| (peer_id, peer_url.url.clone())) + .collect(); + let api = DynGlobalApi::new(self.connectors().clone(), peers, None)?; let wallet_module = config .modules diff --git a/fmo_server/src/federation/observer.rs b/fmo_server/src/federation/observer.rs index ae982f6..70aa33f 100644 --- a/fmo_server/src/federation/observer.rs +++ b/fmo_server/src/federation/observer.rs @@ -6,8 +6,8 @@ use bitcoin::hashes::Hash; use bitcoin::{Address, OutPoint, Txid}; use chrono::{DateTime, NaiveDate}; use deadpool_postgres::{GenericClient, Runtime, Transaction}; -use fedimint_api_client::api::net::Connector; use fedimint_api_client::api::DynGlobalApi; +use fedimint_connectors::ConnectorRegistry; use fedimint_core::config::{ClientConfig, FederationId}; use fedimint_core::core::DynModuleConsensusItem; use fedimint_core::encoding::Encodable; @@ -52,6 +52,7 @@ pub struct FederationObserver { mempool_url: String, task_group: TaskGroup, consensus_meta_cache: ConsensusMetaCache, + connectors: ConnectorRegistry, } impl FederationObserver { @@ -68,12 +69,15 @@ impl FederationObserver { pool_config.create_pool(Some(Runtime::Tokio1), NoTls) }?; + let connectors = ConnectorRegistry::build_from_client_env()?.bind().await?; + let slf = FederationObserver { connection_pool, admin_auth: admin_auth.to_owned(), mempool_url: mempool_url.to_owned(), task_group: Default::default(), consensus_meta_cache: Default::default(), + connectors, }; slf.setup_schema().await?; @@ -92,6 +96,10 @@ impl FederationObserver { Ok(slf) } + pub fn connectors(&self) -> &ConnectorRegistry { + &self.connectors + } + async fn spawn_observer(&self, federation: Federation) { let slf = self.clone(); @@ -427,9 +435,8 @@ impl FederationObserver { return Ok(federation_id); } - let config = Connector::default() - .download_from_invite_code(invite) - .await?; + let (config, _api) = + fedimint_api_client::download_from_invite_code(&self.connectors, invite).await?; self.connection() .await? @@ -538,15 +545,13 @@ impl FederationObserver { federation_id: FederationId, config: ClientConfig, ) -> anyhow::Result<()> { - let api = DynGlobalApi::from_endpoints( - config - .global - .api_endpoints - .iter() - .map(|(&peer_id, peer_url)| (peer_id, peer_url.url.clone())), - &None, - ) - .await?; + let peers = config + .global + .api_endpoints + .iter() + .map(|(&peer_id, peer_url)| (peer_id, peer_url.url.clone())) + .collect(); + let api = DynGlobalApi::new(self.connectors.clone(), peers, None)?; let decoders = decoders_from_config(&config); info!("Starting background job for {federation_id}"); diff --git a/justfile b/justfile index b26197b..5bf52a6 100644 --- a/justfile +++ b/justfile @@ -23,7 +23,6 @@ build_package PACKAGE *ARGS: build *ARGS: just build_package fmo_server {{ARGS}} - just build_package fmo_frontend --target wasm32-unknown-unknown {{ARGS}} # run `cargo check` on everything check_package PACKAGE *ARGS: @@ -36,7 +35,6 @@ check_package PACKAGE *ARGS: check *ARGS: just check_package fmo_server {{ARGS}} - just check_package fmo_frontend --target wasm32-unknown-unknown {{ARGS}} # run all checks recommended before opening a PR final-check: lint clippy @@ -78,7 +76,6 @@ test_package PACKAGE: test: just test_package fmo_server - just test_package fmo_frontend --target wasm32-unknown-unknown # run and restart on changes watch *ARGS="-x run": @@ -96,7 +93,6 @@ clippy_package PACKAGE *ARGS="--locked": clippy *ARGS="--locked": just clippy_package fmo_server {{ARGS}} - RUSTFLAGS="$RUSTFLAGS --cfg getrandom_backend=\"wasm_js\"" just clippy_package fmo_frontend --target wasm32-unknown-unknown {{ARGS}} # run `cargo clippy --fix` on everything clippy_fix-package PACKAGE *ARGS="--locked --offline": @@ -104,7 +100,6 @@ clippy_fix-package PACKAGE *ARGS="--locked --offline": clippy-fix *ARGS="--locked --offline": just clippy_fix-package fmo_server {{ARGS}} - just clippy_fix-package fmo_frontend --target wasm32-unknown-unknown {{ARGS}} # run `semgrep` semgrep: diff --git a/justfile.fmo.just b/justfile.fmo.just index 644e326..9287c44 100644 --- a/justfile.fmo.just +++ b/justfile.fmo.just @@ -10,9 +10,6 @@ pg_backup: pg_restore BACKUP_FILE: ./scripts/pg_dev/restore.sh {{BACKUP_FILE}} -serve_frontend: - RUSTFLAGS=--cfg=web_sys_unstable_apis trunk serve fmo_frontend/index.html - # run the backend server run *ARGS: cargo run -p fmo_server {{ARGS}} diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 1ce304b..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,15 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: { - files: ["*.html", "**/*.rs"], - }, - plugins: [ - ], - // https://github.com/fedimint/ui/blob/master/packages/ui/src/theme.tsx - theme: { - fontFamily: { - heading: ['Space Grotesk', 'monospace'], - body: ['Inter', 'sans-serif'], - }, - }, -};