From c99328ff45ee91b47424718e5105f3e40722a20b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cramfox=E2=80=9D?= <“kasey@n0.computer”> Date: Wed, 12 Feb 2025 15:29:12 -0500 Subject: [PATCH 1/5] blog: ffi updates & removing ffi references to the website --- api-code-examples/Cargo.lock | 5419 ----------------- api-code-examples/Cargo.toml | 87 - api-code-examples/README.md | 39 - api-code-examples/api.mjs | 833 --- api-code-examples/index.js | 19 - api-code-examples/nodejs/authors-create.js | 8 - api-code-examples/nodejs/authors-list.js | 14 - api-code-examples/nodejs/blobs-add.js | 14 - api-code-examples/nodejs/blobs-list-blobs.js | 18 - .../nodejs/blobs-list-collections.js | 61 - .../nodejs/blobs-list-incomplete-blobs.js | 20 - api-code-examples/nodejs/docs-delete.js | 43 - api-code-examples/nodejs/docs-drop.js | 21 - api-code-examples/nodejs/docs-export.js | 39 - api-code-examples/nodejs/docs-get.js | 28 - api-code-examples/nodejs/docs-import.js | 42 - api-code-examples/nodejs/docs-join.js | 38 - api-code-examples/nodejs/docs-keys.js | 21 - api-code-examples/nodejs/docs-list.js | 21 - api-code-examples/nodejs/docs-set.js | 30 - api-code-examples/nodejs/docs-share.js | 38 - api-code-examples/nodejs/docs-watch.js | 52 - api-code-examples/package.json | 13 - api-code-examples/python/authors-create.py | 18 - api-code-examples/python/authors-list.py | 30 - api-code-examples/python/blobs-add.py | 110 - api-code-examples/python/blobs-list-blobs.py | 28 - .../python/blobs-list-collections.py | 79 - .../python/blobs-list-incomplete-blobs.py | 19 - api-code-examples/python/docs-create.py | 21 - api-code-examples/python/docs-delete.py | 60 - api-code-examples/python/docs-drop.py | 43 - api-code-examples/python/docs-export.py | 81 - api-code-examples/python/docs-get.py | 38 - api-code-examples/python/docs-import.py | 77 - api-code-examples/python/docs-join.py | 22 - api-code-examples/python/docs-keys.py | 43 - api-code-examples/python/docs-list.py | 37 - api-code-examples/python/docs-set.py | 39 - api-code-examples/python/docs-share.py | 29 - api-code-examples/python/docs-watch.py | 71 - api-code-examples/run_nodejs.sh | 3 - api-code-examples/run_python.sh | 38 - api-code-examples/run_rust.sh | 40 - api-code-examples/rust/authors-create.rs | 11 - api-code-examples/rust/authors-list.rs | 20 - api-code-examples/rust/blobs-add.rs | 17 - api-code-examples/rust/blobs-list-blobs.rs | 24 - .../rust/blobs-list-collections.rs | 65 - .../rust/blobs-list-incomplete-blobs.rs | 22 - api-code-examples/rust/docs-create.rs | 15 - api-code-examples/rust/docs-delete.rs | 70 - api-code-examples/rust/docs-drop.rs | 41 - api-code-examples/rust/docs-export.rs | 72 - api-code-examples/rust/docs-get.rs | 30 - api-code-examples/rust/docs-import.rs | 69 - api-code-examples/rust/docs-join.rs | 16 - api-code-examples/rust/docs-keys.rs | 50 - api-code-examples/rust/docs-list.rs | 20 - api-code-examples/rust/docs-set.rs | 30 - api-code-examples/rust/docs-share.rs | 26 - api-code-examples/rust/docs-watch.rs | 80 - api-code-examples/swift/doc-get.swift | 8 - api-code-examples/swift/doc-set.swift | 8 - api-code-examples/yarn.lock | 81 - src/app/blog/ffi-updates/page.mdx | 73 + src/app/docs/layout.jsx | 1 - src/app/docs/page.mdx | 19 +- src/app/docs/protocols/docs/page.mdx | 2 +- src/app/docs/sdks/page.mdx | 18 - src/app/page.mdx | 90 +- src/components/Libraries.jsx | 38 - 72 files changed, 88 insertions(+), 8772 deletions(-) delete mode 100644 api-code-examples/Cargo.lock delete mode 100644 api-code-examples/Cargo.toml delete mode 100644 api-code-examples/README.md delete mode 100644 api-code-examples/api.mjs delete mode 100644 api-code-examples/index.js delete mode 100644 api-code-examples/nodejs/authors-create.js delete mode 100644 api-code-examples/nodejs/authors-list.js delete mode 100644 api-code-examples/nodejs/blobs-add.js delete mode 100644 api-code-examples/nodejs/blobs-list-blobs.js delete mode 100644 api-code-examples/nodejs/blobs-list-collections.js delete mode 100644 api-code-examples/nodejs/blobs-list-incomplete-blobs.js delete mode 100644 api-code-examples/nodejs/docs-delete.js delete mode 100644 api-code-examples/nodejs/docs-drop.js delete mode 100644 api-code-examples/nodejs/docs-export.js delete mode 100644 api-code-examples/nodejs/docs-get.js delete mode 100644 api-code-examples/nodejs/docs-import.js delete mode 100644 api-code-examples/nodejs/docs-join.js delete mode 100644 api-code-examples/nodejs/docs-keys.js delete mode 100644 api-code-examples/nodejs/docs-list.js delete mode 100644 api-code-examples/nodejs/docs-set.js delete mode 100644 api-code-examples/nodejs/docs-share.js delete mode 100644 api-code-examples/nodejs/docs-watch.js delete mode 100644 api-code-examples/package.json delete mode 100644 api-code-examples/python/authors-create.py delete mode 100644 api-code-examples/python/authors-list.py delete mode 100644 api-code-examples/python/blobs-add.py delete mode 100644 api-code-examples/python/blobs-list-blobs.py delete mode 100644 api-code-examples/python/blobs-list-collections.py delete mode 100644 api-code-examples/python/blobs-list-incomplete-blobs.py delete mode 100644 api-code-examples/python/docs-create.py delete mode 100644 api-code-examples/python/docs-delete.py delete mode 100644 api-code-examples/python/docs-drop.py delete mode 100644 api-code-examples/python/docs-export.py delete mode 100644 api-code-examples/python/docs-get.py delete mode 100644 api-code-examples/python/docs-import.py delete mode 100644 api-code-examples/python/docs-join.py delete mode 100644 api-code-examples/python/docs-keys.py delete mode 100644 api-code-examples/python/docs-list.py delete mode 100644 api-code-examples/python/docs-set.py delete mode 100644 api-code-examples/python/docs-share.py delete mode 100644 api-code-examples/python/docs-watch.py delete mode 100755 api-code-examples/run_nodejs.sh delete mode 100755 api-code-examples/run_python.sh delete mode 100755 api-code-examples/run_rust.sh delete mode 100644 api-code-examples/rust/authors-create.rs delete mode 100644 api-code-examples/rust/authors-list.rs delete mode 100644 api-code-examples/rust/blobs-add.rs delete mode 100644 api-code-examples/rust/blobs-list-blobs.rs delete mode 100644 api-code-examples/rust/blobs-list-collections.rs delete mode 100644 api-code-examples/rust/blobs-list-incomplete-blobs.rs delete mode 100644 api-code-examples/rust/docs-create.rs delete mode 100644 api-code-examples/rust/docs-delete.rs delete mode 100644 api-code-examples/rust/docs-drop.rs delete mode 100644 api-code-examples/rust/docs-export.rs delete mode 100644 api-code-examples/rust/docs-get.rs delete mode 100644 api-code-examples/rust/docs-import.rs delete mode 100644 api-code-examples/rust/docs-join.rs delete mode 100644 api-code-examples/rust/docs-keys.rs delete mode 100644 api-code-examples/rust/docs-list.rs delete mode 100644 api-code-examples/rust/docs-set.rs delete mode 100644 api-code-examples/rust/docs-share.rs delete mode 100644 api-code-examples/rust/docs-watch.rs delete mode 100644 api-code-examples/swift/doc-get.swift delete mode 100644 api-code-examples/swift/doc-set.swift delete mode 100644 api-code-examples/yarn.lock create mode 100644 src/app/blog/ffi-updates/page.mdx delete mode 100644 src/app/docs/sdks/page.mdx diff --git a/api-code-examples/Cargo.lock b/api-code-examples/Cargo.lock deleted file mode 100644 index b35ae182..00000000 --- a/api-code-examples/Cargo.lock +++ /dev/null @@ -1,5419 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "acto" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c372578ce4215ccf94ec3f3585fbb6a902e47d07b064ff8a55d850ffb5025e" -dependencies = [ - "parking_lot", - "pin-project-lite", - "rustc_version", - "smol_str", - "tokio", - "tracing", -] - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - -[[package]] -name = "aead" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "bytes", - "crypto-common", - "generic-array", -] - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anyhow" -version = "1.0.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "asn1-rs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" -dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", - "synstructure", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-recursion" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "async-trait" -version = "0.1.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "attohttpc" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" -dependencies = [ - "http 0.2.12", - "log", - "url", -] - -[[package]] -name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" - -[[package]] -name = "backoff" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" -dependencies = [ - "getrandom", - "instant", - "rand", -] - -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - -[[package]] -name = "bao-tree" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f7a89a8ee5889d2593ae422ce6e1bb03e48a0e8a16e4fa0882dfcbe7e182ef" -dependencies = [ - "bytes", - "futures-lite 2.4.0", - "genawaiter", - "iroh-blake3", - "iroh-io", - "positioned-io", - "range-collections", - "self_cell", - "smallvec", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "binary-merge" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597bb81c80a54b6a4381b23faba8d7774b144c94cbd1d6fe3f1329bd776554ab" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bounded-integer" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a6932c88f1d2c29533a3b8a5f5a2f84cc19c3339b431677c3160c5c2e6ca85" - -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" -dependencies = [ - "serde", -] - -[[package]] -name = "cc" -version = "1.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baee610e9452a8f6f0a1b6194ec09ff9e2d85dea54432acdae41aa0761c95d70" -dependencies = [ - "shlex", -] - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-targets 0.52.6", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "cobs" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" - -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - -[[package]] -name = "cordyceps" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec10f0a762d93c4498d2e97a333805cb6250d60bead623f71d8034f9a4152ba3" -dependencies = [ - "loom", - "tracing", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cpufeatures" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "rand_core", - "typenum", -] - -[[package]] -name = "crypto_box" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16182b4f39a82ec8a6851155cc4c0cda3065bb1db33651726a29e1951de0f009" -dependencies = [ - "aead", - "chacha20", - "crypto_secretbox", - "curve25519-dalek", - "salsa20", - "serdect", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto_secretbox" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" -dependencies = [ - "aead", - "chacha20", - "cipher", - "generic-array", - "poly1305", - "salsa20", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest", - "fiat-crypto", - "rustc_version", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - -[[package]] -name = "data-encoding" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" - -[[package]] -name = "der" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" -dependencies = [ - "const-oid", - "der_derive", - "zeroize", -] - -[[package]] -name = "der-parser" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" -dependencies = [ - "asn1-rs", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "der_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", - "unicode-xid", -] - -[[package]] -name = "diatomic-waker" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "dlopen2" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" -dependencies = [ - "libc", - "once_cell", - "winapi", -] - -[[package]] -name = "document-features" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" -dependencies = [ - "litrs", -] - -[[package]] -name = "dtoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" - -[[package]] -name = "duct" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" -dependencies = [ - "libc", - "once_cell", - "os_pipe", - "shared_child", -] - -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "serde", - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core", - "serde", - "sha2", - "subtle", - "zeroize", -] - -[[package]] -name = "educe" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "embedded-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" - -[[package]] -name = "embedded-io" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" - -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "enum-ordinalize" -version = "3.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "enumflags2" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" -dependencies = [ - "enumflags2_derive", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" -dependencies = [ - "serde", -] - -[[package]] -name = "erased_set" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a5aa24577083f8190ad401e376b55887c7cd9083ae95d83ceec5d28ea78125" - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" -dependencies = [ - "event-listener 5.3.1", - "pin-project-lite", -] - -[[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "rand_core", - "subtle", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - -[[package]] -name = "fixedbitset" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" - -[[package]] -name = "flume" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" -dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-buffered" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34acda8ae8b63fbe0b2195c998b180cff89a8212fb2622a78b572a9f1c6f7684" -dependencies = [ - "cordyceps", - "diatomic-waker", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-concurrency" -version = "7.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b724496da7c26fcce66458526ce68fc2ecf4aaaa994281cf322ded5755520c" -dependencies = [ - "fixedbitset", - "futures-buffered", - "futures-core", - "futures-lite 1.13.0", - "pin-project", - "slab", - "smallvec", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-lite" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f1fa2f9765705486b33fd2acf1577f8ec449c2ba1f318ae5447697b7c08d210" -dependencies = [ - "fastrand 2.1.1", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "genawaiter" -version = "0.99.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c86bd0361bcbde39b13475e6e36cb24c329964aa2611be285289d1e4b751c1a0" -dependencies = [ - "futures-core", - "genawaiter-macro", - "genawaiter-proc-macro", - "proc-macro-hack", -] - -[[package]] -name = "genawaiter-macro" -version = "0.99.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b32dfe1fdfc0bbde1f22a5da25355514b5e450c33a6af6770884c8750aedfbc" - -[[package]] -name = "genawaiter-proc-macro" -version = "0.99.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784f84eebc366e15251c4a8c3acee82a6a6f427949776ecb88377362a9621738" -dependencies = [ - "proc-macro-error", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "generator" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows 0.48.0", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "governor" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" -dependencies = [ - "cfg-if", - "dashmap", - "futures", - "futures-timer", - "no-std-compat", - "nonzero_ext", - "parking_lot", - "portable-atomic", - "quanta", - "rand", - "smallvec", - "spinning_top", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core", - "subtle", -] - -[[package]] -name = "h2" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.1.0", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashlink" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hickory-proto" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "hickory-proto" -version = "0.25.0-alpha.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8270a1857fb962b9914aafd46a89a187a4e63d0eb4190c327e7c7b8256a2d055" -dependencies = [ - "async-recursion", - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.5.0", - "ipnet", - "once_cell", - "rand", - "thiserror", - "time", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.25.0-alpha.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c110355b5703070d9e29c344d79818a7cde3de9c27fc35750defea6074b0ad" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto 0.25.0-alpha.2", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot", - "rand", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - -[[package]] -name = "hmac-sha1" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b05da5b9e5d4720bfb691eebb2b9d42da3570745da71eac8a1f5bb7e59aab88" -dependencies = [ - "hmac", - "sha1", -] - -[[package]] -name = "hmac-sha256" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3688e69b38018fec1557254f64c8dc2cc8ec502890182f395dbb0aa997aa5735" - -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - -[[package]] -name = "hostname-validator" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.1.0", -] - -[[package]] -name = "http-body-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" -dependencies = [ - "bytes", - "futures-util", - "http 1.1.0", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2", - "http 1.1.0", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" -dependencies = [ - "futures-util", - "http 1.1.0", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", - "webpki-roots", -] - -[[package]] -name = "hyper-util" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body", - "hyper", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core 0.52.0", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locid" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" - -[[package]] -name = "icu_properties" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" - -[[package]] -name = "icu_provider" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "igd-next" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76b0d7d4541def58a37bf8efc559683f21edce7c82f0d866c93ac21f7e098f93" -dependencies = [ - "async-trait", - "attohttpc", - "bytes", - "futures", - "http 1.1.0", - "http-body-util", - "hyper", - "hyper-util", - "log", - "rand", - "tokio", - "url", - "xmltree", -] - -[[package]] -name = "indexmap" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" -dependencies = [ - "equivalent", - "hashbrown 0.15.1", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - -[[package]] -name = "inplace-vec-builder" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf64c2edc8226891a71f127587a2861b132d2b942310843814d5001d99a1d307" -dependencies = [ - "smallvec", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2", - "widestring", - "windows-sys 0.48.0", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" - -[[package]] -name = "iroh" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47cbc2cde0ac94db88a2f0442cf0d18f1f59403cc21c81f7994a6287e78e60dd" -dependencies = [ - "anyhow", - "async-channel", - "bao-tree", - "bytes", - "derive_more", - "futures-buffered", - "futures-lite 2.4.0", - "futures-util", - "genawaiter", - "hex", - "iroh-base", - "iroh-blobs", - "iroh-docs", - "iroh-gossip", - "iroh-io", - "iroh-metrics", - "iroh-net", - "iroh-quinn", - "iroh-router", - "nested_enum_utils", - "num_cpus", - "parking_lot", - "portable-atomic", - "postcard", - "quic-rpc", - "quic-rpc-derive", - "rand", - "ref-cast", - "serde", - "serde-error", - "strum 0.25.0", - "tempfile", - "thiserror", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "url", - "walkdir", -] - -[[package]] -name = "iroh-base" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c21fd8eb71f166a172a9779c2244db992218e9a9bd929b9df6fc355d2b630c9" -dependencies = [ - "aead", - "anyhow", - "crypto_box", - "data-encoding", - "derive_more", - "ed25519-dalek", - "getrandom", - "hex", - "iroh-blake3", - "once_cell", - "postcard", - "rand", - "rand_core", - "redb 2.2.0", - "serde", - "ssh-key", - "thiserror", - "ttl_cache", - "url", - "zeroize", -] - -[[package]] -name = "iroh-blake3" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbba31f40a650f58fa28dd585a8ca76d8ae3ba63aacab4c8269004a0c803930" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", -] - -[[package]] -name = "iroh-blobs" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce615635f60b5a01f6d066084cc0fca8281df594b6b735840d4796a06422604" -dependencies = [ - "anyhow", - "async-channel", - "bao-tree", - "bytes", - "chrono", - "derive_more", - "futures-buffered", - "futures-lite 2.4.0", - "genawaiter", - "hashlink", - "hex", - "iroh-base", - "iroh-io", - "iroh-metrics", - "iroh-net", - "iroh-quinn", - "iroh-router", - "num_cpus", - "oneshot", - "parking_lot", - "pin-project", - "postcard", - "rand", - "range-collections", - "redb 1.5.1", - "redb 2.2.0", - "reflink-copy", - "self_cell", - "serde", - "serde-error", - "smallvec", - "tempfile", - "thiserror", - "tokio", - "tokio-util", - "tracing", - "tracing-futures", -] - -[[package]] -name = "iroh-docs" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b4e9283e9a05a1e1c2b702ea743445a8e41ffd651deccddc2884d05f941db58" -dependencies = [ - "anyhow", - "async-channel", - "bytes", - "derive_more", - "ed25519-dalek", - "futures-buffered", - "futures-lite 2.4.0", - "futures-util", - "hex", - "iroh-base", - "iroh-blake3", - "iroh-blobs", - "iroh-gossip", - "iroh-metrics", - "iroh-net", - "iroh-router", - "lru", - "num_enum", - "postcard", - "rand", - "rand_core", - "redb 1.5.1", - "redb 2.2.0", - "self_cell", - "serde", - "strum 0.25.0", - "tempfile", - "thiserror", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - -[[package]] -name = "iroh-examples" -version = "0.28.1" -dependencies = [ - "anyhow", - "futures-lite 2.4.0", - "iroh", - "tempfile", - "tokio", -] - -[[package]] -name = "iroh-gossip" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c078057037f0e741c5ef285c67fd9cfdb928163dd046fb547089898bdb02990e" -dependencies = [ - "anyhow", - "async-channel", - "bytes", - "derive_more", - "ed25519-dalek", - "futures-concurrency", - "futures-lite 2.4.0", - "futures-util", - "indexmap", - "iroh-base", - "iroh-blake3", - "iroh-metrics", - "iroh-net", - "iroh-router", - "nested_enum_utils", - "postcard", - "quic-rpc", - "quic-rpc-derive", - "rand", - "rand_core", - "serde", - "serde-error", - "strum 0.26.3", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "iroh-io" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e302c5ad649c6a7aa9ae8468e1c4dc2469321af0c6de7341c1be1bdaab434b" -dependencies = [ - "bytes", - "futures-lite 2.4.0", - "pin-project", - "smallvec", - "tokio", -] - -[[package]] -name = "iroh-metrics" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d40f2ee3997489d47403d204a06514ed65373d224b5b43a8ea133f543e5db1" -dependencies = [ - "anyhow", - "erased_set", - "http-body-util", - "hyper", - "hyper-util", - "once_cell", - "prometheus-client", - "reqwest", - "serde", - "struct_iterable", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "iroh-net" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40e1f1f9029e198c6d05bd232d3239814b0a66ac4668978729b709aeb6a44e2" -dependencies = [ - "anyhow", - "backoff", - "base64", - "bytes", - "der", - "derive_more", - "duct", - "futures-buffered", - "futures-concurrency", - "futures-lite 2.4.0", - "futures-sink", - "futures-util", - "genawaiter", - "governor", - "hex", - "hickory-proto 0.25.0-alpha.2", - "hickory-resolver", - "hostname", - "http 1.1.0", - "http-body-util", - "hyper", - "hyper-util", - "igd-next", - "iroh-base", - "iroh-metrics", - "iroh-quinn", - "iroh-quinn-proto", - "iroh-quinn-udp", - "libc", - "netdev", - "netlink-packet-core", - "netlink-packet-route", - "netlink-sys", - "netwatch", - "num_enum", - "once_cell", - "parking_lot", - "pin-project", - "pkarr", - "portmapper", - "postcard", - "rand", - "rcgen", - "reqwest", - "ring", - "rtnetlink", - "rustls", - "rustls-webpki", - "serde", - "smallvec", - "socket2", - "strum 0.26.3", - "stun-rs", - "surge-ping", - "swarm-discovery", - "thiserror", - "time", - "tokio", - "tokio-rustls", - "tokio-stream", - "tokio-tungstenite", - "tokio-tungstenite-wasm", - "tokio-util", - "tracing", - "tungstenite", - "url", - "watchable", - "webpki-roots", - "windows 0.51.1", - "wmi", - "x509-parser", - "z32", -] - -[[package]] -name = "iroh-quinn" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ba75a5c57cff299d2d7ca1ddee053f66339d1756bd79ec637bcad5aa61100e" -dependencies = [ - "bytes", - "iroh-quinn-proto", - "iroh-quinn-udp", - "pin-project-lite", - "rustc-hash", - "rustls", - "socket2", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "iroh-quinn-proto" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c869ba52683d3d067c83ab4c00a2fda18eaf13b1434d4c1352f428674d4a5d" -dependencies = [ - "bytes", - "rand", - "ring", - "rustc-hash", - "rustls", - "rustls-platform-verifier", - "slab", - "thiserror", - "tinyvec", - "tracing", -] - -[[package]] -name = "iroh-quinn-udp" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfcfc0abc2fdf8cf18a6c72893b7cbebeac2274a3b1306c1760c48c0e10ac5e0" -dependencies = [ - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] - -[[package]] -name = "iroh-router" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fd18ec6325dd3f01625f12c01acff50a4374ee1ab708e7b2078885fd63ad30" -dependencies = [ - "anyhow", - "futures-buffered", - "futures-lite 2.4.0", - "futures-util", - "iroh-net", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "libc" -version = "0.2.161" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" - -[[package]] -name = "libm" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "litemap" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" - -[[package]] -name = "litrs" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.1", -] - -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "mainline" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b751ffb57303217bcae8f490eee6044a5b40eadf6ca05ff476cad37e7b7970d" -dependencies = [ - "bytes", - "crc", - "ed25519-dalek", - "flume", - "lru", - "rand", - "serde", - "serde_bencode", - "serde_bytes", - "sha1_smol", - "thiserror", - "tracing", -] - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "md5" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" - -[[package]] -name = "memalloc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1" - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" -dependencies = [ - "adler2", -] - -[[package]] -name = "mio" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" -dependencies = [ - "hermit-abi", - "libc", - "wasi", - "windows-sys 0.52.0", -] - -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom", -] - -[[package]] -name = "nested_enum_utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f256ef99e7ac37428ef98c89bef9d84b590172de4bbfbe81b68a4cd3abadb32" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "netdev" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7516ad2c46cc25da098ed7d6b9a0cbe9e1fbffbd04b1596148b95f2841179c83" -dependencies = [ - "dlopen2", - "libc", - "memalloc", - "netlink-packet-core", - "netlink-packet-route", - "netlink-sys", - "once_cell", - "system-configuration", - "windows-sys 0.52.0", -] - -[[package]] -name = "netlink-packet-core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" -dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", - "libc", - "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror", -] - -[[package]] -name = "netlink-proto" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b33524dc0968bfad349684447bfce6db937a9ac3332a1fe60c0c5a5ce63f21" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror", - "tokio", -] - -[[package]] -name = "netlink-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" -dependencies = [ - "bytes", - "futures", - "libc", - "log", - "tokio", -] - -[[package]] -name = "netwatch" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a639d52c0996ac640e2a7052a5265c8f71efdbdadc83188435ffc358b7ca931" -dependencies = [ - "anyhow", - "bytes", - "derive_more", - "futures-lite 2.4.0", - "futures-sink", - "futures-util", - "libc", - "netdev", - "netlink-packet-core", - "netlink-packet-route", - "netlink-sys", - "once_cell", - "rtnetlink", - "serde", - "socket2", - "thiserror", - "time", - "tokio", - "tracing", - "windows 0.51.1", - "wmi", -] - -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", -] - -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nonzero_ext" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "object" -version = "0.36.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" -dependencies = [ - "memchr", -] - -[[package]] -name = "oid-registry" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" -dependencies = [ - "asn1-rs", -] - -[[package]] -name = "once_cell" -version = "1.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" - -[[package]] -name = "oneshot" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e296cf87e61c9cfc1a61c3c63a0f7f286ed4554e0e22be84e8a38e1d264a2a29" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "os_pipe" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p384" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p521" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" -dependencies = [ - "base16ct", - "ecdsa", - "elliptic-curve", - "primeorder", - "rand_core", - "sha2", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pem" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" -dependencies = [ - "base64", - "serde", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pest" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "pest_meta" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" -dependencies = [ - "once_cell", - "pest", - "sha2", -] - -[[package]] -name = "pin-project" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkarr" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7945a08031b7e14de57e8385cea3bcc7e10a88701595dc11d82551ba07bae13e" -dependencies = [ - "bytes", - "document-features", - "dyn-clone", - "ed25519-dalek", - "flume", - "futures", - "js-sys", - "lru", - "mainline", - "self_cell", - "simple-dns", - "thiserror", - "tracing", - "ureq", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "z32", -] - -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pnet_base" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cf6fb3ab38b68d01ab2aea03ed3d1132b4868fa4e06285f29f16da01c5f4c" -dependencies = [ - "no-std-net", -] - -[[package]] -name = "pnet_macros" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688b17499eee04a0408aca0aa5cba5fc86401d7216de8a63fdf7a4c227871804" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.87", -] - -[[package]] -name = "pnet_macros_support" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea925b72f4bd37f8eab0f221bbe4c78b63498350c983ffa9dd4bcde7e030f56" -dependencies = [ - "pnet_base", -] - -[[package]] -name = "pnet_packet" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a005825396b7fe7a38a8e288dbc342d5034dac80c15212436424fef8ea90ba" -dependencies = [ - "glob", - "pnet_base", - "pnet_macros", - "pnet_macros_support", -] - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" - -[[package]] -name = "portmapper" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d60045fdcfe8ff6b781cf1027fdbb08ed319d93aff7da4bedc018e3bc92226" -dependencies = [ - "anyhow", - "base64", - "bytes", - "derive_more", - "futures-lite 2.4.0", - "futures-util", - "igd-next", - "iroh-metrics", - "libc", - "netwatch", - "num_enum", - "rand", - "serde", - "smallvec", - "socket2", - "thiserror", - "time", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "positioned-io" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccabfeeb89c73adf4081f0dca7f8e28dbda90981a222ceea37f619e93ea6afe9" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "postcard" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f7f0a8d620d71c457dd1d47df76bb18960378da56af4527aaa10f515eee732e" -dependencies = [ - "cobs", - "embedded-io 0.4.0", - "embedded-io 0.6.1", - "postcard-derive", - "serde", -] - -[[package]] -name = "postcard-derive" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0239fa9c1d225d4b7eb69925c25c5e082307a141e470573fbbe3a817ce6a7a37" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "precis-core" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a414cabc93f5f45d53463e73b3d89d3c5c0dc4a34dbf6901f0c6358f017203" -dependencies = [ - "precis-tools", - "ucd-parse", - "unicode-normalization", -] - -[[package]] -name = "precis-profiles" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58e2841ef58164e2626464d4fde67fa301d5e2c78a10300c1756312a03b169f" -dependencies = [ - "lazy_static", - "precis-core", - "precis-tools", - "unicode-normalization", -] - -[[package]] -name = "precis-tools" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016da884bc4c2c4670211641abef402d15fa2b06c6e9088ff270dac93675aee2" -dependencies = [ - "lazy_static", - "regex", - "ucd-parse", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro-crate" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18f33027081eba0a6d8aba6d1b1c3a3be58cbb12106341c2d5759fcd9b5277e7" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a5b4b77fdb63c1eca72173d68d24501c54ab1269409f6b672c85deb18af69de" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "syn-mid", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prometheus-client" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" -dependencies = [ - "dtoa", - "itoa", - "parking_lot", - "prometheus-client-derive-encode", -] - -[[package]] -name = "prometheus-client-derive-encode" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "quanta" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi", - "web-sys", - "winapi", -] - -[[package]] -name = "quic-rpc" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d8431b2e7c22929347b61a354d4936d71fe7ab1e6b0475dc50e98276970dfec" -dependencies = [ - "anyhow", - "bincode", - "derive_more", - "educe", - "flume", - "futures-lite 2.4.0", - "futures-sink", - "futures-util", - "hex", - "iroh-quinn", - "pin-project", - "serde", - "slab", - "tokio", - "tokio-serde", - "tokio-util", - "tracing", -] - -[[package]] -name = "quic-rpc-derive" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403bc8506c847468e00170dbbbfe2c54d13b090031bcbe474cd3faea021cbd9f" -dependencies = [ - "proc-macro2", - "quic-rpc", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quinn" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" -dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "quinn-proto" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" -dependencies = [ - "bytes", - "rand", - "ring", - "rustc-hash", - "rustls", - "slab", - "thiserror", - "tinyvec", - "tracing", -] - -[[package]] -name = "quinn-udp" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] - -[[package]] -name = "quote" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "quoted-string-parser" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc75379cdb451d001f1cb667a9f74e8b355e9df84cc5193513cbe62b96fc5e9" -dependencies = [ - "pest", - "pest_derive", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "range-collections" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca9edd21e2db51000ac63eccddabba622f826e631a60be7bade9bd6a76b69537" -dependencies = [ - "binary-merge", - "inplace-vec-builder", - "ref-cast", - "smallvec", -] - -[[package]] -name = "raw-cpuid" -version = "11.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "rcgen" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48406db8ac1f3cbc7dcdb56ec355343817958a356ff430259bb07baf7607e1e1" -dependencies = [ - "pem", - "ring", - "time", - "yasna", -] - -[[package]] -name = "redb" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7f82ecd6ba647a39dd1a7172b8a1cd9453c0adee6da20cb553d83a9a460fa5" -dependencies = [ - "libc", -] - -[[package]] -name = "redb" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b1de48a7cf7ba193e81e078d17ee2b786236eed1d3f7c60f8a09545efc4925" -dependencies = [ - "libc", -] - -[[package]] -name = "redox_syscall" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "ref-cast" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "reflink-copy" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc31414597d1cd7fdd2422798b7652a6329dda0fe0219e6335a13d5bcaa9aeb6" -dependencies = [ - "cfg-if", - "rustix", - "windows 0.58.0", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.8", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.5", -] - -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "reqwest" -version = "0.12.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" -dependencies = [ - "base64", - "bytes", - "futures-core", - "futures-util", - "http 1.1.0", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pemfile", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "windows-registry", -] - -[[package]] -name = "resolv-conf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "ring" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rsa" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" -dependencies = [ - "const-oid", - "digest", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core", - "sha2", - "signature", - "spki", - "subtle", - "zeroize", -] - -[[package]] -name = "rtnetlink" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" -dependencies = [ - "futures", - "log", - "netlink-packet-core", - "netlink-packet-route", - "netlink-packet-utils", - "netlink-proto", - "netlink-sys", - "nix", - "thiserror", - "tokio", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc-hash" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom", -] - -[[package]] -name = "rustix" -version = "0.38.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.23.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" - -[[package]] -name = "rustls-platform-verifier" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" -dependencies = [ - "core-foundation", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls", - "rustls-native-certs", - "rustls-platform-verifier-android", - "rustls-webpki", - "security-framework", - "security-framework-sys", - "webpki-roots", - "winapi", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -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 = "schannel" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "num-bigint", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "self_cell" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" - -[[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" - -[[package]] -name = "serde" -version = "1.0.214" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-error" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342110fb7a5d801060c885da03bf91bfa7c7ca936deafcc64bb6706375605d47" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_bencode" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a70dfc7b7438b99896e7f8992363ab8e2c4ba26aa5ec675d32d1c3c2c33d413e" -dependencies = [ - "serde", - "serde_bytes", -] - -[[package]] -name = "serde_bytes" -version = "0.11.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.214" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "serde_json" -version = "1.0.132" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha1_smol" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shared_child" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core", -] - -[[package]] -name = "simple-dns" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01607fe2e61894468c6dc0b26103abb073fb08b79a3d9e4b6d76a1a341549958" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -dependencies = [ - "serde", -] - -[[package]] -name = "smol_str" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9" - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spinning_top" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "ssh-cipher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" -dependencies = [ - "cipher", - "ssh-encoding", -] - -[[package]] -name = "ssh-encoding" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" -dependencies = [ - "base64ct", - "pem-rfc7468", - "sha2", -] - -[[package]] -name = "ssh-key" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3" -dependencies = [ - "ed25519-dalek", - "p256", - "p384", - "p521", - "rand_core", - "rsa", - "sec1", - "sha2", - "signature", - "ssh-cipher", - "ssh-encoding", - "subtle", - "zeroize", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "struct_iterable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "849a064c6470a650b72e41fa6c057879b68f804d113af92900f27574828e7712" -dependencies = [ - "struct_iterable_derive", - "struct_iterable_internal", -] - -[[package]] -name = "struct_iterable_derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb939ce88a43ea4e9d012f2f6b4cc789deb2db9d47bad697952a85d6978662c" -dependencies = [ - "erased-serde", - "proc-macro2", - "quote", - "struct_iterable_internal", - "syn 2.0.87", -] - -[[package]] -name = "struct_iterable_internal" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9426b2a0c03e6cc2ea8dbc0168dbbf943f88755e409fb91bcb8f6a268305f4a" - -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" -dependencies = [ - "strum_macros 0.25.3", -] - -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros 0.26.4", -] - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.87", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.87", -] - -[[package]] -name = "stun-rs" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79cc624c9a747353810310af44f1f03f71eb4561284a894acc0396e6d0de76e" -dependencies = [ - "base64", - "bounded-integer", - "byteorder", - "crc", - "enumflags2", - "fallible-iterator", - "hmac-sha1", - "hmac-sha256", - "hostname-validator", - "lazy_static", - "md5", - "paste", - "precis-core", - "precis-profiles", - "quoted-string-parser", - "rand", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "surge-ping" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbf95ce4c7c5b311d2ce3f088af2b93edef0f09727fa50fbe03c7a979afce77" -dependencies = [ - "hex", - "parking_lot", - "pnet_packet", - "rand", - "socket2", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "swarm-discovery" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39769914108ae68e261d85ceac7bce7095947130f79c29d4535e9b31fc702a40" -dependencies = [ - "acto", - "anyhow", - "hickory-proto 0.24.1", - "rand", - "socket2", - "tokio", - "tracing", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn-mid" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea305d57546cc8cd04feb14b62ec84bf17f50e3f7b12560d7bfa9265f39d9ed" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "sync_wrapper" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tempfile" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" -dependencies = [ - "cfg-if", - "fastrand 2.1.1", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "thiserror" -version = "1.0.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinyvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" -dependencies = [ - "rustls", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-serde" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911a61637386b789af998ee23f50aa30d5fd7edcec8d6d3dedae5e5815205466" -dependencies = [ - "bincode", - "bytes", - "educe", - "futures-core", - "futures-sink", - "pin-project", - "serde", -] - -[[package]] -name = "tokio-stream" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", -] - -[[package]] -name = "tokio-tungstenite-wasm" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e57a65894797a018b28345fa298a00c450a574aa9671e50b18218a6292a55ac" -dependencies = [ - "futures-channel", - "futures-util", - "http 1.1.0", - "httparse", - "js-sys", - "thiserror", - "tokio", - "tokio-tungstenite", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "tokio-util" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "futures-util", - "hashbrown 0.14.5", - "pin-project-lite", - "slab", - "tokio", -] - -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" - -[[package]] -name = "toml_edit" -version = "0.22.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "ttl_cache" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4189890526f0168710b6ee65ceaedf1460c48a14318ceec933cb26baa492096a" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.1.0", - "httparse", - "log", - "rand", - "sha1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "ucd-parse" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06ff81122fcbf4df4c1660b15f7e3336058e7aec14437c9f85c6b31a0f279b9" -dependencies = [ - "regex-lite", -] - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "unicode-bidi" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" - -[[package]] -name = "unicode-ident" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle", -] - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "ureq" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" -dependencies = [ - "base64", - "log", - "once_cell", - "rustls", - "rustls-pki-types", - "url", - "webpki-roots", -] - -[[package]] -name = "url" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" -dependencies = [ - "form_urlencoded", - "idna 1.0.3", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" -dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.87", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" - -[[package]] -name = "watchable" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45b42a2f611916b5965120a9cde2b60f2db4454826dd9ad5e6f47c24a5b3b259" -dependencies = [ - "event-listener 4.0.3", - "futures-util", - "parking_lot", - "thiserror", -] - -[[package]] -name = "web-sys" -version = "0.3.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.26.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "widestring" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows" -version = "0.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" -dependencies = [ - "windows-core 0.51.1", - "windows-targets 0.48.5", -] - -[[package]] -name = "windows" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" -dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-result", - "windows-strings", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-implement" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "windows-interface" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "windows-registry" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" -dependencies = [ - "windows-result", - "windows-strings", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winnow" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wmi" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff00ac1309d4c462be86f03a55e409509e8bf4323ec296aeb4b381dd9aabe6ec" -dependencies = [ - "chrono", - "futures", - "log", - "serde", - "thiserror", - "windows 0.58.0", - "windows-core 0.58.0", -] - -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" - -[[package]] -name = "x509-parser" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" -dependencies = [ - "asn1-rs", - "data-encoding", - "der-parser", - "lazy_static", - "nom", - "oid-registry", - "rusticata-macros", - "thiserror", - "time", -] - -[[package]] -name = "xml-rs" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" - -[[package]] -name = "xmltree" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" -dependencies = [ - "xml-rs", -] - -[[package]] -name = "yasna" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" -dependencies = [ - "time", -] - -[[package]] -name = "yoke" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", - "synstructure", -] - -[[package]] -name = "z32" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb37266251c28b03d08162174a91c3a092e3bd4f476f8205ee1c507b78b7bdc" - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "zerofrom" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" - -[[package]] -name = "zerovec" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] diff --git a/api-code-examples/Cargo.toml b/api-code-examples/Cargo.toml deleted file mode 100644 index 16f20b53..00000000 --- a/api-code-examples/Cargo.toml +++ /dev/null @@ -1,87 +0,0 @@ -[package] -name = "iroh-examples" -edition = "2021" -description = "iroh examples" -version = "0.28.1" -authors = ["n0 team"] - -[dependencies] -anyhow = "1" -iroh = "0.28" -futures-lite = "2.3" -tempfile = "3" -tokio = { version = "1", features = ["full"] } - -[[bin]] -name = "authors-create" -path = "./rust/authors-create.rs" - -[[bin]] -name = "authors-list" -path = "./rust/authors-list.rs" - -[[bin]] -name = "blobs-add" -path = "./rust/blobs-add.rs" - - -[[bin]] -name = "blobs-list-blobs" -path = "./rust/blobs-list-blobs.rs" - - -[[bin]] -name = "blobs-list-collections" -path = "./rust/blobs-list-collections.rs" - -[[bin]] -name = "blobs-list-incomplete-blobs" -path = "./rust/blobs-list-incomplete-blobs.rs" - -[[bin]] -name = "docs-create" -path = "./rust/docs-create.rs" - -[[bin]] -name = "docs-delete" -path = "./rust/docs-delete.rs" - -[[bin]] -name = "docs-drop" -path = "./rust/docs-drop.rs" - -[[bin]] -name = "docs-export" -path = "./rust/docs-export.rs" - -[[bin]] -name = "docs-get" -path = "./rust/docs-get.rs" - -[[bin]] -name = "docs-import" -path = "./rust/docs-import.rs" - -[[bin]] -name = "docs-join" -path = "./rust/docs-join.rs" - -[[bin]] -name = "docs-keys" -path = "./rust/docs-keys.rs" - -[[bin]] -name = "docs-list" -path = "./rust/docs-list.rs" - -[[bin]] -name = "docs-set" -path = "./rust/docs-set.rs" - -[[bin]] -name = "docs-share" -path = "./rust/docs-share.rs" - -[[bin]] -name = "docs-watch" -path = "./rust/docs-watch.rs" diff --git a/api-code-examples/README.md b/api-code-examples/README.md deleted file mode 100644 index f0db0416..00000000 --- a/api-code-examples/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# iroh API code examples - -This directory includes all the code examples that show how to achieve `iroh` cli commands programmatically. - -## Running the examples - -### Python - -Use `run_python.sh` - -Download python3 and download some way to manage virtual environments. pip will likely come with python, but if not, download pip3 as well. - -Navigate into the `python` directory. - -Create and activate a virtual environment for this project. - -Install iroh: -`python3 -m pip install iroh` - -To run an example, eg for file `author-list.py`: -`python3 run author-list.py` - -### Rust - -Use `run_rust.sh` - -Download & set up rust. - - -### Nodejs - -Use `run_nodejs.sh`. - -Download and setup nodejs & yarn. - - -### Swift - -TODO: diff --git a/api-code-examples/api.mjs b/api-code-examples/api.mjs deleted file mode 100644 index f381943d..00000000 --- a/api-code-examples/api.mjs +++ /dev/null @@ -1,833 +0,0 @@ -const docs = [ - { - name: 'docs delete', - description: 'Delete all document entries below a key prefix.', - slug: 'docs-delete', - arguments: [ - { name: "prefix", necessity: 'required', description: "Prefix to delete. All entries whose key starts with or is equal to the prefix will be deleted" } - ], - examples: { - console: `> docs create --switch -2aoukeibc2vdy5n2jlihnyv3e26cmketqbropptqfef3v7poe5eq -Active doc is now 2aoukeibc2vdy5n2 - -author:luo73rdznvupzrjb doc:2aoukeibc2vdy5n2 -> docs set key value -bafkr4iagirfesfxon7wneztow6ila3w5mm53jnmcq4sek6nnnxxv7wk6bm - -author:luo73rdznvupzrjb doc:2aoukeibc2vdy5n2 -> docs del key -Deleting all entries whose key starts with key. Continue? yes -Deleted 1 entries. -Inserted an empty entry for author luo73rdznvupzrjb with key key`, - } - }, - { - name: 'docs drop', - description: 'Delete an entire document from the local node', - slug: 'docs-drop', - arguments: [ - { name: "doc", necessity: 'required', description: "Document to operate on." } - ], - examples: { - console: `> docs create --switch -2aoukeibc2vdy5n2jlihnyv3e26cmketqbropptqfef3v7poe5eq -Active doc is now 2aoukeibc2vdy5n2 - -author:luo73rdznvupzrjb doc:2aoukeibc2vdy5n2 -> docs set key value -bafkr4iagirfesfxon7wneztow6ila3w5mm53jnmcq4sek6nnnxxv7wk6bm - -> docs drop 2aoukeibc2vdy5n2jlihnyv3e26cmketqbropptqfef3v7poe5eq -Deleting a document will permanently remove the document secret key, all document entries, -and all content blobs which are not referenced from other docs or tags. -Delete document 2aoukeibc2vdy5n2? yes -Doc 2aoukeibc2vdy5n2 has been deleted.`, - } - }, - { - name: 'docs export', - description: 'Export the most recent data for a key from a document', - slug: 'docs-export', - examples: { - console: `> docs create --switch -2aoukeibc2vdy5n2jlihnyv3e26cmketqbropptqfef3v7poe5eq -Active doc is now 2aoukeibc2vdy5n2 - -author:luo73rdznvupzrjb doc:2aoukeibc2vdy5n2 -> docs set key value -bafkr4iagirfesfxon7wneztow6ila3w5mm53jnmcq4sek6nnnxxv7wk6bm - -> docs drop 2aoukeibc2vdy5n2jlihnyv3e26cmketqbropptqfef3v7poe5eq -Deleting a document will permanently remove the document secret key, all document entries, -and all content blobs which are not referenced from other docs or tags. -Delete document 2aoukeibc2vdy5n2? yes -Doc 2aoukeibc2vdy5n2 has been deleted.`, - } - }, - { - name: 'docs get', - description: 'Get entries in a document.', - slug: 'docs-get', - arguments: [ - { name: 'key', necessity: 'required', description: 'Key of the entry to fetch.' }, - { name: 'doc_id', necessity: 'required', description: 'Required unless the document is set through the IROH_DOC environment variable. Within the Iroh console, the active document can also set with `docs set`.' }, - { name: 'prefix', necessity: '', description: 'If true, get all entries that start with key.' }, - { name: 'author', necessity: '', description: 'If provided, only return entries from this author.' }, - { name: 'old', necessity: '', description: 'If true, old entries will be included. By default only the latest value for each key is shown.' }, - { name: 'content', necessity: '', description: 'Also print the content for each entry (but only if smaller than 1MB and valid UTf-8).' } - ], - examples: { - console: `> docs create --switch -dyyelvqqruxjwrlntsdvsksopwznmgnfxpehcsoqckklvqfxar2q -Active doc is now dyyelvqq… - -author:fhu3uk4w… doc:dyyelvqq… -> docs set foo bar -@fhu3uk4w…: foo = 6lujp3wx… (3 B) - -author:fhu3uk4w… doc:dyyelvqq… -> docs get foo -@fhu3uk4w…: foo = 6lujp3wx… (3 B) -bar - -`, - } - }, - { - name: 'docs import', - description: 'Import data into a document.', - slug: 'docs-import', - arguments: [ - { name: 'path', necessity: 'required', description: 'Path to a local file or directory to import. Pathnames will be used as the document key' }, - { name: 'doc', necessity: 'required', description: 'Document to operate on. Required unless the document is set through the IROH_DOC environment variable. Within the Iroh console, the active document can also be set with `docs switch`.' }, - { name: 'author', necessity: 'required', description: 'Author of the entry. Required unless the author is set through the IROH_AUTHOR environment variable. Within the Iroh console, the active author can also be set with `author switch`.' }, - { name: 'prefix', necessity: '', description: 'If true, get all entries that start with key.' }, - { name: 'in place', necessity: '', description: ' If true, don\'t copy the file into iroh, reference the existing file instead, Moving a file imported with `in-place` will result in data corruption' }, - - ], - examples: { - console: `> docs create --switch -dyyelvqqruxjwrlntsdvsksopwznmgnfxpehcsoqckklvqfxar2q -Active doc is now dyyelvqq… - -author:fhu3uk4w… doc:dyyelvqq… -> docs import ~/foo.txt --prefix bar -@fhu3uk4w…: bar/foo.txt = 6lujp3wx… (3 B) - -author:fhu3uk4w… doc:dyyelvqq… -> docs get foo -@fhu3uk4w…: foo = 6lujp3wx… (3 B) -bar - -`, - } - }, - { - name: 'docs join', - description: 'Join a document from a ticket.', - slug: 'docs-join', - arguments: [ - { name: 'ticket', necessity: 'required', description: 'The ticket to join a document. Create a ticket with \'docs share\'.' }, - { name: 'switch', necessity: '', description: 'Switch to the joined document (only in the iroh console).'} - ], - examples: { - console: `> docs join --switch 6tcadaassjgjfmivyaycuads6ek4asma3qacdtvs6waaaaaaaaaanctrkxaetag4aaq45mxvqmruwqvq5l5vc4kvybeybxaaehhlf5mmh72ojerj4e2tcvoajganyabbz2zplnqhpyekxzhlfzyvlqcai55pmzg4d3x34mcpuydxoq4t5ec66zp3k3ouxwadxky745i3dwrhqcig3rqqdifkjjb3drfbo2krc7l3anoqly5wanom756kxmrqnap -tiqpal5qnrb3idy7g4n7hnh5esex7zu6jtqyuwt6hr4iq2nnlpua`, - } - }, - { - name: 'docs keys', - description: 'List all keys in a document.', - slug: 'docs-keys', - arguments: [ - { name: 'doc', necessity: 'required', description: 'Document to operate on. Required unless the document is set through the IROH_DOC environment variable. Within the iroh console, the active document can also set with `docs set`.' }, - { name: 'prefix', necessity: 'optional', description: 'Only list keys that start with prefix.' }, - { name: 'author', necessity: 'optional', description: 'Filter by author.' }, - ], - examples: { - console: `author:i3vpd4e7… doc:njszszvg… -> docs set foo bar -bafkr4ihs5cl65v6sa3gykxkecwmpuuq2xr22vfuvh2l4amgjmewdbqjjhu - -author:i3vpd4e7… doc:njszszvg… -> docs set hello world -bafkr4igxrffos4lnhdjn7lioyvkcjsrsd3qsiu6vd4ntvxvxpuchl3myrq - -author:i3vpd4e7… doc:njszszvg… -> docs set good morning -bafkr4idyxc27uxtcrzl5a3t42xu7hm3h2wn4mfaqt3ma5ummofsitynxle - -author:i3vpd4e7… doc:njszszvg… -> docs keys -@i3vpd4e7…: foo = 6lujp3wx… (3 B) -@i3vpd4e7…: good = pc4ll6s6… (7 B) -@i3vpd4e7…: hello = 26euv2lr… (5 B) - -# use a prefix to filter the keys - -author:i3vpd4e7… doc:njszszvg… -> docs keys fo -@i3vpd4e7…: foo = 6lujp3wx… (3 B)`, - } - }, - { - name: 'docs list', - description: 'List documents on this node.', - slug: 'docs-list', - examples: { - console: `> docs list - tiqpal5qnrb3idy7g4n7hnh5esex7zu6jtqyuwt6hr4iq2nnlpua - 3ogcanavjfehmoeuf3jkel5pmbv2bpdwybvzt7xzk5sgbub72mia - njszszvgpziwnxqnsi32nmc7j2czs2rnj3m7czavudurqxld3nbq`, - } - }, - { - name: 'docs create', - description: 'Create a new blank document.', - slug: 'docs-create', - examples: { - console: `> docs create -ktrygcpxealfdtfmohw66nb2keivu52opk65cyj4j7jy7wior7ea`, - } - }, - { - name: 'docs set', - description: 'Set an entry in a document', - slug: 'docs-set', - arguments: [ - { name: "key", necessity: 'required', description: "Key to the entry (parsed as UTF-8 string)." }, - { name: "value", necessity: 'required', description: "Content to store for this entry (parsed as UTF-8 string)." }, - { name: "author", necessity: 'required', description: "Author of this entry. Required unless the author is set through the console or the IROH_AUTHOR environment variable." }, - ], - examples: { - console: `> docs create --switch -created d7bb0092bf6d7ee3cb6bd255e88596d3ca16d50ce6935a7721f2ff836a3c0355 - -> set "key" "value" -@ydzwyyes…: key = azceusiw… (5 B)`, - cli: `# create an author if you haven't already -$ IROH_AUTHOR=$(iroh authors create) - -# create a document -$ iroh docs create -created d7bb0092bf6d7ee3cb6bd255e88596d3ca16d50ce6935a7721f2ff836a3c0355 - -# set a key -$ iroh docs 674deec7a19fec50fd6f486a5eef20509073ecf7c527b60a27c84baea90d3816 set "key" "value" -@ydzwyyes…: key = azceusiw… (5 B)` - } - }, - { - name: 'docs share', - description: 'Share a document with peers.', - slug: 'docs-share', - arguments: [ - { name: 'mode', necessity: 'required', description: 'One of \'read\' for Read-only access or \'write\' for Write access.' }, - { name: 'doc', necessity: 'required', description: 'Document to share. In the console the current document is used when no `--doc` is provided.' } - ], - examples: { - console: `# switch to a specific doc -> docs switch njszszvgpziwnxqnsi32nmc7j2czs2rnj3m7czavudurqxld3nbq -Active doc is now njszszvg… - -doc: njszszvg… - -> docs share write -xvqmruwqvq5l5vc4kvybeybxaaehhlf5mmh72ojerj4e2tcvoajganyabbz2zplnqhpyekxzhlfzyvlqcaidiaglyldhfvq4xeaa5cqswdistl2hje3c24biacig3rqqdifkjjb3drfbo2krc7l3anoqly5wanom756kxmrqnap6tcadaassjgjfmivyaycuads6ek4asma3qacdtvs6waaaaaaaaaanctrkxaetag4aaq45mprsyystlwe66cs - -# or use --doc flag to get the ticket for a specific doc -> docs share write --doc 3ogcanavjfehmoeuf3jkel5pmbv2bpdwybvzt7xzk5sgbub72mia -gjfmivyaycuads6ek4asma3qacdtvs6waaaaaaaaaanctrkxaetag4aaq45mprsyystlwe66csxvqmruwqvq5l5vc4kvybeybxaaehhlf5mmh72ojerj4e2tcvoajganyabbz2zplnqhpyekxzhljfkldiajjkannnnjiejfkldkaskjlxi0jfwoqppiemxclpilkdipljqhixkkwmhziufkhablskhdjjlllqwoooqusiuypwouuuuippmjkk - ` } - }, - { - name: 'docs switch', - description: 'Set the active document (only works within the Iroh console).', - slug: 'docs-switch', - arguments: [ - { name: 'id', necessity: 'required', description: 'The [document identifier](/docs/components/documents#document-identifiers) of the document to switch to.' }, - ], - examples: { - console: `> docs create -ktrygcpxealfdtfmohw66nb2keivu52opk65cyj4j7jy7wior7ea - -> docs switch ktrygcpxealfdtfmohw66nb2keivu52opk65cyj4j7jy7wior7ea - -doc:ktrygcpx ->`, - } - }, - { - name: 'docs watch', - description: 'Watch for changes and events on a document', - slug: 'docs-watch', - arguments: [ - { name: 'doc', necessity: 'required', description: 'Document to operate on. Required unless the document is set through the IROH_DOCS environment variable. Within the iroh console, the active document can also set with `docs set`.' } - ], - examples: { - console: `author:i3vpd4e7… doc:njszszvg… - > docs set foo bar - bafkr4ihs5cl65v6sa3gykxkecwmpuuq2xr22vfuvh2l4amgjmewdbqjjhu - - > docs watch - # events will show up here!`, - } - } - -] - -const authors = [ - { - name: 'authors switch', - description: 'Set the active author (only works within the Iroh console)', - slug: 'authors-switch', - arguments: [ - { - name: 'author', - necessity: 'required', - description: '' - } - ], - examples: { - console: `author:2ziftxhhind7atie -> authors switch ofnu75vdzmg3wweuz6yamx65lryav62nk7zdjxtexvzcmiqzoloa -Active author is now ofnu75vdzmg3wweu - -author:ofnu75vdzmg3wweu ->` - } - }, - { - name: 'authors create', - description: 'Create a new author', - slug: 'authors-create', - arguments: [ - { - name: 'switch', - necessity: '', - description: 'Switch to the created author (only in the Iroh console)' - } - ], - examples: { - console: `author:ofnu75vdzmg3wweu -> authors create --switch -nybdmk5526rlj4xcbr5urwhmy3at7z6rgn7dchkxhfsuydiibgca -Active author is now nybdmk5526rlj4xc - -author:nybdmk5526rlj4xc ->` - } - }, - { - name: 'authors delete', - description: 'Delete an author', - slug: 'authors-delete', - arguments: [ - { - name: 'author', - necessity: 'required', - description: '' - } - ], - examples: { - console: `author:6znvk7u4pw4wqwlu -> authors list -ofnu75vdzmg3wweuz6yamx65lryav62nk7zdjxtexvzcmiqzoloa -2ziftxhhind7atieqmppynzuiu6w6btadbizarqzi45hj3o5ltka -6znvk7u4pw4wqwlup3qa2a4gs3dwn3zpeal7y55vhg2jcwgqa5ma - -author:6znvk7u4pw4wqwlu -> authors delete ofnu75vdzmg3wweuz6yamx65lryav62nk7zdjxtexvzcmiqzoloa -Deleted author ofnu75vdzmg3wweu` - } - }, - { - name: 'authors export', - description: 'Export an author', - slug: 'authors-export', - arguments: [ - { - name: 'author', - necessity: 'required', - description: '' - } - ], - examples: { - console: `> authors export 2ziftxhhind7atieqmppynzuiu6w6btadbizarqzi45hj3o5ltka -44vcteuiwhstlm6rs5ufzr3hbmdlwzahceundngymcmtdvxr5dxa` - } - }, - { - name: 'authors import', - description: 'Import an author', - slug: 'authors-import', - arguments: [ - { - name: 'author', - necessity: 'required', - description: '' - } - ], - examples: { - console: `> authors import qey4omlgcbx3gnve7ycaiyz2uh4twrxaiructiuynwosl4pfky4q -Imported 6znvk7u4pw4wqwlu` - } - }, - { - name: 'authors default', - description: 'Print the default author for this node', - slug: 'authors-default', - arguments: [ - { - name: 'switch', - necessity: '', - description: 'Switch to the default author (only in the Iroh console)' - } - ], - examples: { - console: `author:6znvk7u4pw4wqwlu -> authors default --switch -2ziftxhhind7atieqmppynzuiu6w6btadbizarqzi45hj3o5ltka -Active author is now 2ziftxhhind7atie - -author:2ziftxhhind7atie -> ` - } - }, - { - name: 'authors list', - description: 'List authors', - slug: 'authors-list', - arguments: [], - examples: { - console: `> authors list -2ziftxhhind7atieqmppynzuiu6w6btadbizarqzi45hj3o5ltka -6znvk7u4pw4wqwlup3qa2a4gs3dwn3zpeal7y55vhg2jcwgqa5ma` - } - } -] - -const gossip = [ - { - name: 'gossip subscribe', - description: 'Subscribe to a gossip topic', - slug: 'gossip-subscribe', - arguments: [ - { - name: 'topic', - necessity: 'required', - description: 'The topic to subscribe to' - }, - { - name: 'bootstrap', - necessity: '', - description: 'one or more nodeIDs to bootstrap the subscription (nodes already hosting the topic)' - } - ], - examples: { - console: `> gossip subscribe --topic your-topic-name-here` - } - }, -] - -const tags = [ - { - name: 'tags list', - description: 'List all tags', - slug: 'tags-list', - arguments: [], - examples: { - console: `> blobs add README.md --wrap --tag tagged-collection -# blob is added as a collection -> blobs add README.md --tag tagged-blob -> tags list -"tagged-collection": 27xwmw3552lwdme4t35yrlq6ny2tsq3b2wfegrxgmhkfb53vrxqq (HashSeq) -"tagged-blob": 7lnuloaubh7sysukojybgp5xwgwe6jnochxy3ew4fxpzzjbuvpiq (Raw)` - } - }, - { - name: 'tags delete', - description: 'Delete a tag', - slug: 'tags-delete', - arguments: [ - { - name: 'tag', - necessity: 'required', - description: '' - }, - { - name: 'hex', - necessity: '', - description: '' - } - ], - examples: { - console: `> tags list -"tagged-blob": 7lnuloaubh7sysukojybgp5xwgwe6jnochxy3ew4fxpzzjbuvpiq (Raw) -"tagged-collection": 27xwmw3552lwdme4t35yrlq6ny2tsq3b2wfegrxgmhkfb53vrxqq (HashSeq) - -> tags delete tagged-collection - -> tags list -"tagged-blob": 7lnuloaubh7sysukojybgp5xwgwe6jnochxy3ew4fxpzzjbuvpiq (Raw)` - } - } -] - -const blobs = [ - { - name: 'blobs add', - description: 'Add data from PATH to the running node', - slug: 'blobs-add', - arguments: [ - { - name: 'source', - necessity: 'required', - description: 'Path to a file or folder' - }, - { - name: 'in-place', - necessity: '', - description: 'Add in place' - }, - { - name: 'tag', - necessity: '', - description: 'Tag to tag the data with' - }, - { - name: 'wrap', - necessity: '', - description: 'Wrap the added file or directory in a collection' - }, - { - name: 'filename', - necessity: '', - description: 'Override the filename used for the entry in the created collection' - }, - { - name: 'no-ticket', - necessity: '', - description: 'Do not print the all-in-one ticket to get the added data from this node' - } - ], - examples: { - console: `> blobs add ~/my_txt.txt -Adding my_txt.txt as /Users/me/my_txt.txt... -- /Users/me/my_txt.txt: 328 B bafkr4igef2yiz2nz33tljfdezzr45cos5lnc2urjmfi6zghbsnfzvpdpa4 -Total: 328 B - -Collection: bafkr4ie3xsx3vdsbflainnk6p4xs4h2hq3hdmuasuoflkgybvnsbljb3ke` - } - }, - { - name: 'blobs download', - description: 'Download data to the running node\'s database and provide it', - slug: 'blobs-get', - arguments: [ - { - name: 'ticket or hash', - necessity: 'required', - description: 'Ticket or Hash to use' - }, - { - name: 'address', - necessity: '', - description: 'Additional socket address to use to contact the node. Can be used multiple times' - }, - { - name: 'relay-url', - necessity: '', - description: 'Override the relay URL to use to contact the node' - }, - { - name: 'recursive', - necessity: '', - description: 'Override to treat the blob as a raw blob or a hash sequence' - }, - { - name: 'override-addresses', - necessity: '', - description: 'If set, the ticket\'s direct addresses will not be used' - }, - { - name: 'node', - necessity: '', - description: 'NodeId of the provider' - }, - { - name: 'out', - necessity: '', - description: 'Directory or file in which to save the file(s)' - }, - { - name: 'stable', - necessity: '', - description: 'If set, the data will be moved to the output directory, and iroh will assume that it will not change' - }, - { - name: 'tag', - necessity: '', - description: 'Tag to tag the data with' - }, - { - name: 'queued', - necessity: '', - description: 'If set, will queue the download in the download queue' - } - ], - examples: { - console: `> blobs get his7xcvl5jc734mwbtgtkkvxeafrdcitmg2jvdmxk7ri7abgr33a --address 192.168.0.15:41918 --node w3mj2iw47i2pgbdrnutaamsqm6h2bj6r7yp7h2vliruq3vry535a -Fetching: his7xcvl5jc734mwbtgtkkvxeafrdcitmg2jvdmxk7ri7abgr33a -Transferred 14.20 KiB in 0 seconds, 173.20 KiB/s` - } - }, - { - name: 'blobs export', - description: 'Export a blob from the internal blob store to the local filesystem', - slug: 'blobs-export', - arguments: [ - { - name: 'hash', - necessity: 'required', - description: 'The hash to export' - }, - { - name: 'out', - necessity: 'required', - description: 'Directory or file in which to save the file(s)' - }, - { - name: 'recursive', - necessity: '', - description: 'Set to true if the hash refers to a collection and you want to export all children of the collection' - }, - { - name: 'stable', - necessity: '', - description: 'If set, the data will be moved to the output directory, and iroh will assume that it will not change' - } - ], - examples: { - console: '> blobs export his7xcvl5jc734mwbtgtkkvxeafrdcitmg2jvdmxk7ri7abgr33a ./very_important.txt' - } - }, - { - name: 'blobs list blobs', - description: 'List the available blobs on the running provider', - slug: 'blobs-list-blobs', - arguments: [], - examples: { - console: `> blobs list blobs - bafkr4idcy33utsake6atvbagnojkn7odp7mdo6n7tvspd4ndnewphj67xu (116.96 KiB) - bafkr4idyxc27uxtcrzl5a3t42xu7hm3h2wn4mfaqt3ma5ummofsitynxle (7 B) - bafkr4ie3xsx3vdsbflainnk6p4xs4h2hq3hdmuasuoflkgybvnsbljb3ke (46 B) - bafkr4igef2yiz2nz33tljfdezzr45cos5lnc2urjmfi6zghbsnfzvpdpa4 (328 B) - bafkr4igxrffos4lnhdjn7lioyvkcjsrsd3qsiu6vd4ntvxvxpuchl3myrq (5 B) - bafkr4ihs5cl65v6sa3gykxkecwmpuuq2xr22vfuvh2l4amgjmewdbqjjhu (3 B) - bafkr4ih5e75yrvu63folnkhvppj3pnx3he2oudmr35x2xc2puodrr2kryy (47 B)`, - } - }, - { - name: 'blobs list incomplete-blobs', - description: 'List the blobs on the running provider that are not full files', - slug: 'blobs-list-incomplete-blobs', - arguments: [], - examples: { - console: '> blobs list incomplete-blobs' - } - }, - { - name: 'blobs list collections', - description: 'List the available collections on the running provider', - slug: 'blobs-list-collections', - arguments: [], - examples: { - console: `> blobs list collections -"auto-2024-08-20T17:49:54.244Z": myumj2a42x6ky72erzt4djhu3ya46h2e7sp4ibqzew2ne4xnbpua 3 blobs (0 B)` - } - }, - { - name: 'blobs validate', - description: 'Validate hashes on the running node', - slug: 'blobs-validate', - arguments: [ - { - name: 'verbose', - necessity: '', - description: '' - }, - { - name: 'repair', - necessity: '', - description: 'Repair the store by removing invalid data' - } - ], - examples: { - console: '> blobs validate' - } - }, - { - name: 'blobs consistency-check', - description: 'Perform a database consistency check on the running node', - slug: 'blobs-consistency-check', - arguments: [ - { - name: 'verbose', - necessity: '', - description: '' - }, - { - name: 'repair', - necessity: '', - description: 'Repair the store by removing invalid data' - } - ], - examples: { - console: '> blobs consistency-check' - } - }, - { - name: 'blobs delete blob', - description: 'Delete the given blobs', - slug: 'blobs-delete-blob', - arguments: [ - { - name: 'hash', - necessity: 'required', - description: 'Blobs to delete' - } - ], - examples: { - } - }, - { - name: 'blobs share', - description: 'Get a ticket to share this blob', - slug: 'blobs-share', - arguments: [ - { - name: 'hash', - necessity: 'required', - description: 'Hash of the blob to share' - }, - { - name: 'addr-options', - necessity: '', - description: 'Options to configure the address information in the generated ticket' - }, - { - name: 'recursive', - necessity: '', - description: 'If the blob is a collection, the requester will also fetch the listed blobs' - } - ], - examples: { - console: `> blobs share myumj2a42x6ky72erzt4djhu3ya46h2e7sp4ibqzew2ne4xnbpua -Ticket for blob myumj2a42x6ky72erzt4djhu3ya46h2e7sp4ibqzew2ne4xnbpua (96 B) -blobac3nrhjc3t5dj4yeofwsmabskbty7ifh2h7b747kvncgsdowhdxpuaaaabtcrrhidtk7zld7ishgpqne6tpadty7it6j7ragdes3juts5uf6q` - } - } -] - -const net = [ - { - name: 'net remote-list', - description: 'Get information about the different remote nodes', - slug: 'net-remote-list', - arguments: [], - examples: { - console: `> net remote-list - current time: Tue, 20 Aug 2024 21:30:33 +0000 - - node id relay conn type latency last used - ewrl7gvv6ndtqmtvd2s6tmblvcah3yl7mn4wyyftem7dtjkrlbvq direct 1ms,527μs 3s` - } - }, - { - name: 'net remote', - description: 'Get information about a particular remote node', - slug: 'net-remote', - arguments: [ - { - name: 'node_id', - necessity: 'required', - description: '' - } - ], - examples: { - console: `> net remote ewrl7gvv6ndtqmtvd2s6tmblvcah3yl7mn4wyyftem7dtjkrlbvq - current time Tue, 20 Aug 2024 21:30:50 +0000 - node id ewrl7gvv6ndtqmtvd2s6tmblvcah3yl7mn4wyyftem7dtjkrlbvq - relay url unknown - connection type direct - latency 1ms,527μs - last used 3s - known addresses 1 - - addr latency last control last data last alive - 192.168.0.15:11204 1ms,527μs ping← ( 3s ) 3s 3s ` - } - }, - { - name: 'net node-addr', - description: 'Get the node addr of this node', - slug: 'net-node-addr', - arguments: [], - examples: { - console: `> net node-addr -Node ID: w3mj2iw47i2pgbdrnutaamsqm6h2bj6r7yp7h2vliruq3vry535a -Home Relay: https://foo.bar/ -Direct Addresses (1): - 192.168.0.15:41918` - } - }, - { - name: 'net add-node-addr', - description: 'Add this node addr to the known nodes', - slug: 'net-add-node-addr', - arguments: [ - { - name: 'node_id', - necessity: 'required', - description: '' - }, - { - name: 'relay', - necessity: 'required', - description: '' - }, - { - name: 'addresses', - necessity: 'required', - description: '' - } - ], - examples: { - console: '> net add-node-addr dlwnphjvqn43cyywsurzmr46i5cpg56ox5xhsqyq2jddly3o5m5q https://foo.bar/ 192.168.0.15:1120' - } - }, - { - name: 'net home-relay', - description: 'Get the relay server we are connected to', - slug: 'net-home-relay', - arguments: [], - examples: { - console: `> net home-relay -Home Relay: https://foo.bar/` - } - } -] - - -const api = { - net, - docs, - authors, - tags, - gossip, - blobs -}; - -export default api; diff --git a/api-code-examples/index.js b/api-code-examples/index.js deleted file mode 100644 index 8577a40c..00000000 --- a/api-code-examples/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import './nodejs/authors-create.js' -import './nodejs/authors-list.js' - -import './nodejs/blobs-add.js' -import './nodejs/blobs-list-blobs.js' -import './nodejs/blobs-list-collections.js' -import './nodejs/blobs-list-incomplete-blobs.js' - -import './nodejs/docs-delete.js' -import './nodejs/docs-drop.js' -import './nodejs/docs-export.js' -import './nodejs/docs-get.js' -import './nodejs/docs-import.js' -import './nodejs/docs-join.js' -import './nodejs/docs-keys.js' -import './nodejs/docs-list.js' -import './nodejs/docs-set.js' -import './nodejs/docs-share.js' -import './nodejs/docs-watch.js' \ No newline at end of file diff --git a/api-code-examples/nodejs/authors-create.js b/api-code-examples/nodejs/authors-create.js deleted file mode 100644 index c6664815..00000000 --- a/api-code-examples/nodejs/authors-create.js +++ /dev/null @@ -1,8 +0,0 @@ -import { Iroh } from '@number0/iroh' - -const node = await Iroh.memory({ enableDocs: true }) -const nodeId = await node.net.nodeId() -console.log(`Started iroh node: ${nodeId}`) - -const author = await node.authors.create() -console.log(`Created author: ${author.toString()}`) diff --git a/api-code-examples/nodejs/authors-list.js b/api-code-examples/nodejs/authors-list.js deleted file mode 100644 index 0c084812..00000000 --- a/api-code-examples/nodejs/authors-list.js +++ /dev/null @@ -1,14 +0,0 @@ -import { Iroh } from '@number0/iroh' - -const node = await Iroh.memory({ enableDocs: true }) -const nodeId = await node.net.nodeId() -console.log(`Started iroh node: ${nodeId}`) - -const author = await node.authors.create() -console.log(`Created author: ${author.toString()}`) - -const authors = await node.authors.list() -console.log('Authors:') -for (let author of authors) { - console.log(`\t${author}`) -} diff --git a/api-code-examples/nodejs/blobs-add.js b/api-code-examples/nodejs/blobs-add.js deleted file mode 100644 index dce7fbe0..00000000 --- a/api-code-examples/nodejs/blobs-add.js +++ /dev/null @@ -1,14 +0,0 @@ -import { Iroh } from '@number0/iroh' - -const node = await Iroh.memory() - -const data = Array.from(Buffer.from("hello world")) -const res = await node.blobs.addBytes(data) - -console.log(`created blob! hash: ${res.hash} size: ${res.size} bytes`) - -const blob = await node.blobs.readToBytes(res.hash) - -if (Buffer.from(blob).toString() !== Buffer.from(data).toString()) { - throw new Error("invalid data") -} diff --git a/api-code-examples/nodejs/blobs-list-blobs.js b/api-code-examples/nodejs/blobs-list-blobs.js deleted file mode 100644 index 377acd41..00000000 --- a/api-code-examples/nodejs/blobs-list-blobs.js +++ /dev/null @@ -1,18 +0,0 @@ -import { Iroh } from '@number0/iroh' - -const node = await Iroh.memory() - -// Define content and tage -const content = Array.from(Buffer.from("hello world!")) - -// Add blob -const outcome = await node.blobs.addBytes(content) -console.log(`Added blob ${outcome.hash} (${outcome.size} bytes)`) - -console.log('blobs list:'); - -// List blobs -const blobs = await node.blobs.list() -for (let blob of blobs) { - console.log(`\t${blob}`) -} diff --git a/api-code-examples/nodejs/blobs-list-collections.js b/api-code-examples/nodejs/blobs-list-collections.js deleted file mode 100644 index 73c82b31..00000000 --- a/api-code-examples/nodejs/blobs-list-collections.js +++ /dev/null @@ -1,61 +0,0 @@ -import { tmpdir } from 'os'; - -import path from 'node:path' -import { mkdtemp, writeFile, readFile } from 'node:fs/promises' - -import { Iroh, SetTagOption } from '@number0/iroh' - -// Create folder -const dir = await mkdtemp(tmpdir()); -const fileNames = ['foo', 'bar', 'bat'] - -// Create three files in the folder -for (let file of fileNames) { - let filePath = path.join(dir, file) - await writeFile(filePath, file) - console.log(`Created file ${filePath}`) -} - -// Create in memory iroh node -const node = await Iroh.memory() - -// Options -const inPlace = false; -const tag = SetTagOption.named(Array.from(Buffer.from('my_collection'))) -const wrap = { wrap: false } - -// Import the directory, creating one blob for each file, and one metadata -// blob that stores the file names for each blob -// also creates a 'collection' from the directory, grouping together the -// blobs - -// Do not use Promise.withResovlers it is buggy -let resolve; -let reject; -const promise = new Promise((res, rej) => { - resolve = res - reject = rej; -}); - -await node.blobs.addFromPath(dir, inPlace, tag, wrap, (err, progress) => { - if (err != null) { - return reject(err); - } - if (progress.allDone != null) { - resolve(progress.allDone) - } -}) - -const done = await promise -const hash = done.hash - -console.log(`Added collection: ${hash}`) - -console.log('collections list:') - -const collections = await node.blobs.listCollections() - -for (let collection of collections) { - const tag = Buffer.from(collection.tag) - console.log(`\thash: ${collection.hash} tag: ${tag.toString()}`) -} diff --git a/api-code-examples/nodejs/blobs-list-incomplete-blobs.js b/api-code-examples/nodejs/blobs-list-incomplete-blobs.js deleted file mode 100644 index 0b6d6a02..00000000 --- a/api-code-examples/nodejs/blobs-list-incomplete-blobs.js +++ /dev/null @@ -1,20 +0,0 @@ -import { Iroh } from '@number0/iroh' - -const node = await Iroh.memory() - -// Define content and tage -const content = Array.from(Buffer.from("hello world!")) - -// Add blob -const outcome = await node.blobs.addBytes(content) -console.log(`Added blob ${outcome.hash} (${outcome.size} bytes)`) - -console.log('blobs list:'); - -// List incomplete blobs -console.log('Incomplete blobs:') - -const blobs = await node.blobs.listIncomplete() -for (let blob of blobs) { - console.log(`\thash: ${blob.hash} size ${blob.size} expected size: ${blob.expectedSize}`) -} diff --git a/api-code-examples/nodejs/docs-delete.js b/api-code-examples/nodejs/docs-delete.js deleted file mode 100644 index 20f8fbfa..00000000 --- a/api-code-examples/nodejs/docs-delete.js +++ /dev/null @@ -1,43 +0,0 @@ -import assert from 'assert' -import { Iroh, Query } from '@number0/iroh' - - -const node = await Iroh.memory({ enableDocs: true }) -const nodeId = await node.net.nodeId() -console.log(`Started iroh node: ${nodeId}`) - -// create a document -const doc = await node.docs.create() -console.log(`Created doc: ${doc.id()}`) - -// use the default author to write -const author = await node.authors.default(); - -// set 10 values -for (let i = 0; i < 10; i++) { - const key = Array.from(Buffer.from("key/" + i)) - const value = Array.from(Buffer.from("value/" + i)) - await doc.setBytes(author, key, value) -} - -// fetch the 10 entries -const q = Query.keyPrefix(Array.from(Buffer.from("key/"))) -let entries = await doc.getMany(q) -assert.equal(entries.length, 10) - -// delete entries. This the deletion key will be set to the empty hash, which will tell iroh to -// delete all values the "empty hash key" is a prefix of. Queries by default ignore keys who's -// value is the empty hash -const deleted = await doc.delete(author, Array.from(Buffer.from("key"))); -console.log(deleted, typeof deleted) -assert.equal(deleted, BigInt(10)) - -// getting many will show zero entries: -entries = await doc.getMany(q) -assert.equal(entries.length, 0) - -// but we can get the empty value marker with `getExact`, by setting the `includeEmpty` argument -// to true: -const entry = await doc.getExact(author, Array.from(Buffer.from("key")), true) -// empty hash values will always be this: -assert.equal(entry.hash, "v4jutopv7gq2nicajxvdnxgjjgn4wjojvxarfn6mtkj4vza7gjra") diff --git a/api-code-examples/nodejs/docs-drop.js b/api-code-examples/nodejs/docs-drop.js deleted file mode 100644 index a1a08983..00000000 --- a/api-code-examples/nodejs/docs-drop.js +++ /dev/null @@ -1,21 +0,0 @@ -import assert from 'assert' -import { Iroh } from '@number0/iroh' - -const node = await Iroh.memory({ enableDocs: true }) -const nodeId = await node.net.nodeId() -console.log(`Started iroh node: ${nodeId}`) - -// create a doc -const doc = await node.docs.create() -console.log(`Created doc: ${doc.id()}`) - -// we have one document -let docs = await node.docs.list() -assert.equal(docs.length, 1) - -// delete the document -await node.docs.dropDoc(doc.id()) - -// we have zero documents -docs = await node.docs.list() -assert.equal(docs.length, 0) diff --git a/api-code-examples/nodejs/docs-export.js b/api-code-examples/nodejs/docs-export.js deleted file mode 100644 index e80fb732..00000000 --- a/api-code-examples/nodejs/docs-export.js +++ /dev/null @@ -1,39 +0,0 @@ -import { tmpdir } from 'node:os' -import path from 'node:path' -import { mkdtemp } from 'node:fs/promises' -import { Iroh } from '@number0/iroh' - -// build an in-memory iroh node -const node = await Iroh.memory({ enableDocs: true }) -const nodeId = await node.net.nodeId() -console.log(`Started iroh node: ${nodeId}`) - -// create a document -const doc = await node.docs.create() -console.log(`Created doc: ${doc.id()}`) - -// use the default author to write -const author = await node.authors.default(); - -// set a value so we can export it in the next step -const key = Array.from(Buffer.from("hello.txt")) -const value = Array.from(Buffer.from("why hello there")) -await doc.setBytes(author, key, value) - -// fetch the entry for the value -const entry = await doc.getExact(author, key, false) - -// export the file to a temporary directory, using a callback to track export progress -const tmpDir = await mkdtemp(tmpdir()) -const filePath = path.join(tmpDir, Buffer.from(key).toString()) -await doc.exportFile(entry, filePath, (err, prog) => { - if (err) { - console.log(`export error: ${err}`) - return - } - - if (prog.found) { console.log(`writing ${prog.id} to ${prog.found.outpath}`) } - else if (prog.progress) { console.log("export progress") } - else if (prog.done) { console.log(`done writing ${prog.done.id}`) } - else if (prog.allDone) { console.log("all done!") } -}) diff --git a/api-code-examples/nodejs/docs-get.js b/api-code-examples/nodejs/docs-get.js deleted file mode 100644 index 86d4abad..00000000 --- a/api-code-examples/nodejs/docs-get.js +++ /dev/null @@ -1,28 +0,0 @@ -import assert from 'assert' -import { Iroh } from '@number0/iroh' - -const node = await Iroh.memory({ enableDocs: true }) -const nodeId = await node.net.nodeId() -console.log(`Started iroh node: ${nodeId}`) - -const doc = await node.docs.create() -console.log(`Created doc: ${doc.id()}`) - -// use the default author to write -const author = await node.authors.default(); - -// set a value in the document -const key = Array.from(Buffer.from("key")) -const value = Array.from(Buffer.from("value!")) -await doc.setBytes(author, key, value) - -// get a key -const entry = await doc.getExact(author, key, false) - -// read the value back -const res = await node.blobs.readToBytes(entry.hash) - -// returned value matches the original -assert.deepEqual(value, res) - -console.log(`Got value: ${Buffer.from(res).toString()}`) diff --git a/api-code-examples/nodejs/docs-import.js b/api-code-examples/nodejs/docs-import.js deleted file mode 100644 index a5a2cbd2..00000000 --- a/api-code-examples/nodejs/docs-import.js +++ /dev/null @@ -1,42 +0,0 @@ -import assert from 'assert' -import { mkdtemp, writeFile } from 'node:fs/promises' -import { tmpdir } from 'node:os'; -import path from 'node:path' - -import { Iroh } from '@number0/iroh' - -// Create a file on the local filesystem that we can import -const dir = await mkdtemp(tmpdir()); -const filePath = path.join(dir, "hello.txt") -await writeFile(filePath, "oh hi there!") - -// Create in memory iroh node -const node = await Iroh.memory({ enableDocs: true }) - -// Create a document -const doc = await node.docs.create() -console.log(`Created doc: ${doc.id()}`) - -// Use the default author -const author = await node.authors.default() - -// Import the file `inPlace`: true, which creates a reference to the file and does not copy any -// data into the iroh cache -const key = Array.from(Buffer.from("hello_in_place")) -await doc.importFile(author, key, filePath, true, (error, progress) => { - if (error) { - console.log(`Import error: ${error}`) - return - } - - if (progress.found) { console.log(`writing ${progress.id} to ${progress.found.outpath}`) } - else if (progress.progress) { console.log("import progress") } - else if (progress.done) { console.log(`done writing ${progress.done.id}`) } - else if (progress.allDone) { console.log("all done!") } -}) - -const entry = await doc.getExact(author, key, false) -const fromDocument = await node.blobs.readToBytes(entry.hash) - -// Prove that doc contents matches imported file contents -assert.equal("oh hi there!", Buffer.from(fromDocument).toString()) diff --git a/api-code-examples/nodejs/docs-join.js b/api-code-examples/nodejs/docs-join.js deleted file mode 100644 index 593d5b5b..00000000 --- a/api-code-examples/nodejs/docs-join.js +++ /dev/null @@ -1,38 +0,0 @@ -import { AddrInfoOptions, Iroh, ShareMode } from '@number0/iroh' - -// Setup Alice -const alice = await Iroh.memory({ enableDocs: true }) -const aliceId = await alice.net.nodeId() -console.log(`Started alice: ${aliceId}`) - -// Setup Bob -const bob = await Iroh.memory({ enableDocs: true }) -const bobId = await bob.net.nodeId() -console.log(`Started bob: ${bobId}`) - -// Alice creates a document -const aliceDoc = await alice.docs.create() -console.log(`Alice created doc: ${aliceDoc.id()}`) - -// Create a ticket to share with Bob -const ticket = await aliceDoc.share(ShareMode.Read, AddrInfoOptions.RelayAndAddresses) - -// Bob joins the doc from the ticket: -const bobDoc = await bob.docs.joinAndSubscribe(ticket, (err, progress) => { - if (err) { - console.log(`doc error: ${error}`) - return - } - - if (progress.insertLocal) { console.log(`insertLocal event`) } - else if (progress.insertRemote) { console.log(`insertRemote event`) } - else if (progress.neighborUp) { console.log(`neighborUp event`) } - else if (progress.neighborDown) { console.log(`neighborDown event`) } - else if (progress.contentReady) { console.log(`contentReady event`) } - else if (progress.pendingContentReady) { console.log(`pendingContentReady event`) } - else if (progress.syncFinished) { console.log(`syncFinished event`) } - else { console.log(`unrecognized doc event: ${progress}`) } -}) - -await aliceDoc.closeMe() -await bobDoc.closeMe() diff --git a/api-code-examples/nodejs/docs-keys.js b/api-code-examples/nodejs/docs-keys.js deleted file mode 100644 index f6bbc13c..00000000 --- a/api-code-examples/nodejs/docs-keys.js +++ /dev/null @@ -1,21 +0,0 @@ -import { Iroh, Query } from '@number0/iroh' - -// Create a node, author & document -const node = await Iroh.memory({ enableDocs: true }) -const author = await node.authors.default(); -const doc = await node.docs.create() - -// Set 10 keys -for (let i = 0; i < 10; i++) { - const key = Array.from(Buffer.from(`key/${i}`)) - const value = Array.from(Buffer.from(`value/${i}`)) - await doc.setBytes(author, key, value) -} - -// Get keys -const q = Query.all() -const entries = await doc.getMany(q) - -for (const entry of entries) { - console.log(`${Buffer.from(entry.key).toString()}\t${new Date(new Number(entry.timestamp))}`) -} diff --git a/api-code-examples/nodejs/docs-list.js b/api-code-examples/nodejs/docs-list.js deleted file mode 100644 index 7161912f..00000000 --- a/api-code-examples/nodejs/docs-list.js +++ /dev/null @@ -1,21 +0,0 @@ -import assert from 'assert' -import { Iroh, Query } from '@number0/iroh' - -// Create a node & 2 documents -const node = await Iroh.memory({ enableDocs: true }) -const doc1 = await node.docs.create() -const doc2 = await node.docs.create() - -// List both documents -const docs = await node.docs.list(); -assert.equal(docs.length, 2) - -// Print out document IDs & show that this user has write -// capability on both docs -for (const doc of docs) { - console.log(`ID: ${doc.namespace} ${doc.capability}`) -} - -// Cleanup by closing document -doc1.closeMe() -doc2.closeMe() diff --git a/api-code-examples/nodejs/docs-set.js b/api-code-examples/nodejs/docs-set.js deleted file mode 100644 index 7acfc41a..00000000 --- a/api-code-examples/nodejs/docs-set.js +++ /dev/null @@ -1,30 +0,0 @@ -import assert from 'node:assert' -import { Iroh } from '@number0/iroh' - -// Create a node -const node = await Iroh.memory({ enableDocs: true }) -const nodeId = await node.net.nodeId() -console.log(`Started iroh node: ${nodeId}`) - -// Create a document -const doc = await node.docs.create() -console.log(`Created doc: ${doc.id()}`) - -// Use the default author to write -const author = await node.authors.default(); - -// set a value in the document -const key = Array.from(Buffer.from("key")) -const value = Array.from(Buffer.from("value!")) -await doc.setBytes(author, key, value) - -// get a key -const entry = await doc.getExact(author, key, false) - -// read the value back -const res = await node.blobs.readToBytes(entry.hash) - -// returned value matches the original -assert.deepEqual(value, res) - -console.log(`Got value: ${Buffer.from(res).toString()}`) diff --git a/api-code-examples/nodejs/docs-share.js b/api-code-examples/nodejs/docs-share.js deleted file mode 100644 index 593d5b5b..00000000 --- a/api-code-examples/nodejs/docs-share.js +++ /dev/null @@ -1,38 +0,0 @@ -import { AddrInfoOptions, Iroh, ShareMode } from '@number0/iroh' - -// Setup Alice -const alice = await Iroh.memory({ enableDocs: true }) -const aliceId = await alice.net.nodeId() -console.log(`Started alice: ${aliceId}`) - -// Setup Bob -const bob = await Iroh.memory({ enableDocs: true }) -const bobId = await bob.net.nodeId() -console.log(`Started bob: ${bobId}`) - -// Alice creates a document -const aliceDoc = await alice.docs.create() -console.log(`Alice created doc: ${aliceDoc.id()}`) - -// Create a ticket to share with Bob -const ticket = await aliceDoc.share(ShareMode.Read, AddrInfoOptions.RelayAndAddresses) - -// Bob joins the doc from the ticket: -const bobDoc = await bob.docs.joinAndSubscribe(ticket, (err, progress) => { - if (err) { - console.log(`doc error: ${error}`) - return - } - - if (progress.insertLocal) { console.log(`insertLocal event`) } - else if (progress.insertRemote) { console.log(`insertRemote event`) } - else if (progress.neighborUp) { console.log(`neighborUp event`) } - else if (progress.neighborDown) { console.log(`neighborDown event`) } - else if (progress.contentReady) { console.log(`contentReady event`) } - else if (progress.pendingContentReady) { console.log(`pendingContentReady event`) } - else if (progress.syncFinished) { console.log(`syncFinished event`) } - else { console.log(`unrecognized doc event: ${progress}`) } -}) - -await aliceDoc.closeMe() -await bobDoc.closeMe() diff --git a/api-code-examples/nodejs/docs-watch.js b/api-code-examples/nodejs/docs-watch.js deleted file mode 100644 index afe99e55..00000000 --- a/api-code-examples/nodejs/docs-watch.js +++ /dev/null @@ -1,52 +0,0 @@ -import { AddrInfoOptions, DownloadPolicy, FilterKind, Iroh, ShareMode } from '@number0/iroh' - -// Setup Alice -const alice = await Iroh.memory({ enableDocs: true }) -const aliceId = await alice.net.nodeId() -const aliceAuthor = await alice.authors.default() -console.log(`Started alice: ${aliceId}`) - -// Setup Bob -const bob = await Iroh.memory({ enableDocs: true }) -const bobId = await bob.net.nodeId() -console.log(`Started bob: ${bobId}`) - -// Alice creates a document -const aliceDoc = await alice.docs.create() -console.log(`Alice created doc: ${aliceDoc.id()}`) - -// Create a ticket to share with Bob -const ticket = await aliceDoc.share(ShareMode.Read, AddrInfoOptions.RelayAndAddresses) - -// Bob joins the doc from the ticket. Here we separate the join & subscribe steps so we -// can set a download policy before subscribing -const bobDoc = await bob.docs.join(ticket) - -// Setting a download policy that skips fetching any content over 100 bytes -bobDoc.setDownloadPolicy(DownloadPolicy.everythingExcept([ - FilterKind.prefix(Array.from(Buffer.from("no_auto_download"))) -])) - -// Subscribe to document events, watch for changes -bobDoc.subscribe((err, progress) => { - if (err) { - console.log(`doc error: ${error}`) - return - } - - if (progress.insertLocal) { console.log(`insertLocal event`) } - else if (progress.insertRemote) { console.log(`insertRemote event`) } - else if (progress.neighborUp) { console.log(`neighborUp event`) } - else if (progress.neighborDown) { console.log(`neighborDown event`) } - else if (progress.contentReady) { console.log(`contentReady event`) } - else if (progress.pendingContentReady) { console.log(`pendingContentReady event`) } - else if (progress.syncFinished) { console.log(`syncFinished event`) } - else { console.log(`unrecognized doc event: ${progress}`) } -}) - -const key = Array.from(Buffer.from("key")) -const value = Array.from(Buffer.from("value!")) -aliceDoc.setBytes(aliceAuthor, key, value) - -await aliceDoc.closeMe() -await bobDoc.closeMe() diff --git a/api-code-examples/package.json b/api-code-examples/package.json deleted file mode 100644 index 73339aeb..00000000 --- a/api-code-examples/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "api-code-examples", - "version": "0.28.1", - "main": "index.js", - "license": "MIT", - "dependencies": { - "@number0/iroh": "=0.28.1" - }, - "type": "module", - "scripts": { - "start": "node ./index.js" - } -} diff --git a/api-code-examples/python/authors-create.py b/api-code-examples/python/authors-create.py deleted file mode 100644 index bc555373..00000000 --- a/api-code-examples/python/authors-create.py +++ /dev/null @@ -1,18 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - node_id = await node.net().node_id() - print(f"Started Iroh node: {node_id}") - - author = await node.authors().create() - print(f"Created author: {author}") - -asyncio.run(main()) diff --git a/api-code-examples/python/authors-list.py b/api-code-examples/python/authors-list.py deleted file mode 100644 index f3c9a8da..00000000 --- a/api-code-examples/python/authors-list.py +++ /dev/null @@ -1,30 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - node_id = await node.net().node_id() - print(f"Started Iroh node: {node_id}") - - author = await node.authors().create() - print(f"Created author: {author}") - - authors = await node.authors().list() - print("Authors:") - for auth in authors: - print(f"\t{auth}") - -# Output: -# Started Iroh node: wbwpkauwmitrwwhmw534w3u6sxyhvbivuepcdze5jd3zeqpgxyfa -# Created author: z2h3f3tozgz67g3ewvu7yxj5vtoddwoohzi2jgyrtgfl7tzocpda -# Authors: -# fllmuelqe7lrzmlwmmydtperpafnyd6vkzukqh2l7xqg6cvjstia -# x2ckktvt4ftjcmrb4xxmlajs7vcidkdsmxcsbd5vejezpcu6653a - -asyncio.run(main()) diff --git a/api-code-examples/python/blobs-add.py b/api-code-examples/python/blobs-add.py deleted file mode 100644 index 0cac38ce..00000000 --- a/api-code-examples/python/blobs-add.py +++ /dev/null @@ -1,110 +0,0 @@ -import os -import shutil -import iroh -import asyncio - -from iroh import Iroh, SetTagOption, WrapOption, AddProgressType - -class AddCallback: - async def progress(self, event): - t = event.type() - if t == AddProgressType.FOUND: - print("AddProgress - Found:") - found = event.as_found() - print(f"\tid: {found.id}, name: {found.name}, size: {found.size}") - elif t == AddProgressType.PROGRESS: - print("AddProgress - Progress:") - progress = event.as_progress() - print(f"\tid: {progress.id}, offset: {progress.offset}") - elif t == AddProgressType.DONE: - print("AddProgress - Done:") - done = event.as_done() - print(f"\tid: {done.id}, hash: {done.hash}") - elif t == AddProgressType.ALL_DONE: - print("AddProgress - AllDone:") - all_done = event.as_all_done() - print(f"\thash: {all_done.hash}, format: {all_done.format}, tag: {all_done.tag}") - elif t == AddProgressType.ABORT: - print("AddProgress - Abort:") - abort = event.as_abort() - print(f"\terror: {abort.error}") - else: - print("Unknown AddProgress event:", event) - -async def main(): - # setup event loop, to ensure async callbacks work - iroh.iroh_ffi.uniffi_set_event_loop(asyncio.get_running_loop()) - - # Create folder - os.mkdir("tmp") - - try: - path = os.path.abspath(os.path.join("tmp")) - print("Created dir \"tmp\"") - - file_names = ["foo", "bar", "bat"] - - # Create three files in the folder - for file_name in file_names: - file_path = os.path.join("tmp", file_name) - with open(file_path, "w") as f: - f.write(f"{file_name}") - print(f"Created file {file_path}") - - node = await Iroh.memory() - - # When `in_place` is True, iroh will NOT copy over the files into its - # internal database. Only use this option when you know the file will never - # move or change. - in_place = False - - # Iroh blobs can be "tagged" with human-readable names, this creates a tag - # automatically. - tag = SetTagOption.auto() - - # When adding a single file, if you use `WrapOption.wrap()`, you will turn - # the single file into a collection with one entry. - wrap = WrapOption.no_wrap() - - # You can use this callback to react to progress updates. - callback = AddCallback() - - # Import the directory, creating one blob for each file, and one metadata - # blob that stores the file names for each blob. - # Also creates a 'collection' from the directory, grouping together the - # blobs. - - await node.blobs().add_from_path(path, in_place, tag, wrap, callback) - except Exception as e: - print("error: ", e) - - # cleanup dir - shutil.rmtree("tmp") - -# Output: -# Created dir "tmp" -# Created file tmp/foo -# Created file tmp/bar -# Created file tmp/bat -# AddProgress - Found: -# id: 1, name: $HOME/tmp/bar, size: 3 -# AddProgress - Found: -# id: 0, name: $HOME/tmp/foo, size: 3 -# AddProgress - Found: -# id: 2, name: $HOME/tmp/bat, size: 3 -# AddProgress - Progress: -# id: 2, offset: 3 -# AddProgress - Progress: -# id: 0, offset: 3 -# AddProgress - Done: -# id: 0, hash: bafkr4iae4c5tt4yldi76xcpvg3etxykqkvec352im5fqbutolj2xo5yc5e -# AddProgress - Done: -# id: 2, hash: bafkr4iabccdb2eyeu764xoewbcqv62sjaggxibtmxx5tnmwer3wp3rquq4 -# AddProgress - Progress: -# id: 1, offset: 3 -# AddProgress - Done: -# id: 1, hash: bafkr4ihs5cl65v6sa3gykxkecwmpuuq2xr22vfuvh2l4amgjmewdbqjjhu -# AddProgress - AllDone: -# hash: bafkr4iaotzhxuiak7eusnngngnwsqdu4crf4lmdxzkbhuebunevecjzkim, format: BlobFormat.HASH_SEQ, tag: "auto-2023-12-09T22:25:45.296Z" - -asyncio.run(main()) diff --git a/api-code-examples/python/blobs-list-blobs.py b/api-code-examples/python/blobs-list-blobs.py deleted file mode 100644 index dbb39d1d..00000000 --- a/api-code-examples/python/blobs-list-blobs.py +++ /dev/null @@ -1,28 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Create in memory iroh node - node = await iroh.Iroh.memory() - - # Define content and tag - content = b"hello world!" - - # Add blob - outcome = await node.blobs().add_bytes(content) - print(f"Added blob {outcome.hash} ({outcome.size} bytes)") - - print("blobs list:") - - # List blobs - blobs = await node.blobs().list() - for hash in blobs: - print("\t", hash) - -# Output: -# Added blob bafkr4ib2uyoebh6xof6j3hddsibk6l5oi4ga55tjxz52fsxkk544wu2otu (12 bytes) -# blobs list: -# bafkr4ib2uyoebh6xof6j3hddsibk6l5oi4ga55tjxz52fsxkk544wu2otu - -asyncio.run(main()) diff --git a/api-code-examples/python/blobs-list-collections.py b/api-code-examples/python/blobs-list-collections.py deleted file mode 100644 index c56bbe7e..00000000 --- a/api-code-examples/python/blobs-list-collections.py +++ /dev/null @@ -1,79 +0,0 @@ -import os -import shutil -import iroh -import asyncio - -from iroh import SetTagOption, WrapOption, AddProgressType - -class AddCallback: - hash = None - - async def progress(self, event): - if event.type() == AddProgressType.ALL_DONE: - all_done = event.as_all_done() - self.hash = all_done.hash - -async def main(): - # setup event loop, to ensure async callbacks work - iroh.iroh_ffi.uniffi_set_event_loop(asyncio.get_running_loop()) - - # Create folder - os.mkdir("tmp") - - try: - path = os.path.abspath(os.path.join("tmp")) - print("Created dir \"tmp\"") - - file_names = ["foo", "bar", "bat"] - # Create three files in the folder - for file_name in file_names: - file_path = os.path.join("tmp", file_name) - with open(file_path, "w") as f: - f.write(f"{file_name}") - print(f"Created file {file_path}") - - - # Create in memory iroh node - node = await iroh.Iroh.memory() - - # Options - in_place = False - tag = SetTagOption.named(b'my_collection') - wrap = WrapOption.no_wrap() - - # Callback setup - callback = AddCallback() - - # Import the directory, creating one blob for each file, and one metadata - # blob that stores the file names for each blob - # also creates a 'collection' from the directory, grouping together the - # blobs - await node.blobs().add_from_path(path, in_place, tag, wrap, callback) - - hash = callback.hash - - print("Added collection", hash) - - print("collections list:") - - coll_res = await node.blobs().list_collections() - for res in coll_res: - print(f"\thash: {res.hash} tag: {res.tag}") - - except Exception as e: - print("error: ", e) - - # cleanup dir - shutil.rmtree("tmp") - -# Output: -# Created dir "tmp" -# Created file tmp/foo -# Created file tmp/bar -# Created file tmp/bat -# Added collection bafkr4iaotzhxuiak7eusnngngnwsqdu4crf4lmdxzkbhuebunevecjzkim -# collections list: -# hash: bafkr4iaotzhxuiak7eusnngngnwsqdu4crf4lmdxzkbhuebunevecjzkim tag: "my_collection" - - -asyncio.run(main()) diff --git a/api-code-examples/python/blobs-list-incomplete-blobs.py b/api-code-examples/python/blobs-list-incomplete-blobs.py deleted file mode 100644 index 5d3905c7..00000000 --- a/api-code-examples/python/blobs-list-incomplete-blobs.py +++ /dev/null @@ -1,19 +0,0 @@ -import iroh -import asyncio - -async def main(): - # Create in memory iroh node - node = await iroh.Iroh.memory() - - # Typically only happens if you have not finished syncing or interrupted - # a download - incompletes = await node.blobs().list_incomplete() - - print("Incomplete blobs:") - for res in incompletes: - print(f"\thash: {res.hash} size: {res.size} expected size: {res.expected_size}") - -# Output: -# Incomplete blobs: - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-create.py b/api-code-examples/python/docs-create.py deleted file mode 100644 index 731046ac..00000000 --- a/api-code-examples/python/docs-create.py +++ /dev/null @@ -1,21 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - node_id = await node.net().node_id() - print(f"Started Iroh node: {node_id}") - - author = await node.authors().default() - print(f"Default author: {author}") - - doc = await node.docs().create() - print(f"Created doc: {doc.id()}") - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-delete.py b/api-code-examples/python/docs-delete.py deleted file mode 100644 index ccc29a48..00000000 --- a/api-code-examples/python/docs-delete.py +++ /dev/null @@ -1,60 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - - # Real programs handle errors! - author = await node.authors().create() - print(f"Created author {author}") - - doc = await node.docs().create() - print(f"Created document {doc.id()}") - - key = b"python" - hash = await doc.set_bytes(author, key, b"says hello") - print(f"Inserted {hash}") - - # Get all the entries with default filtering and sorting - query = iroh.Query.all(None) - entries = await doc.get_many(query) - - print("Keys:") - for entry in entries: - key = entry.key() - hash = entry.content_hash() - content = await entry.content_bytes(doc) - print(f'{key.decode("utf-8")} : {content.decode("utf-8")} (hash: {hash})') - - print(f"Removing entry for author {author} and prefix {key.decode('utf-8')}.") - - # Removes all entries from that author and with the prefix "key" - # num_removed = doc.delete_entry(author, key) - # print(f"Removed {num_removed} entry") - - entries = await doc.get_many(query) - - print("Keys:") - for entry in entries: - key = entry.key() - hash = entry.content_hash() - content = await entry.content_bytes(doc) - print(f'{key.decode("utf-8")} : {content.decode("utf-8")} (hash: {hash})') - -# Output: -# Created author ybkptbq4imifxaj544hl5etyszhecuepp66qlezov7sdzm3hqk4a -# Created document ipqqeughovjrvcxl5sji3hlwycheqqgiajq5hgnf6vtqp6qigm6q -# Inserted bafkr4ihasgdyqs6onufsjrmk5h5vcg2ud75u2iaokavwiulyg7wfno6fte -# Keys: -# python : says hello (hash: bafkr4ihasgdyqs6onufsjrmk5h5vcg2ud75u2iaokavwiulyg7wfno6fte) -# Removing entry for author ybkptbq4imifxaj544hl5etyszhecuepp66qlezov7sdzm3hqk4a and prefix python. -# Removed 1 entry -# Keys: - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-drop.py b/api-code-examples/python/docs-drop.py deleted file mode 100644 index 4b03959e..00000000 --- a/api-code-examples/python/docs-drop.py +++ /dev/null @@ -1,43 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - - # Create document - doc = await node.docs().create() - print(f"Created document {doc.id()}") - - print("List of docs and their capabilities (0-Read, 1-Write):") - - # Returns an array of `iroh.NamespaceAndCapability`s - # NamespaceId is the Doc's Id - # and the Capability is whether you have read or write access to the doc - ns = await node.docs().list() - for entry in ns: - print(f"\t{entry.namespace}\t{entry.capability}") - - # Drop document - await node.docs().drop_doc(doc.id()) - print(f"Dropped document {doc.id()}") - - print("List of docs and their capabilities (0-Read, 1-Write):") - ns = await node.docs().list() - # List no longer contains the dropped doc - for entry in ns: - print(f"\t{entry.namespace}\t{entry.capability}") - -# Output: -# Created document zdv4ciupnlhxzvydn3f227k7tkq3pdljie7de6gtsesghmuu6tyq -# List of docs and their capabilities: -# zdv4ciupnlhxzvydn3f227k7tkq3pdljie7de6gtsesghmuu6tyq CapabilityKind.WRITE -# Dropped document zdv4ciupnlhxzvydn3f227k7tkq3pdljie7de6gtsesghmuu6tyq -# List of docs and their capabilities: - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-export.py b/api-code-examples/python/docs-export.py deleted file mode 100644 index 8c1a7a88..00000000 --- a/api-code-examples/python/docs-export.py +++ /dev/null @@ -1,81 +0,0 @@ -import os -import shutil -import asyncio -from iroh import Iroh, key_to_path, path_to_key - - -async def main(): - # Create folder - os.mkdir("tmp") - - # Create an export directory - os.mkdir("export") - - try: - root = os.path.abspath(os.path.join("tmp")) - print(f"Created dir {root}") - - # Create file - path = os.path.join("tmp", "hello_world") - with open(path, "w") as f: - f.write("Hello World!") - print("Created file \"hello_world\"") - - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - - # Create author and document - author = await node.authors().create() - print(f"Created author {author}") - - doc = await node.docs().create() - print(f"Created document {doc.id()}") - - prefix = "import-example" - - # Import the file - path = os.path.abspath(os.path.join("tmp", "hello_world")) - key = path_to_key(path, prefix, root) - print(f"key: {key.decode('utf-8')}") - await doc.import_file(author, key, path, False, None) - - # Export the file - # Get the entry via an exact author and key - entry = await doc.get_exact(author, key, False) - - root = os.path.abspath(os.path.join("export")) - print(f"root: {root}") - - # Create the export path from the key, prefix, and directory location - export_path = key_to_path(key, prefix, root) - - # Export the entry - await doc.export_file(entry, export_path, None) - - # Open the exported file and print the contents - with open(export_path, "r") as f: - content = f.read() - print(f"file {export_path}: {content}") - - except Exception as e: - print("error: ", e) - - # cleanup dir - shutil.rmtree("tmp") - # cleanup export dir - shutil.rmtree("export") - -# Output: -# Created dir $HOME/tmp -# Created file "hello_world" -# Created author 2bgy4eozp5mcrhzqm6fylwpqsm2mddqogg4yphunegll2gxtmh4q -# Created document mu65dqhxcchrfkfm6meyllitrpayljdra4qrqy54s4sgfwlgr2tq -# key: import-examplehello_world -# root: $HOME/export -# file $HOME/export/hello_world: Hello World! - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-get.py b/api-code-examples/python/docs-get.py deleted file mode 100644 index dc6f8652..00000000 --- a/api-code-examples/python/docs-get.py +++ /dev/null @@ -1,38 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - - # Get default author - author = await node.authors().default() - - # Create a document - doc = await node.docs().create() - print(f"Created document {doc.id()}") - - # Set content in the document - key = b"python" - hash = await doc.set_bytes(author, key, b"says hello") - print(f"Inserted {hash}") - - # Get an entry from the document - entry = await doc.get_exact(author, key, False) - - # Read content from the entry - content = await entry.content_bytes(doc) - print(f"Got content \"{content.decode('utf-8')}\"") - -# Output: -# Created author huarctxgpvq2ucnifubjxvmac7c26evzudnynp5xrugkkm37ma7q -# Created document zmwwfsnnoxgij4q5bknfij5tpwbm2askypip3al3bahinucx65oq -# Inserted bafkr4ihasgdyqs6onufsjrmk5h5vcg2ud75u2iaokavwiulyg7wfno6fte -# Got content "says hello" - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-import.py b/api-code-examples/python/docs-import.py deleted file mode 100644 index aff31f48..00000000 --- a/api-code-examples/python/docs-import.py +++ /dev/null @@ -1,77 +0,0 @@ -import os -import shutil -import asyncio - -from iroh import Iroh, Query, path_to_key - - -async def main(): - # Create folder - os.mkdir("tmp") - - try: - root = os.path.abspath(os.path.join("tmp")) - print("Created dir \"tmp\"") - - file_names = ["foo", "bar", "bat"] - # Create three files in the folder - for file_name in file_names: - file_path = os.path.join("tmp", file_name) - with open(file_path, "w") as f: - f.write(f"{file_name}") - print(f"Created file {file_path}") - - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - - # Create author and document - author = await node.authors().create() - print(f"Created author {author}") - - doc = await node.docs().create() - print(f"Created document {doc.id()}") - - prefix = "import-example" - # Import the files - for file_name in file_names: - path = os.path.abspath(os.path.join("tmp", file_name)) - # create a key from the path, use the `iroh.PathToKey` function to ensure - # that we strip the root correctly, and add any prefix we want to add for - # organizational purposes - key = path_to_key(path, prefix, root) - await doc.import_file(author, key, path, False, None) - - # Get all the entries with default filtering and sorting - query = Query.all(None) - entries = await doc.get_many(query) - - print("One entry for each file:") - for entry in entries: - key = entry.key() - hash = entry.content_hash() - content = await entry.content_bytes(doc) - print(f"{key.decode('utf-8')}: {content.decode('utf-8')} (hash: {hash})") - - except Exception as e: - print("error: ", e) - - # cleanup dir - shutil.rmtree("tmp") - -# Output: -# Created dir "tmp" -# Created file tmp/foo -# Created file tmp/bar -# Created file tmp/bat -# Created author kpksn2yl2c3nlppjtnpxa2h2utmu2fdnutuwptybenr3gxdlrkiq -# Created document af7klzttoegn6kvr7p6j7tgw6tz2w54n5bfzqvpcfmy2mrkk3pgq -# One entry for each file: -# import-examplebar: bar (hash: bafkr4ihs5cl65v6sa3gykxkecwmpuuq2xr22vfuvh2l4amgjmewdbqjjhu) -# import-examplebat: bat (hash: bafkr4iabccdb2eyeu764xoewbcqv62sjaggxibtmxx5tnmwer3wp3rquq4) -# import-examplefoo: foo (hash: bafkr4iae4c5tt4yldi76xcpvg3etxykqkvec352im5fqbutolj2xo5yc5e) - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-join.py b/api-code-examples/python/docs-join.py deleted file mode 100644 index 6756b8c9..00000000 --- a/api-code-examples/python/docs-join.py +++ /dev/null @@ -1,22 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - node_id = await node.net().node_id() - print(f"Started Iroh node: {node_id}") - - # you'll need to get a ticket from somewhere, see the `doc share` command documentation - # for details. This ticket will fail to join, but is a valid ticket. - TICKET = iroh.DocTicket("docaaa7qg6afc6zupqzfxmu5uuueaoei5zlye7a4ahhrfhvzjfrfewozgybl5kkl6u6fqcnjxvdkoihq3nbsqczxeulfsqvatb2qh3bwheoyahacitior2ha4z2f4xxk43fgewtcltemvzhaltjojxwqltomv2ho33snmxc6biajjeteswek4ambkabzpcfoajganyabbz2zplaaaaaaaaaagrjyvlqcjqdoaaioowl2ygi2likyov62rofk4asma3qacdtvs6whqsdbizopsefrrkx") - - doc = await node.docs().join(TICKET) - print(f"Joined doc: {doc.id()}") - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-keys.py b/api-code-examples/python/docs-keys.py deleted file mode 100644 index bc7bd5f1..00000000 --- a/api-code-examples/python/docs-keys.py +++ /dev/null @@ -1,43 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - - node_id = await node.net().node_id() - print(f"Started Iroh node: {node_id}") - - author = await node.authors().default() - - doc = await node.docs().create() - print(f"Created doc: {doc.id()}") - - for i, key in enumerate(['a', 'b', 'c']): - await doc.set_bytes(author, bytes(key, "utf8"), bytes(str(i), "utf8")) - - # get all the entries with default filtering and sorting - query = iroh.Query.all(None) - entries = await doc.get_many(query) - print("Keys:") - for entry in entries: - key = entry.key() - hash = entry.content_hash() - content = await entry.content_bytes(doc) - print("{} : {} (hash: {})".format(key, content.decode("utf8"), hash)) - -# Output: -# Started Iroh node: f5seybgjqa4yrnqbhcibxyckykzile76ygfnpqhslpjzlztssrlq -# Created doc: sqsx7kn3nfvjhziwhcjnoa47fpisbqtox4363nf4uxzhxwehxnba -# Keys: -# b'a' : 0 (hash: bafkr4icnazyvhldstjfh5arazf4tl752m5ehqygvqkmm52zdqzbwtbt5t4) -# b'b' : 1 (hash: bafkr4igwhpm2qjvpsha75i3rszngjyi64ihrhzdll5jmlgibcntalm5eq4) -# b'c' : 2 (hash: bafkr4iebh2nxfekb47zyll5aulin6ptmg6e6ij774sxo6vtkkzn4r4x6hu) - - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-list.py b/api-code-examples/python/docs-list.py deleted file mode 100644 index 24cbe5e3..00000000 --- a/api-code-examples/python/docs-list.py +++ /dev/null @@ -1,37 +0,0 @@ -import iroh -import asyncio - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - node_id = await node.net().node_id() - print(f"Started Iroh node: {node_id}") - - # create a document - doc = await node.docs().create() - print(f"Created doc: {doc.id()}") - - # create a second document - doc = await node.docs().create() - print(f"Created doc: {doc.id()}") - - # list all your documents - docs = await node.docs().list() - print(f"List all {len(docs)} docs:") - # doc ids are also called "namespace ids" - for namespace_and_capability in docs: - print(f"\t{namespace_and_capability.namespace}") - -# Output: -# Started Iroh node: jplmb4cgk2pxw3dwjehk7oes7ddphftlh3vdiib4e5bwhq2nnokq -# Created doc: mr42ra4f6n63kkd6kmqghgonsanqqtpv5cvkgcu7bpg2zaauimrq -# Created doc: n4w6eip5cgxlv33dl3nln544km76t4gt2etpml6kc6qpo6sqmdua -# List all 2 docs: -# mr42ra4f6n63kkd6kmqghgonsanqqtpv5cvkgcu7bpg2zaauimrq -# n4w6eip5cgxlv33dl3nln544km76t4gt2etpml6kc6qpo6sqmdua - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-set.py b/api-code-examples/python/docs-set.py deleted file mode 100644 index e140f47c..00000000 --- a/api-code-examples/python/docs-set.py +++ /dev/null @@ -1,39 +0,0 @@ -import iroh -import asyncio - - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - - # Get default author - author = await node.authors().default() - print(f"Default author {author}") - - # Create a document - doc = await node.docs().create() - print(f"Created document {doc.id()}") - - # Set content in the document - key = b"python" - hash = await doc.set_bytes(author, key, b"says hello") - print(f"Inserted {hash}") - - # Get an entry from the document - entry = await doc.get_exact(author, key, False) - - # Read content from the entry - content = await entry.content_bytes(doc) - print(f"Got content \"{content.decode('utf-8')}\"") - -# Output: -# Created author huarctxgpvq2ucnifubjxvmac7c26evzudnynp5xrugkkm37ma7q -# Created document zmwwfsnnoxgij4q5bknfij5tpwbm2askypip3al3bahinucx65oq -# Inserted bafkr4ihasgdyqs6onufsjrmk5h5vcg2ud75u2iaokavwiulyg7wfno6fte -# Got content "says hello" - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-share.py b/api-code-examples/python/docs-share.py deleted file mode 100644 index 37ea22a6..00000000 --- a/api-code-examples/python/docs-share.py +++ /dev/null @@ -1,29 +0,0 @@ -import iroh -import asyncio - -async def main(): - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - node_id = await node.net().node_id() - print(f"Started Iroh node: {node_id}") - - doc = await node.docs().create() - print(f"Created doc: {doc.id()}") - - ticket = await doc.share(iroh.ShareMode.READ, iroh.AddrInfoOptions.ID) - print(f"Read-Access Ticket: {ticket}") - - ticket = await doc.share(iroh.ShareMode.WRITE, iroh.AddrInfoOptions.ID) - print(f"Write-Access Ticket: {ticket}") - -# Output: -# Started Iroh node: rwgutd2wazt756h5awh6x576jejizai6w2l6ae5gxsv7tpswmopq -# Created doc: ijgvnoxfgkkgze3cyb7rwjywfqvfzy2pzilo2tn5wf64fgm7nxkq -# Read-Access Ticket: docafbe2vv24uzji3etmlah6gzhcywcuxhdj7fbn3knxwyx3quzt5w5kajarwgutd2wazt756h5awh6x576jejizai6w2l6ae5gxsv7tpswmopqcaifabfesmskyrlqbqfiahf4ivybeybxaaehhlf5maaaaaaaaaa2fhcvoajganyabbz2zplazdjnblb2x3kfyvlqcjqdoaaioowl2zctm6q34dlgzp6fk4 -# Write-Access Ticket: docaaqo2dtt7udula5vvevfwjenux3tk3l3lfpefugeu6r6v55pwusvc5qbecgy2smpkydgp7xy7ucy727x7zerfdebd23jpyatu26kx6n6kzrz6aibauaeusjsjlcfoagavaa4xrcxaetag4aaq45mxvqaaaaaaaaadiu4kvybeybxaaehhlf5mdenfufmhk7nixcvoajganyabbz2zpleknt2dpqnm3f7yvlq - -asyncio.run(main()) diff --git a/api-code-examples/python/docs-watch.py b/api-code-examples/python/docs-watch.py deleted file mode 100644 index 59118c44..00000000 --- a/api-code-examples/python/docs-watch.py +++ /dev/null @@ -1,71 +0,0 @@ -import asyncio -import queue -import iroh -from iroh import Iroh, LiveEventType - -class Watch: - def __init__(self, queue): - self.queue = queue - - async def event(self, e): - t = e.type() - if t == LiveEventType.INSERT_LOCAL: - entry = e.as_insert_local() - print(f"LiveEvent - InsertLocal: entry hash {entry.content_hash()}") - self.queue.put(True) - elif t == LiveEventType.INSERT_REMOTE: - insert_remove_event = e.as_insert_remote() - print(f"LiveEvent - InsertRemote:\n\tfrom: {insert_remove_event.from_}\n\tentry hash:\n\t{insert_remove_event.entry.content_hash()}\n\tcontent_status: {insert_remove_event.content_status}") - print("Insert Remove events will be eventually followed by the ContentReady event") - elif t == LiveEventType.CONTENT_READY: - hash_val = e.as_content_ready() - print(f"LiveEvent - ContentReady: hash {hash_val}") - elif t == LiveEventType.NEIGHBOR_UP: - node_id = e.as_neighbor_up() - print(f"LiveEvent - NeighborUp: node id {node_id}") - elif t == LiveEventType.NEIGHBOR_DOWN: - node_id = e.as_neighbor_down() - print(f"LiveEvent - NeighborDown: node id {node_id}") - elif t == LiveEventType.SYNC_FINISHED: - sync_event = e.as_sync_finished() - print(f"Live Event - SyncFinished: synced peer: {sync_event.peer}") - else: - raise Exception("unknown LiveEventType") - -async def main(): - # setup event loop, to ensure async callbacks work - iroh.iroh_ffi.uniffi_set_event_loop(asyncio.get_running_loop()) - - # Set options to enable docs - options = iroh.NodeOptions() - options.enable_docs = True - - # Create in memory iroh node - node = await iroh.Iroh.memory_with_options(options) - - # Create document - author = await node.authors().default() - - doc = await node.docs().create() - print(f"Created document {doc.id()}") - - # Create a queue for synchronization - event_queue = queue.Queue() - - callback = Watch(event_queue) - await doc.subscribe(callback) - - key = b"watch-me" - await doc.set_bytes(author, key, b"I'm going to trigger an InsertLocal event.") - - # Wait for the watcher to get the insert local event - event_queue.get() - - print("Done!") - -# Output: -# Created document 3h6ea3d6ucs3iicwn2hzovpwhh3lpchs7b6nt5byoci3aqt6amfa -# LiveEvent - InsertLocal: entry hash bafkr4ic24i3eenzjflowjva7e2tyw24yafro5kvve6p6ziwics5kc2id5e -# Done! - -asyncio.run(main()) diff --git a/api-code-examples/run_nodejs.sh b/api-code-examples/run_nodejs.sh deleted file mode 100755 index 7450e1a5..00000000 --- a/api-code-examples/run_nodejs.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -yarn start diff --git a/api-code-examples/run_python.sh b/api-code-examples/run_python.sh deleted file mode 100755 index 030d60fc..00000000 --- a/api-code-examples/run_python.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# Get the absolute path to the script's directory -SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -# Name of the directory we use for the iroh node -IROH_DATA_DIR="iroh_data_dir" - -# Clean up on exit -cleanup() { - echo "Cleaning up..." - rm -rf "$SCRIPT_DIR/python/$IROH_DATA_DIR" -} - -# Trap the EXIT signal to ensure cleanup -trap cleanup EXIT - -echo "Running python files" - -# Iterate over each file -for file in "$SCRIPT_DIR/python"/*.py; do - - # Change directory to "python" and run the Python file - echo "Running $file..." - (cd "$SCRIPT_DIR/python" && python3 "$file") - status=$? - - if [ $status -ne 0 ]; then - echo "Error running $file. Exiting..." - exit $status - fi - - echo "-----------------------" -done - -rm -rf "$SCRIPT_DIR/python/iroh_data_dir" - -echo "All Python files executed successfully!" diff --git a/api-code-examples/run_rust.sh b/api-code-examples/run_rust.sh deleted file mode 100755 index 6d330c34..00000000 --- a/api-code-examples/run_rust.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# Get the absolute path to the script's directory -SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -# Name of the directory we use for the iroh node -IROH_DATA_DIR="iroh_data_dir" - -# Clean up on exit -cleanup() { - echo "Cleaning up..." - rm -rf "$SCRIPT_DIR/$IROH_DATA_DIR" -} - -# Trap the EXIT signal to ensure cleanup -trap cleanup EXIT - -echo "Running Rust files" - -# Iterate over each file -for file in "$SCRIPT_DIR/rust"/*.rs; do - - # Change directory to "python" and run the Python file - filename=$(basename -- "$file") - filename="${filename%.*}" - echo "Running $filename..." - cargo run --bin $filename - status=$? - - if [ $status -ne 0 ]; then - echo "Error running $file. Exiting..." - exit $status - fi - - echo "-----------------------" -done - -rm -r "$SCRIPT_DIR/iroh_data_dir" - -echo "All Rust files executed successfully!" diff --git a/api-code-examples/rust/authors-create.rs b/api-code-examples/rust/authors-create.rs deleted file mode 100644 index f5bca46a..00000000 --- a/api-code-examples/rust/authors-create.rs +++ /dev/null @@ -1,11 +0,0 @@ -#[tokio::main] -async fn main() -> anyhow::Result<()> { - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - let node_id = node.net().node_id().await?; - println!("Started Iroh node: {node_id}"); - - let author = node.authors().create().await?; - println!("Created author: {author}"); - - Ok(()) -} diff --git a/api-code-examples/rust/authors-list.rs b/api-code-examples/rust/authors-list.rs deleted file mode 100644 index 6253d1c9..00000000 --- a/api-code-examples/rust/authors-list.rs +++ /dev/null @@ -1,20 +0,0 @@ -use futures_lite::StreamExt; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - let node_id = node.net().node_id().await?; - println!("Started Iroh node: {node_id}"); - - let author = node.authors().create().await?; - println!("Created author: {author}"); - - let mut authors = node.authors().list().await?; - println!("Authors:"); - while let Some(author) = authors.next().await { - let author = author?; - println!("\t{author}"); - } - - Ok(()) -} diff --git a/api-code-examples/rust/blobs-add.rs b/api-code-examples/rust/blobs-add.rs deleted file mode 100644 index dddc2c3d..00000000 --- a/api-code-examples/rust/blobs-add.rs +++ /dev/null @@ -1,17 +0,0 @@ -#[tokio::main] -async fn main() -> anyhow::Result<()> { - let node = iroh::node::Node::memory().spawn().await?; - - let data = "hello world".as_bytes(); - let res = node.blobs().add_bytes(data).await?; - - println!( - "created blob! hash: {:?} size: {} bytes", - res.hash, res.size - ); - - let blob = node.blobs().read_to_bytes(res.hash).await?; - assert_eq!(blob, data); - - Ok(()) -} diff --git a/api-code-examples/rust/blobs-list-blobs.rs b/api-code-examples/rust/blobs-list-blobs.rs deleted file mode 100644 index 35393d49..00000000 --- a/api-code-examples/rust/blobs-list-blobs.rs +++ /dev/null @@ -1,24 +0,0 @@ -use futures_lite::StreamExt; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - let node = iroh::node::Node::memory().spawn().await?; - - // Define content and tag - let content = "hello world!"; - - // Add blob - let outcome = node.blobs().add_bytes(content).await?; - println!("Added blob {} ({} bytes)", outcome.hash, outcome.size); - - println!("blobs list:"); - - // List blobs - let mut blobs = node.blobs().list().await?; - while let Some(info) = blobs.next().await { - let info = info?; - println!("\t{}", info.hash); - } - - Ok(()) -} diff --git a/api-code-examples/rust/blobs-list-collections.rs b/api-code-examples/rust/blobs-list-collections.rs deleted file mode 100644 index b57fd96c..00000000 --- a/api-code-examples/rust/blobs-list-collections.rs +++ /dev/null @@ -1,65 +0,0 @@ -use iroh::{ - blobs::{provider::AddProgress, util::SetTagOption}, - client::blobs::WrapOption, -}; - -use futures_lite::StreamExt; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create folder - let tmpdir = tempfile::tempdir()?; - let temp_path = tmpdir.path(); - println!("Created dir \"{}\"", temp_path.display()); - - let file_names = ["foo", "bar", "bat"]; - // Create three files in the folder - for file_name in file_names { - let file_path = temp_path.join(file_name); - tokio::fs::write(&file_path, file_name).await?; - println!("Created file {}", file_path.display()); - } - - // Create in memory iroh node - let node = iroh::node::Node::memory().spawn().await?; - - // Options - let in_place = false; - let tag = SetTagOption::Named("my_collection".into()); - let wrap = WrapOption::NoWrap; - - // Import the directory, creating one blob for each file, and one metadata - // blob that stores the file names for each blob - // also creates a 'collection' from the directory, grouping together the - // blobs - let mut progress = node - .blobs() - .add_from_path(temp_path.into(), in_place, tag, wrap) - .await?; - - let hash = loop { - match progress.next().await { - Some(Ok(AddProgress::AllDone { hash, .. })) => { - break hash; - } - Some(Err(err)) => { - return Err(err); - } - None => { - panic!("progress ended early"); - } - _ => {} - } - }; - - println!("Added collection: {hash}"); - println!("collections list:"); - - let mut coll_res = node.blobs().list_collections()?; - while let Some(res) = coll_res.next().await { - let res = res?; - println!("\thash: {} tag: {}", res.hash, res.tag); - } - - Ok(()) -} diff --git a/api-code-examples/rust/blobs-list-incomplete-blobs.rs b/api-code-examples/rust/blobs-list-incomplete-blobs.rs deleted file mode 100644 index 9335306f..00000000 --- a/api-code-examples/rust/blobs-list-incomplete-blobs.rs +++ /dev/null @@ -1,22 +0,0 @@ -use futures_lite::StreamExt; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create in memory iroh node - let node = iroh::node::Node::memory().spawn().await?; - - // Typically only happens if you have not finished syncing or interrupted - // a download - let mut incompletes = node.blobs().list_incomplete().await?; - - println!("Incomplete blobs:"); - while let Some(res) = incompletes.next().await { - let res = res?; - println!( - "\thash: {} size: {} expected size: {}", - res.hash, res.size, res.expected_size - ); - } - - Ok(()) -} diff --git a/api-code-examples/rust/docs-create.rs b/api-code-examples/rust/docs-create.rs deleted file mode 100644 index 23ebe91d..00000000 --- a/api-code-examples/rust/docs-create.rs +++ /dev/null @@ -1,15 +0,0 @@ -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - let node_id = node.net().node_id().await?; - println!("Started Iroh node: {node_id}"); - - let author = node.authors().default().await?; - println!("Default author: {author}"); - - let doc = node.docs().create().await?; - println!("Created doc: {}", doc.id()); - Ok(()) -} diff --git a/api-code-examples/rust/docs-delete.rs b/api-code-examples/rust/docs-delete.rs deleted file mode 100644 index 8469485c..00000000 --- a/api-code-examples/rust/docs-delete.rs +++ /dev/null @@ -1,70 +0,0 @@ -use futures_lite::StreamExt; -use iroh::docs::store::Query; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - let author = node.authors().create().await?; - println!("Created author {author}"); - - let doc = node.docs().create().await?; - println!("Created document {}", doc.id()); - - let key = b"python"; - let hash = doc.set_bytes(author, &key[..], &b"says hello"[..]).await?; - println!("Inserted {hash}"); - - // Get all the entries with default filtering and sorting - let query = Query::all().build(); - let entries = doc.get_many(query.clone()).await?.collect::>().await; - - println!("Keys:"); - for entry in entries { - let entry = entry?; - let key = entry.key(); - let hash = entry.content_hash(); - let content = entry.content_bytes(node.client()).await?; - println!( - "{} : {} (hash: {hash})", - std::str::from_utf8(key).unwrap(), - std::str::from_utf8(&content).unwrap(), - ); - - println!( - "Removing entry for author {author} and prefix {}.", - std::str::from_utf8(key).unwrap(), - ); - } - - // Removes all entries from that author and with the prefix "key" - let num_removed = doc.del(author, &key[..]).await?; - println!("Removed {num_removed} entry"); - - let entries = doc.get_many(query).await?.collect::>().await; - - println!("Keys:"); - for entry in entries { - let entry = entry?; - let key = entry.key(); - let hash = entry.content_hash(); - let content = entry.content_bytes(node.client()).await?; - println!( - "{} : {} (hash: {hash})", - std::str::from_utf8(key).unwrap(), - std::str::from_utf8(&content).unwrap(), - ); - } - Ok(()) -} - -// Output: -// Created author ybkptbq4imifxaj544hl5etyszhecuepp66qlezov7sdzm3hqk4a -// Created document ipqqeughovjrvcxl5sji3hlwycheqqgiajq5hgnf6vtqp6qigm6q -// Inserted bafkr4ihasgdyqs6onufsjrmk5h5vcg2ud75u2iaokavwiulyg7wfno6fte -// Keys: -// python : says hello (hash: bafkr4ihasgdyqs6onufsjrmk5h5vcg2ud75u2iaokavwiulyg7wfno6fte) -// Removing entry for author ybkptbq4imifxaj544hl5etyszhecuepp66qlezov7sdzm3hqk4a and prefix python. -// Removed 1 entry -// Keys: diff --git a/api-code-examples/rust/docs-drop.rs b/api-code-examples/rust/docs-drop.rs deleted file mode 100644 index 2002570f..00000000 --- a/api-code-examples/rust/docs-drop.rs +++ /dev/null @@ -1,41 +0,0 @@ -use futures_lite::StreamExt; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - // Create document - let doc = node.docs().create().await?; - println!("Created document {}", doc.id()); - - println!("List of docs and their capabilities (0-Read, 1-Write):"); - - // Returns an array of `iroh.NamespaceAndCapability`s - // NamespaceId is the Doc's Id - // and the Capability is whether you have read or write access to the doc - let ns = node.docs().list().await?.collect::>().await; - for entry in ns { - let (ns, cap) = entry?; - println!("\t{ns}\t{cap}"); - } - - // Drop document - node.docs().drop_doc(doc.id()).await?; - println!("Dropped document {}", doc.id()); - - println!("List of docs and their capabilities (0-Read, 1-Write):"); - let ns = node.docs().list().await?.collect::>().await; - // List no longer contains the dropped doc - for entry in ns { - let (ns, cap) = entry?; - println!("\t{ns}\t{cap}"); - } - Ok(()) -} -// Output: -// Created document zdv4ciupnlhxzvydn3f227k7tkq3pdljie7de6gtsesghmuu6tyq -// List of docs and their capabilities: -// zdv4ciupnlhxzvydn3f227k7tkq3pdljie7de6gtsesghmuu6tyq CapabilityKind.WRITE -// Dropped document zdv4ciupnlhxzvydn3f227k7tkq3pdljie7de6gtsesghmuu6tyq -// List of docs and their capabilities: diff --git a/api-code-examples/rust/docs-export.rs b/api-code-examples/rust/docs-export.rs deleted file mode 100644 index 66fd160e..00000000 --- a/api-code-examples/rust/docs-export.rs +++ /dev/null @@ -1,72 +0,0 @@ -use futures_lite::StreamExt; -use iroh::{ - blobs::store::ExportMode, - util::fs::{key_to_path, path_to_key}, -}; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create folder - let tmpdir = tempfile::tempdir()?; - let temp_path = tmpdir.path(); - - let root = temp_path.join("import"); - let export_path = temp_path.join("export"); - - tokio::fs::create_dir_all(&root).await?; - tokio::fs::create_dir_all(&export_path).await?; - - // Create file - tokio::fs::write(root.join("hello_world"), "Hello World!").await?; - println!("Created file \"hello_world\""); - - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - // Create author and document - let author = node.authors().create().await?; - println!("Created author {author}"); - - let doc = node.docs().create().await?; - println!("Created document {}", doc.id()); - - let prefix = "import-example"; - - // Import the file - let path = root.join("hello_world"); - let key = path_to_key(&path, Some(prefix.into()), Some(root))?; - println!("key: {}", std::str::from_utf8(&key).unwrap()); - doc.import_file(author, key.clone(), path, false) - .await? - .collect::>() - .await; - - // Export the file - // Get the entry via an exact author and key - let entry = doc.get_exact(author, key.clone(), false).await?.unwrap(); - - println!("root: {}", export_path.display()); - - // Create the export path from the key, prefix, and directory location - let export_path = key_to_path(key, Some(prefix.into()), Some(export_path))?; - - // Export the entry - doc.export_file(entry, &export_path, ExportMode::Copy) - .await? - .collect::>() - .await; - - // Open the exported file and print the contents - let content = tokio::fs::read_to_string(&export_path).await?; - println!("file {}: {content}", export_path.display()); - Ok(()) -} - -// Output: -// Created dir $HOME/tmp -// Created file "hello_world" -// Created author 2bgy4eozp5mcrhzqm6fylwpqsm2mddqogg4yphunegll2gxtmh4q -// Created document mu65dqhxcchrfkfm6meyllitrpayljdra4qrqy54s4sgfwlgr2tq -// key: import-examplehello_world -// root: $HOME/export -// file $HOME/export/hello_world: Hello World! diff --git a/api-code-examples/rust/docs-get.rs b/api-code-examples/rust/docs-get.rs deleted file mode 100644 index baba0b91..00000000 --- a/api-code-examples/rust/docs-get.rs +++ /dev/null @@ -1,30 +0,0 @@ -use anyhow::{anyhow, Result}; - -use iroh::docs::store::Query; - -#[tokio::main] -async fn main() -> Result<()> { - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - // create a document - let author = node.authors().default().await?; - let doc = node.docs().create().await?; - - // set the key "key" to "value" - let key = b"key"; - let value = b"value"; - doc.set_bytes(author, key.to_vec(), value.to_vec()).await?; - println!("key is set!"); - - // read the value back - let query = Query::key_exact(key); - let entry = doc - .get_one(query) - .await? - .ok_or_else(|| anyhow!("entry not found"))?; - let content = entry.content_bytes(node.client()).await?; - - println!("value bytes: {:?}", content); - - Ok(()) -} diff --git a/api-code-examples/rust/docs-import.rs b/api-code-examples/rust/docs-import.rs deleted file mode 100644 index f40855dd..00000000 --- a/api-code-examples/rust/docs-import.rs +++ /dev/null @@ -1,69 +0,0 @@ -use futures_lite::StreamExt; -use iroh::{docs::store::Query, util::fs::path_to_key}; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - let tmpdir = tempfile::tempdir()?; - let root = tmpdir.path(); - - let file_names = ["foo", "bar", "bat"]; - // Create three files in the folder - for file_name in file_names { - let file_path = root.join(file_name); - tokio::fs::write(&file_path, file_name).await?; - println!("Created file {}", file_path.display()); - } - - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - // Create author and document - let author = node.authors().create().await?; - println!("Created author {}", author); - - let doc = node.docs().create().await?; - println!("Created document {}", doc.id()); - - let prefix = "import-example"; - // Import the files - for file_name in file_names { - let path = root.join(file_name); - // create a key from the path, use the `iroh.PathToKey` function to ensure - // that we strip the root correctly, and add any prefix we want to add for - // organizational purposes - let key = path_to_key(&path, Some(prefix.into()), Some(root.into()))?; - doc.import_file(author, key, path, false) - .await? - .collect::>() - .await; - } - - // Get all the entries with default filtering and sorting - let query = Query::all().build(); - let entries = doc.get_many(query).await?.collect::>().await; - - println!("One entry for each file:"); - for entry in entries { - let entry = entry?; - let key = entry.key(); - let hash = entry.content_hash(); - let content = entry.content_bytes(node.client()).await?; - println!( - "{}: {} (hash: {hash})", - std::str::from_utf8(key)?, - std::str::from_utf8(&content)? - ); - } - Ok(()) -} - -// Output: -// Created file /foo -// Created file /bar -// Created file /bat -// Created author kpksn2yl2c3nlppjtnpxa2h2utmu2fdnutuwptybenr3gxdlrkiq -// Created document af7klzttoegn6kvr7p6j7tgw6tz2w54n5bfzqvpcfmy2mrkk3pgq -// One entry for each file: -// import-examplebar: bar (hash: bafkr4ihs5cl65v6sa3gykxkecwmpuuq2xr22vfuvh2l4amgjmewdbqjjhu) -// import-examplebat: bat (hash: bafkr4iabccdb2eyeu764xoewbcqv62sjaggxibtmxx5tnmwer3wp3rquq4) -// import-examplefoo: foo (hash: bafkr4iae4c5tt4yldi76xcpvg3etxykqkvec352im5fqbutolj2xo5yc5e) diff --git a/api-code-examples/rust/docs-join.rs b/api-code-examples/rust/docs-join.rs deleted file mode 100644 index 3bbd863f..00000000 --- a/api-code-examples/rust/docs-join.rs +++ /dev/null @@ -1,16 +0,0 @@ -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - let node_id = node.net().node_id().await?; - println!("Started Iroh node: {node_id}"); - - // you'll need to get a ticket from somewhere, see the `doc share` command documentation - // for details. This ticket will fail to join, but is a valid ticket. - const TICKET: &str = "docaaa7qg6afc6zupqzfxmu5uuueaoei5zlye7a4ahhrfhvzjfrfewozgybl5kkl6u6fqcnjxvdkoihq3nbsqczxeulfsqvatb2qh3bwheoyahacitior2ha4z2f4xxk43fgewtcltemvzhaltjojxwqltomv2ho33snmxc6biajjeteswek4ambkabzpcfoajganyabbz2zplaaaaaaaaaagrjyvlqcjqdoaaioowl2ygi2likyov62rofk4asma3qacdtvs6whqsdbizopsefrrkx"; - - let doc = node.docs().import(TICKET.parse()?).await?; - println!("Joined doc: {}", doc.id()); - Ok(()) -} diff --git a/api-code-examples/rust/docs-keys.rs b/api-code-examples/rust/docs-keys.rs deleted file mode 100644 index 430dc461..00000000 --- a/api-code-examples/rust/docs-keys.rs +++ /dev/null @@ -1,50 +0,0 @@ -use iroh::docs::store::Query; - -use futures_lite::StreamExt; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - let node_id = node.net().node_id().await?; - println!("Started Iroh node: {node_id}"); - - let author = node.authors().default().await?; - - let doc = node.docs().create().await?; - println!("Created doc: {}", doc.id()); - - for (i, key) in ['a', 'b', 'c'].into_iter().enumerate() { - let key = key.to_string(); - let value = i.to_string(); - doc.set_bytes(author, key, value).await?; - } - - // get all the entries with default filtering and sorting - let query = Query::all().build(); - let entries = doc.get_many(query).await?.collect::>().await; - - println!("Keys:"); - for entry in entries { - let entry = entry?; - let key = entry.key(); - let hash = entry.content_hash(); - let content = entry.content_bytes(node.client()).await?; - println!( - "{} : {} (hash: {})", - std::str::from_utf8(key)?, - std::str::from_utf8(&content)?, - hash - ); - } - Ok(()) -} - -// Output: -// Started Iroh node: f5seybgjqa4yrnqbhcibxyckykzile76ygfnpqhslpjzlztssrlq -// Created doc: sqsx7kn3nfvjhziwhcjnoa47fpisbqtox4363nf4uxzhxwehxnba -// Keys: -// b'a' : 0 (hash: bafkr4icnazyvhldstjfh5arazf4tl752m5ehqygvqkmm52zdqzbwtbt5t4) -// b'b' : 1 (hash: bafkr4igwhpm2qjvpsha75i3rszngjyi64ihrhzdll5jmlgibcntalm5eq4) -// b'c' : 2 (hash: bafkr4iebh2nxfekb47zyll5aulin6ptmg6e6ij774sxo6vtkkzn4r4x6hu) diff --git a/api-code-examples/rust/docs-list.rs b/api-code-examples/rust/docs-list.rs deleted file mode 100644 index 99a83592..00000000 --- a/api-code-examples/rust/docs-list.rs +++ /dev/null @@ -1,20 +0,0 @@ -use anyhow::Result; -use futures_lite::stream::StreamExt; - -#[tokio::main] -async fn main() -> Result<()> { - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - // create a document - let _doc_0 = node.docs().create().await?; - let _doc_1 = node.docs().create().await?; - - println!("List all docs:"); - let mut doc_ids = node.docs().list().await?; - while let Some(doc_id) = doc_ids.next().await { - let (doc_id, kind) = doc_id?; - println!("\t{doc_id}: {kind}"); - } - - Ok(()) -} diff --git a/api-code-examples/rust/docs-set.rs b/api-code-examples/rust/docs-set.rs deleted file mode 100644 index baba0b91..00000000 --- a/api-code-examples/rust/docs-set.rs +++ /dev/null @@ -1,30 +0,0 @@ -use anyhow::{anyhow, Result}; - -use iroh::docs::store::Query; - -#[tokio::main] -async fn main() -> Result<()> { - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - // create a document - let author = node.authors().default().await?; - let doc = node.docs().create().await?; - - // set the key "key" to "value" - let key = b"key"; - let value = b"value"; - doc.set_bytes(author, key.to_vec(), value.to_vec()).await?; - println!("key is set!"); - - // read the value back - let query = Query::key_exact(key); - let entry = doc - .get_one(query) - .await? - .ok_or_else(|| anyhow!("entry not found"))?; - let content = entry.content_bytes(node.client()).await?; - - println!("value bytes: {:?}", content); - - Ok(()) -} diff --git a/api-code-examples/rust/docs-share.rs b/api-code-examples/rust/docs-share.rs deleted file mode 100644 index fadfdd26..00000000 --- a/api-code-examples/rust/docs-share.rs +++ /dev/null @@ -1,26 +0,0 @@ -use iroh::{base::node_addr::AddrInfoOptions, client::docs::ShareMode}; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - let node_id = node.net().node_id().await?; - println!("Started Iroh node: {node_id}"); - - let doc = node.docs().create().await?; - println!("Created doc: {}", doc.id()); - - let ticket = doc.share(ShareMode::Read, AddrInfoOptions::Id).await?; - println!("Read-Access Ticket: {ticket}"); - - let ticket = doc.share(ShareMode::Write, AddrInfoOptions::Id).await?; - println!("Write-Access Ticket: {ticket}"); - - Ok(()) -} -// Output: -// Started Iroh node: rwgutd2wazt756h5awh6x576jejizai6w2l6ae5gxsv7tpswmopq -// Created doc: ijgvnoxfgkkgze3cyb7rwjywfqvfzy2pzilo2tn5wf64fgm7nxkq -// Read-Access Ticket: docafbe2vv24uzji3etmlah6gzhcywcuxhdj7fbn3knxwyx3quzt5w5kajarwgutd2wazt756h5awh6x576jejizai6w2l6ae5gxsv7tpswmopqcaifabfesmskyrlqbqfiahf4ivybeybxaaehhlf5maaaaaaaaaa2fhcvoajganyabbz2zplazdjnblb2x3kfyvlqcjqdoaaioowl2zctm6q34dlgzp6fk4 -// Write-Access Ticket: docaaqo2dtt7udula5vvevfwjenux3tk3l3lfpefugeu6r6v55pwusvc5qbecgy2smpkydgp7xy7ucy727x7zerfdebd23jpyatu26kx6n6kzrz6aibauaeusjsjlcfoagavaa4xrcxaetag4aaq45mxvqaaaaaaaaadiu4kvybeybxaaehhlf5mdenfufmhk7nixcvoajganyabbz2zpleknt2dpqnm3f7yvlq diff --git a/api-code-examples/rust/docs-watch.rs b/api-code-examples/rust/docs-watch.rs deleted file mode 100644 index 27f15fb3..00000000 --- a/api-code-examples/rust/docs-watch.rs +++ /dev/null @@ -1,80 +0,0 @@ -use futures_lite::StreamExt; -use iroh::client::docs::LiveEvent; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - // Create in memory iroh node - let node = iroh::node::Node::memory().enable_docs().spawn().await?; - - // Create document - let author = node.authors().default().await?; - - let doc = node.docs().create().await?; - println!("Created document {}", doc.id()); - - let mut sub = doc.subscribe().await?; - let handle = tokio::task::spawn(async move { - let mut insert = None; - while let Some(event) = sub.next().await { - let event = event?; - match event { - LiveEvent::InsertLocal { entry } => { - println!( - "LiveEvent - InsertLocal: entry hash {}", - entry.content_hash() - ); - insert = Some(entry.content_hash()); - break; - } - LiveEvent::InsertRemote { - from, - entry, - content_status, - } => { - println!("LiveEvent - InsertRemote:\n\tfrom: {}\n\tentry hash:\n\t{}\n\tcontent_status: {:?}", from, entry.content_hash(), content_status); - println!("Insert Remove events will be eventually followed by the ContentReady event"); - } - LiveEvent::ContentReady { hash } => { - println!("LiveEvent - ContentReady: hash {hash}"); - } - LiveEvent::NeighborUp(node_id) => { - println!("LiveEvent - NeighborUp: node id {node_id}"); - } - LiveEvent::NeighborDown(node_id) => { - println!("LiveEvent - NeighborDown: node id {node_id}"); - } - LiveEvent::PendingContentReady => { - println!("LiveEvent - PendingContent Ready"); - } - LiveEvent::SyncFinished(sync_event) => { - println!( - "Live Event - SyncFinished: synced peer: {}", - sync_event.peer - ); - break; - } - } - } - anyhow::Ok(insert) - }); - - let key = b"watch-me"; - let h = doc - .set_bytes( - author, - &key[..], - &b"I'm going to trigger an InsertLocal event."[..], - ) - .await?; - - let hash = handle.await??; - assert_eq!(hash, Some(h)); - - println!("Done!"); - Ok(()) -} - -// Output: -// Created document 3h6ea3d6ucs3iicwn2hzovpwhh3lpchs7b6nt5byoci3aqt6amfa -// LiveEvent - InsertLocal: entry hash bafkr4ic24i3eenzjflowjva7e2tyw24yafro5kvve6p6ziwics5kc2id5e -// Done! diff --git a/api-code-examples/swift/doc-get.swift b/api-code-examples/swift/doc-get.swift deleted file mode 100644 index a10dbc3d..00000000 --- a/api-code-examples/swift/doc-get.swift +++ /dev/null @@ -1,8 +0,0 @@ -import IrohLib - -let node = try! IroneNode() -let author = try! node.createAuthor() -let doc = try! Iroh.createDoc() - -let hash = try! doc.setBytes(author: author, key: "foo".data(using: .utf8)!, value: "bar".data(using: .utf8)!) -let value = try! doc.getContentBytes(hash: hash) diff --git a/api-code-examples/swift/doc-set.swift b/api-code-examples/swift/doc-set.swift deleted file mode 100644 index a10dbc3d..00000000 --- a/api-code-examples/swift/doc-set.swift +++ /dev/null @@ -1,8 +0,0 @@ -import IrohLib - -let node = try! IroneNode() -let author = try! node.createAuthor() -let doc = try! Iroh.createDoc() - -let hash = try! doc.setBytes(author: author, key: "foo".data(using: .utf8)!, value: "bar".data(using: .utf8)!) -let value = try! doc.getContentBytes(hash: hash) diff --git a/api-code-examples/yarn.lock b/api-code-examples/yarn.lock deleted file mode 100644 index 9e7f6a10..00000000 --- a/api-code-examples/yarn.lock +++ /dev/null @@ -1,81 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@number0/iroh-android-arm-eabi@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-android-arm-eabi/-/iroh-android-arm-eabi-0.28.1.tgz#58239479bbfc795f6b48412e41d786d13fb93c2f" - integrity sha512-wYu9+6HhbmgDl8nNWsU6ZO4Or4pL54JktOAcQqr/BsvBUezUEA+SwKTuNFGUnqI77Yzo+8vsuzNMernuAZ8nLw== - -"@number0/iroh-android-arm64@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-android-arm64/-/iroh-android-arm64-0.28.1.tgz#8f25fac04231f4ba19a9ff58cbee1863ef4ae4b5" - integrity sha512-mMHFmcIvFxmakshGmWGfmIAwWziZZmyV97d3DrqbTA5pfVbF+hF75asal6nX1BL0KQY2OiX9a8CtQspxz1qEYg== - -"@number0/iroh-darwin-arm64@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-darwin-arm64/-/iroh-darwin-arm64-0.28.1.tgz#c81edba97c3e0620aa82216d42cc1a5833d1db0d" - integrity sha512-Xvj+fBHKL2XkYs+sz4Y4mYznRmxm73NexrGd6UCyl/kqX7jEYGNoz+vOPom1ghp7AC59E3O1ok5KoOh89nqtcA== - -"@number0/iroh-darwin-universal@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-darwin-universal/-/iroh-darwin-universal-0.28.1.tgz#4a0884455f98fc5a8185d377d446b46e6a1a83e0" - integrity sha512-1VFcTqTKKJAsETHyF4P16u8hFWbeJW/QIeoHsUocJX8JrvjmsujFtBAINlKv9gkcXYHvd2fzwWD7agny9lMlJA== - -"@number0/iroh-linux-arm-gnueabihf@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-linux-arm-gnueabihf/-/iroh-linux-arm-gnueabihf-0.28.1.tgz#690664b59a3e59c7a06fc267b7d8c9b4b106f7b6" - integrity sha512-Pop0hr7jsaJ9+NPxEDeyRGB4ek4tmB7DeNLpjx8dfVk2NRG+8aazZrS9RDVYuxW0OyJLKlSVLhYOih0mkjcXUA== - -"@number0/iroh-linux-arm-musleabihf@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-linux-arm-musleabihf/-/iroh-linux-arm-musleabihf-0.28.1.tgz#7bdf3063f85c3e38a602c481aa4ef6952e34772f" - integrity sha512-hnA8YGthKZxv2d0fknDdIfRnLUHKy0KJf8tenuXodITaYqoo4NTB3t3tNp9OHtodP2MPr9691N3By07LFD0IMQ== - -"@number0/iroh-linux-arm64-gnu@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-linux-arm64-gnu/-/iroh-linux-arm64-gnu-0.28.1.tgz#776314e0d82b9a330f322875371a4f0ed84c2d90" - integrity sha512-0AMYJxsuXyIJDc5zBaq9k/LzulXFmbWMfWYuTwBDhoAgO/4i3kpYE5ilsWm66kFJiWtMgbLqbHA2MgMo1R95cg== - -"@number0/iroh-linux-arm64-musl@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-linux-arm64-musl/-/iroh-linux-arm64-musl-0.28.1.tgz#64d5cfa26bb40fda1188bb3dc84cd71087298910" - integrity sha512-ooPniqN1VSfXZbNSmE0OmY0vk8d6goI7hn5m7UmuZiv5UOwb4aAMHGOBp/zIlYeFGySbmbopTOmMgzbCJWkITA== - -"@number0/iroh-linux-x64-gnu@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-linux-x64-gnu/-/iroh-linux-x64-gnu-0.28.1.tgz#abcef57ed18c46f0fd0a37ada001dca23868005a" - integrity sha512-Xh8w9ujYpbXX7gzvk70hHUdl7xXkAB+RNHe/TrI32mSl/TfF8ypNI4Pn8wvw35iGAALjTA8eXqL8F3c7mb7Pmg== - -"@number0/iroh-linux-x64-musl@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-linux-x64-musl/-/iroh-linux-x64-musl-0.28.1.tgz#b5907b4b1eb0ce021ed0a5503dafcf18c8d15dfe" - integrity sha512-3bVb2B4ytfEqs974vrIthr1JzM2je+rj7SMMAqgt5IPRvV3RnTNblAOXpT22O/4Sfk8NzqNnnBAs4n34TBPsbA== - -"@number0/iroh-win32-arm64-msvc@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-win32-arm64-msvc/-/iroh-win32-arm64-msvc-0.28.1.tgz#ba6764a08c10856fcfdfabed7c48ab9b3c1475a0" - integrity sha512-tr048mJwASWr1Vr4ixEAG7DJws5c+n8jAFgOrsaUbqBC0nuxuUhIRs9cbesLzzf6xqU4hD9PJhu1eoJasUQfHA== - -"@number0/iroh-win32-x64-msvc@0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh-win32-x64-msvc/-/iroh-win32-x64-msvc-0.28.1.tgz#e0263b581fefbd14ccf16877a0814e9cc6a6db41" - integrity sha512-j2b8s5kDtkDfB9/rPaT821iM6o0lc1bENDMJaZfst89KBiPo8xb20ZaqCao6XzMxMaJgBgFN/EjrYU7kmErB1w== - -"@number0/iroh@=0.28.1": - version "0.28.1" - resolved "https://registry.yarnpkg.com/@number0/iroh/-/iroh-0.28.1.tgz#f0dd0193bf287d6ec1b991f67161b9bf879c7b14" - integrity sha512-J6qLo3TAUNT2cFtjwgu5UUxO6poKO2MpjOf7mjtbu7jPkXZB1DuUsg7nhcwjoQEvIIqrKUK7xo0LwIkK8vu53Q== - optionalDependencies: - "@number0/iroh-android-arm-eabi" "0.28.1" - "@number0/iroh-android-arm64" "0.28.1" - "@number0/iroh-darwin-arm64" "0.28.1" - "@number0/iroh-darwin-universal" "0.28.1" - "@number0/iroh-linux-arm-gnueabihf" "0.28.1" - "@number0/iroh-linux-arm-musleabihf" "0.28.1" - "@number0/iroh-linux-arm64-gnu" "0.28.1" - "@number0/iroh-linux-arm64-musl" "0.28.1" - "@number0/iroh-linux-x64-gnu" "0.28.1" - "@number0/iroh-linux-x64-musl" "0.28.1" - "@number0/iroh-win32-arm64-msvc" "0.28.1" - "@number0/iroh-win32-x64-msvc" "0.28.1" diff --git a/src/app/blog/ffi-updates/page.mdx b/src/app/blog/ffi-updates/page.mdx new file mode 100644 index 00000000..e7b44ad2 --- /dev/null +++ b/src/app/blog/ffi-updates/page.mdx @@ -0,0 +1,73 @@ +import { BlogPostLayout } from '@/components/BlogPostLayout' +import { MotionCanvas } from '@/components/MotionCanvas' + +export const post = { + draft: false, + author: 'b5', + date: '2025-02-12', + title: 'Update On FFI Bindings', + description: 'We are delaying FFI support until after the iroh 1.0 release.', +} + +export const metadata = { + title: post.title, + description: post.description, + openGraph: { + title: post.title, + description: post.description, + images: [{ + url: `/api/og?title=Blog&subtitle=${post.title}`, + width: 1200, + height: 630, + alt: post.title, + type: 'image/png', + }], + type: 'article' + } +} + +export default (props) => + +We wanted to share an important update about the **Kotlin, Python, Swift, and JavaScript FFI bindings for iroh**. After a lot of thought, we’ve decided that **we won’t be updating these bindings until we can improve the experience of using FFI.** + +## Why? + +Two reasons: + +1. **Because we don’t think our FFI story is good enough right now.** Our promise is to ship “P2P that works”, and we’re not hitting that “just works” experience in languages that aren’t rust. +2. **We’re concerned about ecosystem fragmentation**. If one person writes an iroh protocol but does it in python via FFI bindings, that will only work for Iroh in python. This is likely what will happen in the long run regardless of what we do, but we want to see if we can make things easier. + +## What’s the plan? + +We have three possible solutions we’re actively chasing, and will update you as we make progress on which we think will work the best. + +1. **Move language integration up a level:** community members are having success with projects like [flutter rust bridge](https://github.com/fzyzcjy/flutter_rust_bridge) & [react native UniFFI](https://github.com/jhugman/uniffi-bindgen-react-native). We’ll likely lean into this either way, the only question is is this the *only FFI* solution, or do we need more? +2. Ship composable FFI across iroh protocols. This would give tooling to iroh protocol developers for automatically generating FFI APIs that can compose together in the host language. dignifiedquire has been hacking on a prototype, but it doesn’t yet work, and we don’t know if it will. For more information on the current blockers we are facing, take a look at these issues: + - [https://github.com/mozilla/uniffi-rs/pull/2423](https://github.com/mozilla/uniffi-rs/pull/2423)/ + - [https://github.com/PyO3/maturin/issues/2459](https://github.com/PyO3/maturin/issues/2459) +3. Ship 1.0, do ground-up re-implementations in popular languages. After 1.0 we will have a proper spec to work from. There’s no way we could pull this off without community support, and we’re not going to ask people to do that until *after* we ship 1.0, and know that iroh has a solid spec to build on. + +## So, You’re just giving up on other languages? + +No! We’re still shipping iroh in browsers. We’re still working on running these plans to ground, all futures for iroh pass through robust support for javascript, kotlin, swift, and python *at a minimum*, we just want to get it right and don’t want to waste your time until we’re confident our support for each language matches the experience we’re currently providing in rust. + +## Want to Keep Using iroh-ffi? + +We know some of you are using the existing FFI bindings, and if you’d like to keep them updated, we’d love to see **community contributions!** If you’re interested, you’re more than welcome to submit **pull requests**: + +- **Current iroh-ffi repository:** https://github.com/n0-computer/iroh-ffi + +If you’d rather build your own FFI bindings and focus only on the parts you need, here are a couple of great resources to help you get started: + +- **UniFFI** (for Rust-to-FFI generation): https://mozilla.github.io/uniffi-rs/latest/ +- **NAPI** (for Node.js FFI): [https://napi.rs/](https://napi.rs/) + +We really appreciate all of your support, and we’re excited for what’s ahead! If you have any thoughts or ideas, feel free to share them with us on [GitHub](https://github.com/n0-computer/iroh) or join us on [discord](https://discord.gg/raGSbNC3fG). + +Thanks for being part of the journey! + +## TODOs + +- [x] get @dig ‘s feedback +- [ ] push blog post PR +- [ ] comment out all the non rust parts of the website diff --git a/src/app/docs/layout.jsx b/src/app/docs/layout.jsx index 471d27c9..f37791d2 100644 --- a/src/app/docs/layout.jsx +++ b/src/app/docs/layout.jsx @@ -34,7 +34,6 @@ export const navItems = [ {title: 'Resources', links: [ {title: 'Protocol Registry', href: '/proto'}, - {title: 'Language SDKs', href: '/docs/sdks'}, {title: 'Awesome List', href: 'https://github.com/n0-computer/awesome-iroh'}, {title: 'FAQ', href: '/docs/faq' }, ], diff --git a/src/app/docs/page.mdx b/src/app/docs/page.mdx index d151c603..e3e89e49 100644 --- a/src/app/docs/page.mdx +++ b/src/app/docs/page.mdx @@ -37,16 +37,23 @@ The best place to start is by reading the overview, a high level look at the pro + diff --git a/src/app/docs/protocols/docs/page.mdx b/src/app/docs/protocols/docs/page.mdx index 4e82b188..e2f2df0f 100644 --- a/src/app/docs/protocols/docs/page.mdx +++ b/src/app/docs/protocols/docs/page.mdx @@ -77,4 +77,4 @@ Iroh-docs can be used with in-memory or file-system based storage. The store is ## API -Documents can be manipulated and queried using the [docs API](/docs/api), also available via our various [official SDKs](/docs/sdks). +Documents can be manipulated and queried using the [docs API](/docs/api). diff --git a/src/app/docs/sdks/page.mdx b/src/app/docs/sdks/page.mdx deleted file mode 100644 index bccff1aa..00000000 --- a/src/app/docs/sdks/page.mdx +++ /dev/null @@ -1,18 +0,0 @@ -import Image from 'next/image'; -import {Libraries} from '@/components/Libraries'; - -export const metadata = { - title: 'Iroh SDKs', - description: - 'Iroh offers Rust, Swift, and Python libraries to bring the full benefit of iroh to your app.', -}; - -export const sections = [ - {title: 'Official libraries', id: 'official-libraries'}, -]; - -# Iroh SDKs - -The recommended way to interact with the iroh is by using one of our official Software Development Kits (SDKs). {{className: 'lead'}} - - diff --git a/src/app/page.mdx b/src/app/page.mdx index 5474b68a..5753515e 100644 --- a/src/app/page.mdx +++ b/src/app/page.mdx @@ -136,41 +136,8 @@ export const metadata = { unoptimized /> -
- -
-
- -
-
- -
-
- -
-

Build in your language

-

Iroh supports a growing set of languages, embedding nodes directly in your project without any need to call out to an external API

+

Build in your Rust

Start Building @@ -178,49 +145,6 @@ export const metadata = {
-```js {{ title: 'nodejs' }} -import { argv } from 'process' -import { Iroh, BlobTicket } from '@number0/iroh' - -// serve & fetch data with iroh, from any two devices in the world -// run this example from any two computers, and iroh will connect them! -(async () => { - // create a new node with default protocols - const node = await Iroh.memory(); - - // Choose between client & server roles based on the presence of a download CLI argument - if (argv.length > 2) { - - // we have a download argument. Fetch some data! - let ticket = BlobTicket.fromString(argv[2]); - console.log(`fetching hash '${ticket.hash}' from node: '${ticket.nodeAddr.nodeId.toString()};`); - - // download the data - await node.blobs.download(ticket.hash, ticket.asDownloadOptions(), (_err) => {}); - - // read the data - const data = await node.blobs.readToBytes(ticket.hash); - console.log("data:", new TextDecoder().decode(new Uint8Array(data))); - - } else { - - // no download argument. Serve some data that says "Hello, world!" - const data = Array.from(new TextEncoder().encode('Hello, World!')); - const result = await node.blobs.addBytes(data); - // create a "ticket" for sharing data with another node - const ticket = await node.blobs.share(result.hash, result.format, 'RelayAndAddresses'); - - console.log(`server running. in another terminal run:\n\nnode hello.js ${ticket.toString()}`); - // wait for ctrl+c - await new Promise((resolve) => { - process.on('SIGINT', () => { resolve() }); - setInterval(() => {}, 1000); - }); - process.exit(); - } -})(); -``` - ```rust {{ title: 'rust' }} use std::{env, str::FromStr}; @@ -277,18 +201,6 @@ async fn main() -> anyhow::Result<()> { ``` -```swift {{ title: 'swift' }} -import IrohLib - -let node = try! IroneNode() -let author = try! node.createAuthor() -let doc = try! Iroh.createDoc() - -let hash = try! doc.setBytes(author: author, key: "foo".data(using: .utf8)!, value: "bar".data(using: .utf8)!) -let value = try! doc.getContentBytes(hash: hash) - -``` - diff --git a/src/components/Libraries.jsx b/src/components/Libraries.jsx index 82f10b62..15d7a07f 100644 --- a/src/components/Libraries.jsx +++ b/src/components/Libraries.jsx @@ -22,44 +22,6 @@ const libraries = [ { title: "github", href: "https://github.com/n0-computer/iroh", external: true } ] }, - { - name: 'node.js', - description: 'Iroh\'s node.js SDK uses the rust runtime via c-bindings, maximizing performance from the comfort of javascript syntax.', - logo: logoNodeJs, - links: [ - { title: "npm", href: "https://www.npmjs.com/package/@number0/iroh", external: true }, - { title: "github", href: "https://github.com/n0-computer/iroh-ffi/tree/main/iroh-js", external: true } - ] - }, - { - name: 'Python', - description: - 'Iroh\'s python SDK uses the rust runtime via c-bindings, maximizing performance from the comfort of python syntax.', - logo: logoPython, - links: [ - { title: "pypi", href: "https://pypi.org/project/iroh/", external: true }, - { title: "github", href: "https://github.com/n0-computer/iroh-ffi/blob/main/README.python.md", external: true } - ] - }, - { - name: 'Swift', - description: - 'Build native iOS apps with iroh\'s swift SDK, tested with SwiftUI, works with uikit.', - logo: logoSwift, - links: [ - { title: "cocoapods", href: "https://cocoapods.org/pods/IrohLib", external: true }, - { title: "github", href: "https://github.com/n0-computer/iroh-ffi/blob/main/README.swift.md", external: true } - ] - }, - { - name: 'Kotlin', - description: - 'Iroh\'s Kotlin SDK uses the rust implementation via c-bindings.', - logo: logoKotlin, - links: [ - { title: "github", href: "https://github.com/n0-computer/iroh-ffi/blob/main/README.kotlin.md", external: true } - ] - } ]; export function Libraries() { From 96a616f16d06da9fa06a0533c0339be1bacfcbac Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Fri, 14 Feb 2025 11:44:06 +0100 Subject: [PATCH 2/5] fixup CR --- src/app/blog/ffi-updates/page.mdx | 6 - src/app/docs/examples/ios-starter/page.mdx | 156 --------------------- src/app/page.mdx | 11 +- src/components/Examples.jsx | 14 -- 4 files changed, 1 insertion(+), 186 deletions(-) delete mode 100644 src/app/docs/examples/ios-starter/page.mdx diff --git a/src/app/blog/ffi-updates/page.mdx b/src/app/blog/ffi-updates/page.mdx index e7b44ad2..c4136535 100644 --- a/src/app/blog/ffi-updates/page.mdx +++ b/src/app/blog/ffi-updates/page.mdx @@ -65,9 +65,3 @@ If you’d rather build your own FFI bindings and focus only on the parts you ne We really appreciate all of your support, and we’re excited for what’s ahead! If you have any thoughts or ideas, feel free to share them with us on [GitHub](https://github.com/n0-computer/iroh) or join us on [discord](https://discord.gg/raGSbNC3fG). Thanks for being part of the journey! - -## TODOs - -- [x] get @dig ‘s feedback -- [ ] push blog post PR -- [ ] comment out all the non rust parts of the website diff --git a/src/app/docs/examples/ios-starter/page.mdx b/src/app/docs/examples/ios-starter/page.mdx deleted file mode 100644 index 1267edf9..00000000 --- a/src/app/docs/examples/ios-starter/page.mdx +++ /dev/null @@ -1,156 +0,0 @@ -import Image from 'next/image' - -export const metadata = { - title: 'Getting Started with iOS', - description: 'build a from-scratch iOS project that includes iroh as a swift module' -} - -# Getting Started with iOS - -This guide will walk you through setting up an example iOS project that includes the iroh swift module. We'll use it to join a document created on a computer from the iroh console. - -## Create a new Xcode project - -Make sure you have [xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12) installed, and have run `xcode-select --install` to install the command line tools. - -Next, create a new Xcode project. Select "App" under "iOS" and click "Next". You'll need to fill in a few details for your example project. Given this is a starter project, we'll call it "Iroh Example" and set the organization identifier to "com.example.iroh". You can leave the rest of the fields as their defaults. - - - - -If you want to publish this app, be sure to pick a usable, permanent name and organization identifier. - - -## Import the iroh swift module - -Select `File > Add Packages...` to pull up the swift package management window. In the upper right corner paste `https://github.com/n0-computer/iroh-ffi` into the search bar and hit enter. You should see the `iroh-ffi` package appear in the list below. Click "Next" to continue. - - - -Resolving the package will take at least a minute. Once it's done, you'll see a list of targets to import. Select the `IrohLib` target and click "Finish". - -## Add the System Configuration framework - -Iroh depends on the `System Configuration` framework, in addition to `IrohLib`. To add it, click on `Iroh Example` in the top-left explorer, go to the `General` tab, and scroll down to build settings. Here we're showing build settings with IrohLib and SystemConfiguration already added: - - - -Click the `+` button to add a new framework, and search for `SystemConfiguration`. Select it and click "Add". - - - - -## Use IrohLib - -Next, open up `ContentView`, and replace the contents with the following: - -```swift {{ label: "ContentView.swift" }} -import SwiftUI -import IrohLib - -struct ContentView: View { - @State var node: IrohNode - @State private var ticketString: String = "" - @State private var contentList: String = "No document joined" - - var body: some View { - let peer_id = node.peerId() - - VStack { - Text("Hello \(peer_id)") - TextField("Enter Doc Ticket", text: $ticketString) - Button("Join Doc") { - join() - } - Text("Current Document: \(contentList)") - } - .padding() - } - - init() { - _node = .init(wrappedValue: try! IrohNode()) - let _ = print("Starting..") - - let peer_id = node.peerId() - let _ = print("created iroh node \(node) with peer id \(peer_id)") - } - - func join() { - print("joining \(ticketString)") - let docTicket = try! DocTicket.fromString(content: ticketString) - let doc = try! node.importDoc(ticket: docTicket) - - DispatchQueue.main.asyncAfter(deadline: .now() + 1) { - let content = try! doc.latest() - print("got \(content.count) elements for \(doc.id())") - - let formattedList = content.map { (entry) -> String in - let content: String = { - do { - let c = try doc.getContentBytes(hash: entry.hash()) - return String(decoding: c, as: UTF8.self) - } catch { - return "N/A" - } - }() - let key = String(decoding: entry.key(), as: UTF8.self) - let author_s = entry.author().toString() - return "Author: \(author_s) wrote '\(key)' -> '\(content)'" - }.joined(separator: "\n") - contentList = "\(doc.id()) (\(content.count))\n\n\(formattedList)" - } - } -} - -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - ContentView() - } -} - -extension StringProtocol { - var data: Data { .init(utf8) } - var bytes: [UInt8] { .init(utf8) } -} -``` - -## Create a document from the console - -To create a document, we'll use the iroh console. If you haven't already, [install the console](/docs/install). Once it's installed, run `iroh start` in one terminal, and `iroh console` in another. You should see a prompt like this: - - - -We'll run a few commands in the console to create a document, set an entry, and create a write-access sharing ticket: - -```text {{ tag: "console" }} -author:fhu3uk4w… -> doc new --switch -f63gfy767x2a3dvkebazujowr6endgx6cs5pk22g7eivnrvfek5q -Active doc is now f63gfy76… - -author:fhu3uk4w… doc:f63gfy76… -> doc set "apples" "bananas" -@fhu3uk4w…: apples = yb4ovrnc… (7 B) - -author:fhu3uk4w… doc:f63gfy76… -> doc share write -3alzs6xv4xttucuid... -``` - -## Join the document from the app - - - - - Now that we have a document, we can join it from the app. Run the app in the simulator by clicking the play button in the top left corner of Xcode. Once you do, paste the ticket from the console into the text field and click "Join Doc". You should see the document's contents appear in the text box below: - - - - - - -Congrats! You're up & running with iroh on iOS. You can now use the iroh console to add more entries to the document, and see them appear in the app. - -## Next steps - -* [Read the Command docs & swift examples](/docs/commands) diff --git a/src/app/page.mdx b/src/app/page.mdx index 5753515e..2568049b 100644 --- a/src/app/page.mdx +++ b/src/app/page.mdx @@ -14,16 +14,7 @@ import {PerfChartIllustration} from '@/components/PerfChartIllustration'; import {ConnectDevicesIllustration} from '@/components/ConnectDevicesIllustration'; import {ProtocolHeroList} from '@/components/ProtocolHeroList'; -import logoGo from '@/images/logos/go.svg'; -import logoPython from '@/images/logos/python.svg'; import logoRust from '@/images/logos/rust.svg'; -import logoSwift from '@/images/logos/swift.svg'; -import logoNode from '@/images/logos/node.svg'; -import logoKotlin from '@/images/logos/kotlin.svg'; -import iconCarat from '@/images/icons/icon_carat.svg'; -import iconFaster from '@/images/icons/icon_faster.svg'; -import iconOpen from '@/images/icons/icon_open.svg'; -import iconPlatforms from '@/images/icons/icon_platforms.svg'; export const metadata = { title: 'Iroh', @@ -137,7 +128,7 @@ export const metadata = { />
-

Build in your Rust

+

Build in Rust

Start Building diff --git a/src/components/Examples.jsx b/src/components/Examples.jsx index 56d91b98..17975d5a 100644 --- a/src/components/Examples.jsx +++ b/src/components/Examples.jsx @@ -108,20 +108,6 @@ const examples = [ [1, 3], ], }, - }, - { - href: '/docs/examples/ios-starter', - name: 'iOS Starter', - description: - 'Get up and running with iroh on iOS with this starter project.', - tags: ["iOS", "Swift"], - pattern: { - y: 16, - squares: [ - [3, 0], - [0, 1], - ], - }, } ]; From 1ad01b3f46d37b24434f6f5010a28bdfdfc0e74e Mon Sep 17 00:00:00 2001 From: b5 Date: Mon, 17 Feb 2025 12:53:27 -0500 Subject: [PATCH 3/5] add changelog & email subscription --- src/app/blog/ffi-updates/page.mdx | 20 ++++++--- src/app/changelog/page.jsx | 55 ++++++++++++++++++++++++ src/app/changelog/releases.json | 6 +++ src/app/page.mdx | 4 +- src/app/roadmap/page.jsx | 8 ++-- src/app/roadmap/roadmap.json | 13 ++++-- src/components/.SectionProvider.jsx.swp | Bin 0 -> 12288 bytes src/components/EmailSubscribe.jsx | 30 +++++++++++++ src/components/GithubStars.jsx | 2 +- src/components/HeaderSparse.jsx | 2 +- src/components/Input.jsx | 10 +++++ 11 files changed, 132 insertions(+), 18 deletions(-) create mode 100644 src/app/changelog/page.jsx create mode 100644 src/app/changelog/releases.json create mode 100644 src/components/.SectionProvider.jsx.swp create mode 100644 src/components/EmailSubscribe.jsx create mode 100644 src/components/Input.jsx diff --git a/src/app/blog/ffi-updates/page.mdx b/src/app/blog/ffi-updates/page.mdx index c4136535..1715d04e 100644 --- a/src/app/blog/ffi-updates/page.mdx +++ b/src/app/blog/ffi-updates/page.mdx @@ -1,12 +1,12 @@ import { BlogPostLayout } from '@/components/BlogPostLayout' -import { MotionCanvas } from '@/components/MotionCanvas' +import { EmailSubscribe } from '@/components/EmailSubscribe' export const post = { draft: false, author: 'b5', date: '2025-02-12', title: 'Update On FFI Bindings', - description: 'We are delaying FFI support until after the iroh 1.0 release.', + description: 'We are pausing FFI releases until we figure out a better solution', } export const metadata = { @@ -28,29 +28,35 @@ export const metadata = { export default (props) => -We wanted to share an important update about the **Kotlin, Python, Swift, and JavaScript FFI bindings for iroh**. After a lot of thought, we’ve decided that **we won’t be updating these bindings until we can improve the experience of using FFI.** +We wanted to share an important update about the Kotlin, Python, Swift, and JavaScript FFI bindings for iroh. After a lot of thought, we’ve decided that **we won’t be updating these bindings with iroh releases until we can improve the experience of using FFI.** ## Why? Two reasons: 1. **Because we don’t think our FFI story is good enough right now.** Our promise is to ship “P2P that works”, and we’re not hitting that “just works” experience in languages that aren’t rust. -2. **We’re concerned about ecosystem fragmentation**. If one person writes an iroh protocol but does it in python via FFI bindings, that will only work for Iroh in python. This is likely what will happen in the long run regardless of what we do, but we want to see if we can make things easier. +2. **We’re concerned about ecosystem fragmentation**. If one person writes an iroh protocol but does it in python via FFI bindings, _that will only work for Iroh in python_. This is likely what will happen in the long run regardless of what we do, but we want to see if we can make things easier. ## What’s the plan? We have three possible solutions we’re actively chasing, and will update you as we make progress on which we think will work the best. 1. **Move language integration up a level:** community members are having success with projects like [flutter rust bridge](https://github.com/fzyzcjy/flutter_rust_bridge) & [react native UniFFI](https://github.com/jhugman/uniffi-bindgen-react-native). We’ll likely lean into this either way, the only question is is this the *only FFI* solution, or do we need more? -2. Ship composable FFI across iroh protocols. This would give tooling to iroh protocol developers for automatically generating FFI APIs that can compose together in the host language. dignifiedquire has been hacking on a prototype, but it doesn’t yet work, and we don’t know if it will. For more information on the current blockers we are facing, take a look at these issues: +2. **Ship composable FFI across iroh protocols.** This would give tooling to iroh protocol developers for automatically generating FFI APIs that can compose together in the host language. dignifiedquire has been hacking on a prototype, but it doesn’t yet work, and we don’t know if it will. For more information on the current blockers we are facing, take a look at these issues: - [https://github.com/mozilla/uniffi-rs/pull/2423](https://github.com/mozilla/uniffi-rs/pull/2423)/ - [https://github.com/PyO3/maturin/issues/2459](https://github.com/PyO3/maturin/issues/2459) -3. Ship 1.0, do ground-up re-implementations in popular languages. After 1.0 we will have a proper spec to work from. There’s no way we could pull this off without community support, and we’re not going to ask people to do that until *after* we ship 1.0, and know that iroh has a solid spec to build on. +3. **Ship 1.0, do native implementations of iroh in each language.** After 1.0 we will have a proper spec to work from. There’s no way we could pull this off without community support, and we’re not going to ask people to do that until *after* we ship 1.0, and know that iroh has a solid spec to build on. ## So, You’re just giving up on other languages? No! We’re still shipping iroh in browsers. We’re still working on running these plans to ground, all futures for iroh pass through robust support for javascript, kotlin, swift, and python *at a minimum*, we just want to get it right and don’t want to waste your time until we’re confident our support for each language matches the experience we’re currently providing in rust. +## When can I expect an update? + +Deciding on a path forward is part of our 1.0 roadmap, you can subscribe for updates here, or keep an eye on the [changelog](/changelog). + + + ## Want to Keep Using iroh-ffi? We know some of you are using the existing FFI bindings, and if you’d like to keep them updated, we’d love to see **community contributions!** If you’re interested, you’re more than welcome to submit **pull requests**: @@ -62,6 +68,6 @@ If you’d rather build your own FFI bindings and focus only on the parts you ne - **UniFFI** (for Rust-to-FFI generation): https://mozilla.github.io/uniffi-rs/latest/ - **NAPI** (for Node.js FFI): [https://napi.rs/](https://napi.rs/) -We really appreciate all of your support, and we’re excited for what’s ahead! If you have any thoughts or ideas, feel free to share them with us on [GitHub](https://github.com/n0-computer/iroh) or join us on [discord](https://discord.gg/raGSbNC3fG). +We really appreciate all of your support, and we’re excited for what’s ahead! If you have any thoughts or ideas, feel free to share them with us on [GitHub](https://github.com/n0-computer/iroh/discussions) or join us on [discord](https://discord.gg/raGSbNC3fG). Thanks for being part of the journey! diff --git a/src/app/changelog/page.jsx b/src/app/changelog/page.jsx new file mode 100644 index 00000000..9830c8f0 --- /dev/null +++ b/src/app/changelog/page.jsx @@ -0,0 +1,55 @@ +import Link from 'next/link'; +import clsx from 'clsx'; +import { CheckCircleIcon } from '@heroicons/react/20/solid'; + +import { EmailSubscribe } from "@/components/EmailSubscribe" +import { BlankLayout } from '@/components/BlankLayout'; +import { formatDate } from '@/lib/formatDate' +import releases from './releases.json'; + +export const metadata = { + title: 'Roadmap', + description: + 'Iroh 1.0 roadmap. Here\'s where we\'re headed, and progress we made against our goal to date.', +}; + +export default function Component() { + return ( + +

Change Log

+
+

Subscribe for updates

+ +
+

We'll send you an email with each new release of iroh & and a link to the blog post. Right now iroh is releasing roughly every 3 weeks.

+
+
+ {releases.map((release, i) => )} +
+ ) +} + +function Release({ data }) { + const { version, date, title, github_release, changelog, blog_post } = data; + return ( +
+
+ +
+
+

+ {version} +

+

{formatDate(date, true)}

+
+
+

{title || "untitled"}

+ {blog_post && blog post} + {github_release && github} + {changelog && changelog} +
+
+ ) +} diff --git a/src/app/changelog/releases.json b/src/app/changelog/releases.json new file mode 100644 index 00000000..ccbcd617 --- /dev/null +++ b/src/app/changelog/releases.json @@ -0,0 +1,6 @@ +[ + { "version": "0.32.1", "date": "2025-02-05", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.32.1", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0321---2025-02-05" }, + { "version": "0.32.0", "date": "2025-02-04", "title": "Browsers Alpha, QAD, and n0-future", "blog_post": "https://www.iroh.computer/blog/iroh-0-32-0-browser-alpha-qad-and-n0-future", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.32.0", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0320---2025-02-04" }, + { "version": "0.31.0", "date": "2025-01-15", "title": "Back At Fighting Fit", "blog_post": "https://www.iroh.computer/blog/iroh-0-31-0-back-to-fighting-fit", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.31.0", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0310---2025-01-14" }, + { "version": "0.30.0", "date": "2024-12-16", "title": "Slimming Down", "blog_post": "https://www.iroh.computer/blog/iroh-0-30-0-slimming-down", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.30.0", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0300---2024-12-16" } +] diff --git a/src/app/page.mdx b/src/app/page.mdx index 2568049b..784e69c8 100644 --- a/src/app/page.mdx +++ b/src/app/page.mdx @@ -128,13 +128,13 @@ export const metadata = { /> -

Build in Rust

+

Build something amazing, today.

Start Building
- + ```rust {{ title: 'rust' }} use std::{env, str::FromStr}; diff --git a/src/app/roadmap/page.jsx b/src/app/roadmap/page.jsx index 98713f0d..9a30f962 100644 --- a/src/app/roadmap/page.jsx +++ b/src/app/roadmap/page.jsx @@ -19,7 +19,7 @@ export default function Component() {

iroh 1.0 roadmap

-

Here's where we're headed, and progress we made against our goal to date. For more details see the iroh 1.0 roadmap post

+

Here's where we're headed, and progress we made against our goal to date. For more details see the iroh 1.0 roadmap post, and check past releases in the changelog

Last Updated {formatDate(last_updated)}

@@ -44,7 +44,7 @@ function Release({ data }) { const { version, done, doc, released, expected } = data; return (
{done @@ -68,7 +68,7 @@ function Milestone({ data }) { const issueNunber = tracking_issue?.split("/").slice(-1)[0] return (
@@ -121,7 +121,7 @@ function AllDone({ data }) { const { title, description, link, all_done } = data; return (
diff --git a/src/app/roadmap/roadmap.json b/src/app/roadmap/roadmap.json index 166472ce..4786a892 100644 --- a/src/app/roadmap/roadmap.json +++ b/src/app/roadmap/roadmap.json @@ -1,5 +1,5 @@ { - "last_updated": "2024-12-04", + "last_updated": "2025-02-11", "milestones": [ { "done": true, @@ -9,7 +9,7 @@ }, { "version": "v0.26.0", "done": true, "released": "2024-09-30", "doc": "https://www.iroh.computer/blog/iroh-0-26-0-Say-Hello-to-Your-Neighbors" }, { "version": "v0.27.0", "done": true, "released": "2024-10-21", "doc": "https://www.iroh.computer/blog/iroh-0-27-0-Squashing-Bugs-And-Taking-Names" }, - { + { "done": true, "title": "pull custom protocols out of iroh", "description": "pull custom protocols out of iroh and into separate repositories", @@ -107,7 +107,6 @@ "tracking_issue": "https://github.com/n0-computer/iroh/pull/3049" }, { "version": "v0.32.0", "done": true, "released": "2024-02-03", "doc": "https://www.iroh.computer/blog/iroh-0-32-0-browser-alpha-qad-and-n0-future" }, - { "ellipsis": true }, { "done": false, "title": "browser support", @@ -190,6 +189,14 @@ "description": "Using Quic to traverse NATs", "doc": "https://www.ietf.org/archive/id/draft-seemann-quic-nat-traversal-01.html" }, + { + "done": false, + "title": "Finalize FFI integration", + "description": "protocol developers have a clear path for integrating rust protocols into other languages", + "tracking_issue": "", + "doc": "" + }, + { "ellipsis": true }, { "version": "v0.36.0", "done": false, "released": "2024-04-21", "doc": null }, { "done": false, diff --git a/src/components/.SectionProvider.jsx.swp b/src/components/.SectionProvider.jsx.swp new file mode 100644 index 0000000000000000000000000000000000000000..a53d85aa7778bd41646bbda96b77dd354b060045 GIT binary patch literal 12288 zcmeI2Uu+ab9LJ|Z0hK>S!uzNRx0hbG1%n9(*NP2j6HEvd2#`XqyL0X0-R`+N*A|YG z1dLA-H7fEV8s2=;nE2*{i4kKk>WeWk(U|yvi39^a^5S>??d@& z&3AtDn`ygK!-vP8r#szYg6k1N`hLCX-#Ytk|E~T%GPOe#-unt$jVTrnN)yY~etBxg zkQe!ED2SsO*NYm>7H9EL5_>3aG^3D(JQi=-zL}T6OTVeH$Qr4h3#xLtAJI&Dqt0`3RnfK0#*U5fK}lCpa5_7k#iWx19~uX z`m-6|f3e1*`&A0jq#jz$#!BunJfOtOEC;0#%=oyYTx@@dp6>|KI%n ze`gaRx54k=NANZH415UQ0~f&wFbSRlJHQ5Tb0Z1a3S; z$oJqHI1i41bzm*H{vaVAfJ@*VFbVd7yXy$~4SWaQ2UozG;1Jjhepm}#z*TS=ya8SZ zRd5^}0~^8TYv3<94#H$lZ~>eICqNl&27j$0 zD9Qi+R3f{@8OL#_NA{xkD(88E?fQZ6$1iM=^5}@v}q| zR>zwsQC!@GI$jheoXRJ(BC3u>A!qa4(Ql{7mbwfL*nBgJIjyxq`R+LEaOSkh~nl<;O(!Tj#_+gtp-buQ>2v< zF;*(1I2MutR_h?%gU6;Ev91H#3J0q+@zwu)M5$GjYtROB9b~H9Es3Wtyqfnm7hu{WOEB= zLN@9)%YLJDVGFm}N@kqEPv;Ps1raTJR+q!0Cf!}3N{OR%>sC4yaUM13NVjl+1|j0) zITlRM@FFp7DRoTUMcVI9%X*vBvuCpwME@gcRdg>MN(+{58`P-GRmK|x_6yO0dB`@; z^+FnTqgoBh9%KzVI!cE#DnM}=u}A4(#v4k@iNC_w(s|P4KDAHWf6{8s)O--p(pjE5niZh-gv=W^SP0|}jzL}>3blap3 z9g53@kNCdS>=#bLi9%-VLOE?+85Q|#SWLa}c91I3y0fBlpyf4f=x(GVmfabx0QD7z%OMwE@^Ku#hs-@gJ9D2p3u(q&6yES%;u z#t@}-hTUI1)Ed%Z^RyPl-OyBCFPs}Vdpvc_46VD$kjPbhiczU7qs*sAh{aMhGEN&~ zO?RX0KCAjL1Ae(aZO$nhP^KOD&U2mPDW79gHrB-Ao-w2bM4g+4~vYd%c>5q&( zx!;MDsiv`0Ea`7p0H#np%03YHdLz*T$=2*$IkIi?>Naw(V7?ndo$Crxo;4Dhx( z&iieh&pNagV@oYOJyZ{-hIC;8dEC^?bXZCkrfGGi1?@r~^-T%RxgN*8TQp8=)v9gqUg5R=Xhk9}oLl=Joe1w9j literal 0 HcmV?d00001 diff --git a/src/components/EmailSubscribe.jsx b/src/components/EmailSubscribe.jsx new file mode 100644 index 00000000..f4cb987f --- /dev/null +++ b/src/components/EmailSubscribe.jsx @@ -0,0 +1,30 @@ +import { Input } from "@/components/Input"; +import { Heading } from "./Heading"; + +export function EmailSubscribe() { + return ( +
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ ) +} diff --git a/src/components/GithubStars.jsx b/src/components/GithubStars.jsx index 0dd0aeec..8909483a 100644 --- a/src/components/GithubStars.jsx +++ b/src/components/GithubStars.jsx @@ -6,7 +6,7 @@ export default function GithubStars(props) { return ( - 3.6k + 4.1k ) } diff --git a/src/components/HeaderSparse.jsx b/src/components/HeaderSparse.jsx index 33246a95..35af9e7d 100644 --- a/src/components/HeaderSparse.jsx +++ b/src/components/HeaderSparse.jsx @@ -44,7 +44,7 @@ export function HeaderSparse() { if (window.scrollY > 0) { navbar.classList.add('bg-irohGray-50', 'shadow-md', 'dark:bg-irohGray-900'); } else { - navbar.classList.remove('bg-irohGray-50', 'shadow-md', 'dark:bg-irohGray-900'); + navbar?.classList.remove('bg-irohGray-50', 'shadow-md', 'dark:bg-irohGray-900'); } } diff --git a/src/components/Input.jsx b/src/components/Input.jsx new file mode 100644 index 00000000..4212fbbe --- /dev/null +++ b/src/components/Input.jsx @@ -0,0 +1,10 @@ + + +export function Input(props) { + return( + + ) +} From 61b650b8471864158d6ed09eb32d49afc7b94aaf Mon Sep 17 00:00:00 2001 From: b5 Date: Mon, 17 Feb 2025 12:58:08 -0500 Subject: [PATCH 4/5] quick fixes --- src/app/blog/ffi-updates/page.mdx | 2 +- src/components/.SectionProvider.jsx.swp | Bin 12288 -> 0 bytes src/components/GithubStars.jsx | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 src/components/.SectionProvider.jsx.swp diff --git a/src/app/blog/ffi-updates/page.mdx b/src/app/blog/ffi-updates/page.mdx index 1715d04e..9a2d2ed5 100644 --- a/src/app/blog/ffi-updates/page.mdx +++ b/src/app/blog/ffi-updates/page.mdx @@ -53,7 +53,7 @@ No! We’re still shipping iroh in browsers. We’re still working on running th ## When can I expect an update? -Deciding on a path forward is part of our 1.0 roadmap, you can subscribe for updates here, or keep an eye on the [changelog](/changelog). +Deciding on a path forward is part of our [1.0 roadmap](/release), which is slated to come out in the 2nd half of 2025, you can subscribe for updates here, or keep an eye on the [changelog](/changelog). diff --git a/src/components/.SectionProvider.jsx.swp b/src/components/.SectionProvider.jsx.swp deleted file mode 100644 index a53d85aa7778bd41646bbda96b77dd354b060045..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2Uu+ab9LJ|Z0hK>S!uzNRx0hbG1%n9(*NP2j6HEvd2#`XqyL0X0-R`+N*A|YG z1dLA-H7fEV8s2=;nE2*{i4kKk>WeWk(U|yvi39^a^5S>??d@& z&3AtDn`ygK!-vP8r#szYg6k1N`hLCX-#Ytk|E~T%GPOe#-unt$jVTrnN)yY~etBxg zkQe!ED2SsO*NYm>7H9EL5_>3aG^3D(JQi=-zL}T6OTVeH$Qr4h3#xLtAJI&Dqt0`3RnfK0#*U5fK}lCpa5_7k#iWx19~uX z`m-6|f3e1*`&A0jq#jz$#!BunJfOtOEC;0#%=oyYTx@@dp6>|KI%n ze`gaRx54k=NANZH415UQ0~f&wFbSRlJHQ5Tb0Z1a3S; z$oJqHI1i41bzm*H{vaVAfJ@*VFbVd7yXy$~4SWaQ2UozG;1Jjhepm}#z*TS=ya8SZ zRd5^}0~^8TYv3<94#H$lZ~>eICqNl&27j$0 zD9Qi+R3f{@8OL#_NA{xkD(88E?fQZ6$1iM=^5}@v}q| zR>zwsQC!@GI$jheoXRJ(BC3u>A!qa4(Ql{7mbwfL*nBgJIjyxq`R+LEaOSkh~nl<;O(!Tj#_+gtp-buQ>2v< zF;*(1I2MutR_h?%gU6;Ev91H#3J0q+@zwu)M5$GjYtROB9b~H9Es3Wtyqfnm7hu{WOEB= zLN@9)%YLJDVGFm}N@kqEPv;Ps1raTJR+q!0Cf!}3N{OR%>sC4yaUM13NVjl+1|j0) zITlRM@FFp7DRoTUMcVI9%X*vBvuCpwME@gcRdg>MN(+{58`P-GRmK|x_6yO0dB`@; z^+FnTqgoBh9%KzVI!cE#DnM}=u}A4(#v4k@iNC_w(s|P4KDAHWf6{8s)O--p(pjE5niZh-gv=W^SP0|}jzL}>3blap3 z9g53@kNCdS>=#bLi9%-VLOE?+85Q|#SWLa}c91I3y0fBlpyf4f=x(GVmfabx0QD7z%OMwE@^Ku#hs-@gJ9D2p3u(q&6yES%;u z#t@}-hTUI1)Ed%Z^RyPl-OyBCFPs}Vdpvc_46VD$kjPbhiczU7qs*sAh{aMhGEN&~ zO?RX0KCAjL1Ae(aZO$nhP^KOD&U2mPDW79gHrB-Ao-w2bM4g+4~vYd%c>5q&( zx!;MDsiv`0Ea`7p0H#np%03YHdLz*T$=2*$IkIi?>Naw(V7?ndo$Crxo;4Dhx( z&iieh&pNagV@oYOJyZ{-hIC;8dEC^?bXZCkrfGGi1?@r~^-T%RxgN*8TQp8=)v9gqUg5R=Xhk9}oLl=Joe1w9j diff --git a/src/components/GithubStars.jsx b/src/components/GithubStars.jsx index 8909483a..331aef49 100644 --- a/src/components/GithubStars.jsx +++ b/src/components/GithubStars.jsx @@ -6,7 +6,7 @@ export default function GithubStars(props) { return ( - 4.1k + 4.0k ) } From 0e63f62d110b3db380ed152f18f6df464151c7ec Mon Sep 17 00:00:00 2001 From: b5 Date: Mon, 17 Feb 2025 13:09:17 -0500 Subject: [PATCH 5/5] add more releases to changelog page --- src/app/changelog/page.jsx | 4 ++-- src/app/changelog/releases.json | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/app/changelog/page.jsx b/src/app/changelog/page.jsx index 9830c8f0..4cf99a04 100644 --- a/src/app/changelog/page.jsx +++ b/src/app/changelog/page.jsx @@ -8,9 +8,9 @@ import { formatDate } from '@/lib/formatDate' import releases from './releases.json'; export const metadata = { - title: 'Roadmap', + title: 'Changelog', description: - 'Iroh 1.0 roadmap. Here\'s where we\'re headed, and progress we made against our goal to date.', + 'Iroh Release History', }; export default function Component() { diff --git a/src/app/changelog/releases.json b/src/app/changelog/releases.json index ccbcd617..4de6f958 100644 --- a/src/app/changelog/releases.json +++ b/src/app/changelog/releases.json @@ -2,5 +2,17 @@ { "version": "0.32.1", "date": "2025-02-05", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.32.1", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0321---2025-02-05" }, { "version": "0.32.0", "date": "2025-02-04", "title": "Browsers Alpha, QAD, and n0-future", "blog_post": "https://www.iroh.computer/blog/iroh-0-32-0-browser-alpha-qad-and-n0-future", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.32.0", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0320---2025-02-04" }, { "version": "0.31.0", "date": "2025-01-15", "title": "Back At Fighting Fit", "blog_post": "https://www.iroh.computer/blog/iroh-0-31-0-back-to-fighting-fit", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.31.0", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0310---2025-01-14" }, - { "version": "0.30.0", "date": "2024-12-16", "title": "Slimming Down", "blog_post": "https://www.iroh.computer/blog/iroh-0-30-0-slimming-down", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.30.0", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0300---2024-12-16" } + { "version": "0.30.0", "date": "2024-12-17", "title": "Slimming Down", "blog_post": "https://www.iroh.computer/blog/iroh-0-30-0-slimming-down", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.30.0", "changelog": "https://github.com/n0-computer/iroh/blob/main/CHANGELOG.md#0300---2024-12-16" }, + { "version": "0.29.0", "date": "2024-12-02", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.29.0", "changelog" : "" }, + { "version": "0.28.1", "date": "2024-11-05", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.28.1", "changelog" : "" }, + { "version": "0.28.0", "date": "2024-11-04", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.28.0", "changelog" : "" }, + { "version": "0.27.0", "date": "2024-10-21", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.27.0", "changelog" : "" }, + { "version": "0.26.0", "date": "2024-09-30", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.26.0", "changelog" : "" }, + { "version": "0.25.0", "date": "2024-09-16", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.25.0", "changelog" : "" }, + { "version": "0.24.0", "date": "2024-09-02", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.24.0", "changelog" : "" }, + { "version": "0.23.0", "date": "2024-08-20", "title": "", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.23.0", "changelog" : "" }, + { "version": "0.22.0", "date": "2024-08-05", "title": "Clean up on aisle five", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.22.0", "changelog" : "" }, + { "version": "0.21.0", "date": "2024-07-22", "title": "Fix, Clean, and Polish", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.21.0", "changelog" : "" }, + { "version": "0.20.0", "date": "2024-07-09", "title": "More ways to connect", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.20.0", "changelog" : "" }, + { "version": "0.19.0", "date": "2024-06-27", "title": "Make it your own", "blog_post": "", "github_release": "https://github.com/n0-computer/iroh/releases/tag/v0.20.0", "changelog" : "" } ]