From b3b031ed4777e5980efdf045dbb24f573af125d8 Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Wed, 27 Aug 2025 15:10:54 -0600 Subject: [PATCH] wip: debugging tor --- container-runtime/update-image.sh | 2 + core/Cargo.lock | 738 ++++++++---------- core/build-containerbox.sh | 2 +- core/build-registrybox.sh | 2 +- core/build-startbox.sh | 2 +- core/build-ts.sh | 2 +- core/build-tunnelbox.sh | 2 +- core/builder-alias.sh | 3 + core/models/Cargo.toml | 2 +- core/startos/Cargo.toml | 29 +- core/startos/src/context/rpc.rs | 14 +- core/startos/src/db/model/public.rs | 2 +- core/startos/src/net/dns.rs | 26 +- core/startos/src/net/gateway.rs | 14 +- core/startos/src/net/host/address.rs | 73 +- core/startos/src/net/host/binding.rs | 10 +- core/startos/src/net/host/mod.rs | 10 +- core/startos/src/net/net_controller.rs | 8 +- core/startos/src/net/tor.rs | 134 ++-- core/startos/src/net/web_server.rs | 4 +- .../src/service/effects/subcontainer/mod.rs | 6 +- core/startos/src/util/actor/background.rs | 2 +- core/startos/src/util/io.rs | 4 +- core/startos/src/util/sync.rs | 2 +- patch-db | 2 +- .../interfaces/public-domains/pd.service.ts | 2 +- .../interfaces/tor-domains.component.ts | 3 +- .../services/routes/interface.component.ts | 13 +- .../routes/startos-ui/startos-ui.component.ts | 9 +- .../ui/src/app/services/api/api.types.ts | 2 +- .../services/api/embassy-mock-api.service.ts | 4 +- 31 files changed, 521 insertions(+), 607 deletions(-) create mode 100644 core/builder-alias.sh diff --git a/container-runtime/update-image.sh b/container-runtime/update-image.sh index 721e46094..a045a6297 100755 --- a/container-runtime/update-image.sh +++ b/container-runtime/update-image.sh @@ -40,6 +40,8 @@ sudo chown 0:0 tmp/combined/lib/systemd/system/container-runtime.service sudo cp container-runtime-failure.service tmp/combined/lib/systemd/system/container-runtime-failure.service sudo chown 0:0 tmp/combined/lib/systemd/system/container-runtime-failure.service sudo cp ../core/target/$ARCH-unknown-linux-musl/release/containerbox tmp/combined/usr/bin/start-container +echo -e '#!/bin/bash\nexec start-container $@' | sudo tee tmp/combined/usr/bin/start-cli # TODO: remove +sudo chmod +x tmp/combined/usr/bin/start-cli sudo chown 0:0 tmp/combined/usr/bin/start-container echo container-runtime | sha256sum | head -c 32 | cat - <(echo) | sudo tee tmp/combined/etc/machine-id cat deb-install.sh | sudo systemd-nspawn --console=pipe -D tmp/combined $QEMU /bin/bash diff --git a/core/Cargo.lock b/core/Cargo.lock index f8b130893..27335bf8c 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -264,16 +264,13 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arti-client" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375c3b0681ca73c8678dc2e879f01964121955dc8e45f3b334ed0f7e7cefec48" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ - "anyhow", "async-trait", "cfg-if", "derive-deftly 1.2.0", "derive_builder_fork_arti", "derive_more", - "dyn-clone", "educe", "fs-mistrust", "futures", @@ -286,7 +283,7 @@ dependencies = [ "rand 0.9.2", "safelog", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "tor-async-utils", "tor-basic-utils", @@ -296,7 +293,6 @@ dependencies = [ "tor-config-path", "tor-dirmgr", "tor-error", - "tor-geoip", "tor-guardmgr", "tor-hsclient", "tor-hscrypto", @@ -310,8 +306,6 @@ dependencies = [ "tor-persist", "tor-proto", "tor-protover", - "tor-ptmgr", - "tor-rpcbase", "tor-rtcompat", "tracing", "void", @@ -360,7 +354,7 @@ dependencies = [ "nom 7.1.3", "num-traits", "rusticata-macros", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -864,7 +858,7 @@ dependencies = [ "flate2", "lz4_flex", "solana-nohash-hasher", - "thiserror 2.0.15", + "thiserror 2.0.16", "tracing", "xxhash-rust", "xz2", @@ -974,7 +968,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cexpr", "clang-sys", "itertools 0.12.1", @@ -1029,9 +1023,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.2" +version = "2.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" +checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" [[package]] name = "bitmaps" @@ -1174,7 +1168,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", - "regex-automata 0.4.9", + "regex-automata 0.4.10", "serde", ] @@ -1242,8 +1236,7 @@ checksum = "981520c98f422fcc584dc1a95c334e6953900b9106bc47a9839b81790009eb21" [[package]] name = "caret" version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061dc3258f029feaf9ff02b43c6af5ea67a7dfaed5d2aef36204c812e614ef9c" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" [[package]] name = "cast" @@ -1253,9 +1246,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.33" +version = "1.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" +checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" dependencies = [ "jobserver", "libc", @@ -1273,9 +1266,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -1367,9 +1360,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" dependencies = [ "clap_builder", "clap_derive", @@ -1377,9 +1370,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" dependencies = [ "anstream", "anstyle", @@ -1766,7 +1759,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "crossterm_winapi", "derive_more", "document-features", @@ -2090,7 +2083,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357422a457ccb850dc8f1c1680e0670079560feaad6c2e247e3f345c4fab8a3f" dependencies = [ "heck 0.5.0", - "indexmap 2.10.0", + "indexmap 2.11.0", "itertools 0.14.0", "proc-macro-crate", "proc-macro2", @@ -2108,7 +2101,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea41269bd490d251b9eca50ccb43117e641cc68b129849757c15ece88fe0574" dependencies = [ "heck 0.5.0", - "indexmap 2.10.0", + "indexmap 2.11.0", "itertools 0.14.0", "proc-macro-crate", "proc-macro2", @@ -2274,9 +2267,9 @@ checksum = "69dde51e8fef5e12c1d65e0929b03d66e4c0c18282bc30ed2ca050ad6f44dd82" [[package]] name = "dns-lookup" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91adf1f5ae09290d87cca8f4f0a8e49bcc30672993eb8aa11a5c9d8872d16a98" +checksum = "cf5597a4b7fe5275fc9dcf88ce26326bc8e4cb87d0130f33752d4c5f717793cf" dependencies = [ "cfg-if", "libc", @@ -2323,7 +2316,7 @@ version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f7d4c414c94bc830797115b8e5f434d58e7e80cb42ba88508c14bc6ea270625" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "byteorder", "lazy_static", "proc-macro-error2", @@ -2553,26 +2546,15 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "equix" version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89178c5241f5cc0c8f2b5ac5008f3c7a32caad341b1ec747a6e1e51d2e877110" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "arrayvec 0.7.6", "hashx", "num-traits", - "thiserror 2.0.15", + "thiserror 2.0.16", "visibility", ] -[[package]] -name = "erased-serde" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" -dependencies = [ - "serde", - "typeid", -] - [[package]] name = "errno" version = "0.2.8" @@ -2721,21 +2703,21 @@ checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" dependencies = [ "atomic 0.6.1", "serde", - "toml", + "toml 0.8.23", "uncased", "version_check", ] [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2796,9 +2778,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -2815,15 +2797,14 @@ dependencies = [ [[package]] name = "fs-mistrust" version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198b8f9ab4cff63b5c91e9e64edd4e6b43cd7fe7a52519a03c6c32ea0acfa557" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive_builder_fork_arti", "dirs", "libc", "pwd-grp", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "walkdir", ] @@ -2856,11 +2837,10 @@ dependencies = [ [[package]] name = "fslock-guard" version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed387b899db1671a47eaf17e7e6d7008577262c09319cb8e19601371192b526f" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "fslock-arti-fork", - "thiserror 2.0.15", + "thiserror 2.0.16", "winapi", ] @@ -2891,27 +2871,6 @@ dependencies = [ "futures-util", ] -[[package]] -name = "futures-await-test" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0d3d05bce73a572ba581e4f4a7f20164c18150169c3a67f406aada3e48c7e8" -dependencies = [ - "futures-await-test-macro", - "futures-executor", -] - -[[package]] -name = "futures-await-test-macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f150175e6832600500334550e00e4dc563a0b32f58a9d1ad407f6473378c839" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "futures-channel" version = "0.3.31" @@ -3146,7 +3105,7 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3696fafb1ecdcc2ae3ce337de73e9202806068594b77d22fdf2f3573c5ec2219" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "crc", "simple-bytes", "uuid", @@ -3187,7 +3146,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.10.0", + "indexmap 2.11.0", "slab", "tokio", "tokio-util", @@ -3258,8 +3217,7 @@ dependencies = [ [[package]] name = "hashx" version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb639748a589a17df2126f8015897ab416e81113afb82f56df5d47fa1486ab1" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "arrayvec 0.7.6", "blake2", @@ -3267,7 +3225,7 @@ dependencies = [ "fixed-capacity-vec", "hex", "rand_core 0.9.3", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -3338,7 +3296,7 @@ dependencies = [ "once_cell", "radix_trie", "rand 0.9.2", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tracing", ] @@ -3390,7 +3348,7 @@ dependencies = [ "rand 0.9.2", "ring", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "tinyvec", "tokio", "tracing", @@ -3436,7 +3394,7 @@ dependencies = [ "ipnet", "prefix-trie", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "tokio", "tokio-util", @@ -3546,13 +3504,14 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", @@ -3560,6 +3519,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -3763,9 +3723,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -3879,9 +3839,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -3908,7 +3868,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "futures-core", "inotify-sys", "libc", @@ -3945,20 +3905,20 @@ dependencies = [ [[package]] name = "inventory" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" dependencies = [ "rustversion", ] [[package]] name = "io-uring" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cfg-if", "libc", ] @@ -4121,9 +4081,9 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", @@ -4142,7 +4102,7 @@ dependencies = [ "regex", "serde", "serde_json", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", ] @@ -4172,7 +4132,7 @@ dependencies = [ "imbl", "imbl-value 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -4248,7 +4208,7 @@ dependencies = [ "petgraph", "pico-args", "regex", - "regex-syntax 0.8.5", + "regex-syntax 0.8.6", "string_cache", "term", "tiny-keccak", @@ -4262,7 +4222,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata 0.4.9", + "regex-automata 0.4.10", ] [[package]] @@ -4337,7 +4297,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "libc", "redox_syscall 0.5.17", ] @@ -4546,7 +4506,7 @@ dependencies = [ "bitvec 1.0.1", "serde", "serde-big-array", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -4573,9 +4533,9 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] @@ -4668,7 +4628,7 @@ dependencies = [ "serde", "serde_json", "ssh-key", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tracing", "ts-rs", @@ -4736,7 +4696,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cfg-if", "cfg_aliases", "libc", @@ -4790,7 +4750,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "inotify", "kqueue", "libc", @@ -4973,7 +4933,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", ] [[package]] @@ -5023,8 +4983,7 @@ checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "oneshot-fused-workaround" version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2948fd2414b613f9a97f8401270bd5d7638265ab940475cdbcfa28a0273d58" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "futures", ] @@ -5060,7 +5019,7 @@ version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cfg-if", "foreign-types", "libc", @@ -5243,7 +5202,7 @@ dependencies = [ "patch-db-macro", "serde", "serde_cbor", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tracing", "tracing-error", @@ -5299,9 +5258,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" @@ -5310,7 +5269,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.15", + "thiserror 2.0.16", "ucd-trie", ] @@ -5354,38 +5313,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.10.0", + "indexmap 2.11.0", ] [[package]] name = "phf" -version = "0.12.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ "phf_macros", - "phf_shared 0.12.1", + "phf_shared 0.13.1", "serde", ] [[package]] name = "phf_generator" -version = "0.12.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cbb1126afed61dd6368748dae63b1ee7dc480191c6262a3b4ff1e29d86a6c5b" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand", - "phf_shared 0.12.1", + "phf_shared 0.13.1", ] [[package]] name = "phf_macros" -version = "0.12.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d713258393a82f091ead52047ca779d37e5766226d009de21696c4e667044368" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ "phf_generator", - "phf_shared 0.12.1", + "phf_shared 0.13.1", "proc-macro2", "quote", "syn 2.0.106", @@ -5402,9 +5361,9 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.12.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" dependencies = [ "siphasher", ] @@ -5590,9 +5549,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.36" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff24dfcda44452b9816fff4cd4227e1bb73ff5a2f1bc1105aa92fb8565ce44d2" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", "syn 2.0.106", @@ -5629,7 +5588,7 @@ checksum = "5676d703dda103cbb035b653a9f11448c0a7216c7926bd35fcb5865475d0c970" dependencies = [ "autocfg", "equivalent", - "indexmap 2.10.0", + "indexmap 2.11.0", ] [[package]] @@ -5678,7 +5637,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "chrono", "flate2", "hex", @@ -5692,7 +5651,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "chrono", "hex", ] @@ -5705,13 +5664,13 @@ checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", - "bitflags 2.9.2", + "bitflags 2.9.3", "lazy_static", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift", - "regex-syntax 0.8.5", + "regex-syntax 0.8.6", "rusty-fork", "tempfile", "unarray", @@ -5987,12 +5946,6 @@ dependencies = [ "rand_core 0.9.3", ] -[[package]] -name = "rangemap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" - [[package]] name = "rayon" version = "1.11.0" @@ -6055,7 +6008,7 @@ version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", ] [[package]] @@ -6083,7 +6036,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -6108,14 +6061,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata 0.4.10", + "regex-syntax 0.8.6", ] [[package]] @@ -6129,13 +6082,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax 0.8.6", ] [[package]] @@ -6146,9 +6099,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" @@ -6216,8 +6169,7 @@ checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" [[package]] name = "retry-error" version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce97442758392c7e2a7716e06c514de75f0fe4b5a4b76e14ba1e5edfb7ba3512" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" [[package]] name = "rfc6979" @@ -6256,8 +6208,8 @@ dependencies = [ [[package]] name = "rpc-toolkit" -version = "0.3.1" -source = "git+https://github.com/Start9Labs/rpc-toolkit.git?branch=master#b73d3375b5fec21df6221e644ae0a7c623e81a62" +version = "0.3.2" +source = "git+https://github.com/Start9Labs/rpc-toolkit.git?branch=master#23ecbda1c6b549fd2778e2847a53ea75a4103577" dependencies = [ "async-stream", "async-trait", @@ -6275,7 +6227,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tokio-stream", "url", @@ -6319,7 +6271,7 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -6375,7 +6327,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "errno 0.3.13", "libc", "linux-raw-sys 0.4.15", @@ -6388,7 +6340,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "errno 0.3.13", "libc", "linux-raw-sys 0.9.4", @@ -6526,7 +6478,7 @@ dependencies = [ "futures-util", "pin-project", "thingbuf", - "thiserror 2.0.15", + "thiserror 2.0.16", "unicode-segmentation", ] @@ -6539,14 +6491,13 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safelog" version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4e1c994fbc7521a5003e5c1c54304654ea0458881e777f6e2638520c2de8c5" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive_more", "educe", "either", "fluid-let", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -6636,7 +6587,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "core-foundation", "core-foundation-sys", "libc", @@ -6729,11 +6680,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.142" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "itoa", "memchr", "ryu", @@ -6781,6 +6732,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -6803,7 +6763,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.10.0", + "indexmap 2.11.0", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -6831,7 +6791,7 @@ version = "0.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59e2dd588bf1597a252c3b920e0143eb99b0f76e4e082f4c92ce34fbc9e71ddd" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "itoa", "libyml", "memchr", @@ -7023,13 +6983,12 @@ dependencies = [ [[package]] name = "slotmap-careful" version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9500059071474a36baac642b6bb99ca1dbac0ce43727abbba02dad83822dadf2" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "paste", "serde", "slotmap", - "thiserror 2.0.15", + "thiserror 2.0.16", "void", ] @@ -7125,7 +7084,7 @@ dependencies = [ "futures-util", "hashbrown 0.15.5", "hashlink", - "indexmap 2.10.0", + "indexmap 2.11.0", "log", "memchr", "once_cell", @@ -7135,7 +7094,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "smallvec", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tokio-stream", "tracing", @@ -7187,7 +7146,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.9.2", + "bitflags 2.9.3", "byteorder", "crc", "dotenvy", @@ -7211,7 +7170,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.15", + "thiserror 2.0.16", "tracing", "whoami", ] @@ -7344,7 +7303,7 @@ dependencies = [ "imbl", "imbl-value 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "include_dir", - "indexmap 2.10.0", + "indexmap 2.11.0", "indicatif", "inotify", "integer-encoding", @@ -7413,7 +7372,7 @@ dependencies = [ "tar", "termion", "textwrap", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tokio-rustls 0.26.2", "tokio-socks", @@ -7421,7 +7380,7 @@ dependencies = [ "tokio-tar", "tokio-tungstenite", "tokio-util", - "toml", + "toml 0.8.23", "tor-cell", "tor-hscrypto", "tor-hsservice", @@ -7575,7 +7534,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "core-foundation", "system-configuration-sys", ] @@ -7609,15 +7568,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix 1.0.8", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -7684,11 +7643,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.15", + "thiserror-impl 2.0.16", ] [[package]] @@ -7704,9 +7663,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", @@ -7795,9 +7754,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -7954,11 +7913,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "toml_edit", ] +[[package]] +name = "toml" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" +dependencies = [ + "indexmap 2.11.0", + "serde", + "serde_spanned 1.0.0", + "toml_datetime 0.7.0", + "toml_parser", + "toml_writer", + "winnow", +] + [[package]] name = "toml_datetime" version = "0.6.11" @@ -7968,26 +7942,50 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +dependencies = [ + "serde", +] + [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_parser" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "toml_writer" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" + [[package]] name = "tonic" version = "0.12.3" @@ -8021,8 +8019,7 @@ dependencies = [ [[package]] name = "tor-async-utils" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28240d2b739ecba7514c92c0e42f2b5b81a95b5286366bdb2c2f8ef526a5578c" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive-deftly 1.2.0", "educe", @@ -8030,15 +8027,14 @@ dependencies = [ "oneshot-fused-workaround", "pin-project", "postage", - "thiserror 2.0.15", + "thiserror 2.0.16", "void", ] [[package]] name = "tor-basic-utils" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55f86a4e4768d337df0e1189eb229c1c27125e86282fabdef89088e1f0be9107" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive_more", "hex", @@ -8050,14 +8046,13 @@ dependencies = [ "serde", "slab", "smallvec", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] name = "tor-bytes" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d08b5b2e93fd21a4aaa9a3867962ea82f5dc830522737183abb514bdeae9fc9" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "bytes", "derive-deftly 1.2.0", @@ -8065,7 +8060,7 @@ dependencies = [ "educe", "getrandom 0.3.3", "safelog", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-error", "tor-llcrypto", "zeroize", @@ -8074,20 +8069,20 @@ dependencies = [ [[package]] name = "tor-cell" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60677bfa808c00539df7f8276facd59f92e5d0bd22ee8e5bdc1ab6a14632db41" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", - "bitflags 2.9.2", + "bitflags 2.9.3", "bytes", "caret", "derive-deftly 1.2.0", "derive_more", "educe", + "itertools 0.14.0", "paste", "rand 0.9.2", "smallvec", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-basic-utils", "tor-bytes", "tor-cert", @@ -8104,14 +8099,13 @@ dependencies = [ [[package]] name = "tor-cert" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd81384d03705336b9fb7ecf152e4f61b2e0a0cb1adbd9bbd116b46a010e230" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "caret", "derive_builder_fork_arti", "derive_more", "digest 0.10.7", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-bytes", "tor-checkable", "tor-llcrypto", @@ -8120,8 +8114,7 @@ dependencies = [ [[package]] name = "tor-chanmgr" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74322fa01b09b3839903da1e7f443b2cf8aecd31f0cfd5395253ddad473b4ef3" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "async-trait", "caret", @@ -8134,12 +8127,13 @@ dependencies = [ "rand 0.9.2", "safelog", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-async-utils", "tor-basic-utils", "tor-cell", "tor-config", "tor-error", + "tor-keymgr", "tor-linkspec", "tor-llcrypto", "tor-memquota", @@ -8155,25 +8149,24 @@ dependencies = [ [[package]] name = "tor-checkable" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5703d370d4ee4b5c318ac8b944a3b183e2865f6f0104475d36b9e1b8c89f0f38" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "humantime", "signature 2.2.0", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-llcrypto", ] [[package]] name = "tor-circmgr" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f8f6d0e84dcf5fa3761e55fe8bb75725e699ee03e3b37bbd06e6421e9961fbd" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "async-trait", "bounded-vec-deque", "cfg-if", + "derive-deftly 1.2.0", "derive_builder_fork_arti", "derive_more", "downcast-rs", @@ -8190,13 +8183,13 @@ dependencies = [ "safelog", "serde", "static_assertions", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-async-utils", "tor-basic-utils", + "tor-cell", "tor-chanmgr", "tor-config", "tor-error", - "tor-geoip", "tor-guardmgr", "tor-linkspec", "tor-memquota", @@ -8216,8 +8209,7 @@ dependencies = [ [[package]] name = "tor-config" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3852d0e3a6ca41ab9fed79fa4cb89347bdb24bcd5f6665f506a10b993ac24e8b" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "cfg-if", @@ -8237,8 +8229,8 @@ dependencies = [ "serde-value", "serde_ignored", "strum", - "thiserror 2.0.15", - "toml", + "thiserror 2.0.16", + "toml 0.9.5", "tor-basic-utils", "tor-error", "tor-rtcompat", @@ -8249,13 +8241,12 @@ dependencies = [ [[package]] name = "tor-config-path" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf19ba283027eb8d8c441eec743d2c73c971c4b22c9830aae87163e8fcdc334e" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "directories", "serde", "shellexpand", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-error", "tor-general-addr", ] @@ -8263,20 +8254,18 @@ dependencies = [ [[package]] name = "tor-consdiff" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5164757c908a50737ebd483a0e29380e53db0b14103f7996751e28964c6d98a" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "digest 0.10.7", "hex", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-llcrypto", ] [[package]] name = "tor-dirclient" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a411a66d9a5f41b2e85e8defb17a3641d5827f168e4b175a28db9b987125843f" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "async-compression", "base64ct", @@ -8288,7 +8277,7 @@ dependencies = [ "httpdate", "itertools 0.14.0", "memchr", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-circmgr", "tor-error", "tor-hscrypto", @@ -8303,8 +8292,7 @@ dependencies = [ [[package]] name = "tor-dirmgr" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c74b75377747b13d338c8ab29c5de44f4485c04c492a15edebed61110e24299" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "async-trait", "base64ct", @@ -8333,7 +8321,7 @@ dependencies = [ "signature 2.2.0", "static_assertions", "strum", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "tor-async-utils", "tor-basic-utils", @@ -8343,7 +8331,6 @@ dependencies = [ "tor-consdiff", "tor-dirclient", "tor-error", - "tor-geoip", "tor-guardmgr", "tor-llcrypto", "tor-netdir", @@ -8358,8 +8345,7 @@ dependencies = [ [[package]] name = "tor-error" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5566edb4beb34d7be7bc4fc2f653a5119a3ccade26a9237912e53d4f4029e83" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive_more", "futures", @@ -8367,7 +8353,7 @@ dependencies = [ "retry-error", "static_assertions", "strum", - "thiserror 2.0.15", + "thiserror 2.0.16", "tracing", "void", ] @@ -8375,31 +8361,18 @@ dependencies = [ [[package]] name = "tor-general-addr" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9d4a8c4593a0c590c66bae348590fb49dbf04da264cacc0631d71a92e5d2ac" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "arbitrary", "derive_more", - "thiserror 2.0.15", + "thiserror 2.0.16", "void", ] -[[package]] -name = "tor-geoip" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35eae499db1fc43ad1cb65fe113dcd6c064350d85f39c0530dc4a06b43d19ed" -dependencies = [ - "derive_more", - "rangemap", - "thiserror 2.0.15", -] - [[package]] name = "tor-guardmgr" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef0ad8a7ba30210b9c5664e10c423cc19f83d55fafdf1c84097be3a01d0dacd" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "base64ct", @@ -8420,7 +8393,7 @@ dependencies = [ "safelog", "serde", "strum", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-async-utils", "tor-basic-utils", "tor-config", @@ -8431,10 +8404,8 @@ dependencies = [ "tor-netdoc", "tor-persist", "tor-proto", - "tor-protover", "tor-relay-selection", "tor-rtcompat", - "tor-rtmock", "tor-units", "tracing", ] @@ -8442,8 +8413,7 @@ dependencies = [ [[package]] name = "tor-hsclient" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0ed4b8790cf8849d10c7ff13db3ec570c2a4aec68331dfe6e1f05d2987d40d" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "async-trait", "derive-deftly 1.2.0", @@ -8459,7 +8429,7 @@ dependencies = [ "safelog", "slotmap-careful", "strum", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-async-utils", "tor-basic-utils", "tor-bytes", @@ -8486,8 +8456,7 @@ dependencies = [ [[package]] name = "tor-hscrypto" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "163e60a7c8069ea8d8a3031be8620047b21cbed7d535fd9f1662daae7803ccd6" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "cipher 0.4.4", "data-encoding", @@ -8504,7 +8473,7 @@ dependencies = [ "serde", "signature 2.2.0", "subtle", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-basic-utils", "tor-bytes", "tor-error", @@ -8519,8 +8488,7 @@ dependencies = [ [[package]] name = "tor-hsservice" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e736178aed67cc200ab84b35b5c9d116a8ed42c2dc2eeaa7ada1828116da500d" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "async-trait", @@ -8548,12 +8516,11 @@ dependencies = [ "serde", "serde_with", "strum", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-async-utils", "tor-basic-utils", "tor-bytes", "tor-cell", - "tor-checkable", "tor-circmgr", "tor-config", "tor-config-path", @@ -8578,8 +8545,7 @@ dependencies = [ [[package]] name = "tor-key-forge" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b1ddfa5126b2619a9f27b5c5d1a360acf41f15d99ced37af1f30fc449c65889" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive-deftly 1.2.0", "derive_more", @@ -8588,7 +8554,7 @@ dependencies = [ "rand 0.9.2", "signature 2.2.0", "ssh-key", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-bytes", "tor-cert", "tor-checkable", @@ -8599,8 +8565,7 @@ dependencies = [ [[package]] name = "tor-keymgr" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26e8e0222d2ac27bd8bf4848cd46371fdc72d820940eb38f3d8da616176b3d39" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "arrayvec 0.7.6", @@ -8620,7 +8585,7 @@ dependencies = [ "serde", "signature 2.2.0", "ssh-key", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-basic-utils", "tor-bytes", "tor-config", @@ -8639,8 +8604,7 @@ dependencies = [ [[package]] name = "tor-linkspec" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6eab944bf3096b1964cbb0f4a3605c1376a35bdfa9d44512464474ffb8e53c" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "base64ct", "by_address", @@ -8654,7 +8618,7 @@ dependencies = [ "serde", "serde_with", "strum", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-basic-utils", "tor-bytes", "tor-config", @@ -8666,8 +8630,7 @@ dependencies = [ [[package]] name = "tor-llcrypto" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b92fa9a99a066f06cd266287f6f89270c010693cce3c4c2fa38c27abfcda5fb" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "aes 0.8.4", "base64ct", @@ -8695,7 +8658,7 @@ dependencies = [ "sha3", "signature 2.2.0", "subtle", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-memquota", "visibility", "x25519-dalek", @@ -8705,12 +8668,11 @@ dependencies = [ [[package]] name = "tor-log-ratelim" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc97bd804ac7aeaf771dc4507c65f8c5fac1d4f8e469551aaa3bf240fce1171" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "futures", "humantime", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-error", "tor-rtcompat", "tracing", @@ -8720,8 +8682,7 @@ dependencies = [ [[package]] name = "tor-memquota" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f015b156dc186601f46b3f89ebd6ace49ef3b142c9a5004559e5d75a6477cc1f" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "cfg-if", "derive-deftly 1.2.0", @@ -8736,7 +8697,7 @@ dependencies = [ "slotmap-careful", "static_assertions", "sysinfo", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-async-utils", "tor-basic-utils", "tor-config", @@ -8750,11 +8711,10 @@ dependencies = [ [[package]] name = "tor-netdir" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7874878d0c579e7b1dea5947581a5f2d4ba350af2a20b1946350ef9ace16ebe1" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "async-trait", - "bitflags 2.9.2", + "bitflags 2.9.3", "derive_more", "digest 0.10.7", "futures", @@ -8766,11 +8726,10 @@ dependencies = [ "serde", "static_assertions", "strum", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "tor-basic-utils", "tor-error", - "tor-geoip", "tor-hscrypto", "tor-linkspec", "tor-llcrypto", @@ -8784,13 +8743,13 @@ dependencies = [ [[package]] name = "tor-netdoc" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea853a14cb2011b9f4c45641323e19fbad13010d638dd3d84502e0decf9db0b" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "base64ct", - "bitflags 2.9.2", + "bitflags 2.9.3", "cipher 0.4.4", + "derive-deftly 1.2.0", "derive_builder_fork_arti", "derive_more", "digest 0.10.7", @@ -8799,14 +8758,16 @@ dependencies = [ "humantime", "itertools 0.14.0", "memchr", + "paste", "phf", "rand 0.9.2", "serde", "serde_with", "signature 2.2.0", "smallvec", + "strum", "subtle", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "tinystr", "tor-basic-utils", @@ -8828,8 +8789,7 @@ dependencies = [ [[package]] name = "tor-persist" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e899d9dd8104fae50c33f15e00a1515bee15683ff0017cfc003315fcd6a195d6" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "derive-deftly 1.2.0", @@ -8845,7 +8805,7 @@ dependencies = [ "sanitize-filename", "serde", "serde_json", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "tor-async-utils", "tor-basic-utils", @@ -8857,8 +8817,7 @@ dependencies = [ [[package]] name = "tor-proto" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08f8d03310fadbc44e9544777a0bb5a7364564798d2236f00db3c337fb25987" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "asynchronous-codec", @@ -8890,7 +8849,7 @@ dependencies = [ "static_assertions", "subtle", "sync_wrapper", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tokio-util", "tor-async-utils", @@ -8920,85 +8879,32 @@ dependencies = [ [[package]] name = "tor-protover" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc72e258205ca0511bdc84801748c59dd5d7accfd080d909afd11f6b8be182" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "caret", "paste", "serde_with", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-bytes", ] -[[package]] -name = "tor-ptmgr" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5f226fd8436d1561ac111d97a7162ba4eed50c5e0791818508b5d1bd511e69" -dependencies = [ - "async-trait", - "cfg-if", - "derive_builder_fork_arti", - "fs-mistrust", - "futures", - "itertools 0.14.0", - "oneshot-fused-workaround", - "serde", - "thiserror 2.0.15", - "tor-async-utils", - "tor-basic-utils", - "tor-chanmgr", - "tor-config", - "tor-config-path", - "tor-error", - "tor-linkspec", - "tor-rtcompat", - "tor-socksproto", - "tracing", -] - [[package]] name = "tor-relay-selection" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19816299f125c71bd4ba59be8ea425256aa4494b6a3d39bdb9ccbc385722a70" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "rand 0.9.2", "serde", "tor-basic-utils", - "tor-geoip", "tor-linkspec", "tor-netdir", "tor-netdoc", ] -[[package]] -name = "tor-rpcbase" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907a2747d5e4955e0ca96c81cadf401d2c11aafbbb05ac1c9f8d8a11eb23c950" -dependencies = [ - "derive-deftly 1.2.0", - "derive_more", - "downcast-rs", - "erased-serde", - "futures", - "futures-await-test", - "inventory", - "paste", - "serde", - "thiserror 2.0.15", - "tor-async-utils", - "tor-error", - "typetag", - "void", -] - [[package]] name = "tor-rtcompat" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9545fa3b1420df5b165e6bad6537b7202c533311431cabc84ff1908fbca3908" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "arbitrary", "async-io", @@ -9020,7 +8926,7 @@ dependencies = [ "pin-project", "rustls-pki-types", "rustls-webpki 0.103.4", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tokio-util", "tor-error", @@ -9032,8 +8938,7 @@ dependencies = [ [[package]] name = "tor-rtmock" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a6ca08427dff9e7a22aa08d8c680c56231ce9b6afa35125e8a9a78f6b8e2890" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "assert_matches", @@ -9049,7 +8954,7 @@ dependencies = [ "priority-queue", "slotmap-careful", "strum", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-error", "tor-general-addr", "tor-rtcompat", @@ -9061,8 +8966,7 @@ dependencies = [ [[package]] name = "tor-socksproto" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5b33285d16e5695b6aba7c9656387ab0c662781e2911376887b8b61d1a3d2b2" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "amplify", "caret", @@ -9070,7 +8974,7 @@ dependencies = [ "educe", "safelog", "subtle", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-bytes", "tor-error", ] @@ -9078,13 +8982,12 @@ dependencies = [ [[package]] name = "tor-units" version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40e61ae922f0f0209338d63afd4b1b4ba780313b427a54dda212ca3853845578" +source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive-deftly 1.2.0", "derive_more", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "tor-memquota", ] @@ -9130,7 +9033,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "bytes", "futures-util", "http", @@ -9310,25 +9213,25 @@ dependencies = [ "native-tls", "rand 0.9.2", "sha1", - "thiserror 2.0.15", + "thiserror 2.0.16", "url", "utf-8", ] [[package]] name = "typed-builder" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478cb2887fa0a15be611e4dc0e900f693c31f1add497ac8794a24cd512a22df9" +checksum = "fef81aec2ca29576f9f6ae8755108640d0a86dd3161b2e8bca6cfa554e98f77d" dependencies = [ "typed-builder-macro", ] [[package]] name = "typed-builder-macro" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a840d281b4e2b22f6ca51168a373c06e7044e06420f0f12fe0e7b62c28df2f8" +checksum = "1ecb9ecf7799210407c14a8cfdfe0173365780968dc57973ed082211958e0b18" dependencies = [ "proc-macro2", "quote", @@ -9345,42 +9248,12 @@ dependencies = [ "serde", ] -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - [[package]] name = "typenum" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" -[[package]] -name = "typetag" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f22b40dd7bfe8c14230cf9702081366421890435b2d625fa92b4acc4c3de6f" -dependencies = [ - "erased-serde", - "inventory", - "once_cell", - "serde", - "typetag-impl", -] - -[[package]] -name = "typetag-impl" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35f5380909ffc31b4de4f4bdf96b877175a016aa2ca98cee39fcfd8c4d53d952" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "ucd-trie" version = "0.1.7" @@ -9500,9 +9373,9 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -9830,11 +9703,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -10189,9 +10062,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -10212,7 +10085,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", ] [[package]] @@ -10313,9 +10186,9 @@ dependencies = [ [[package]] name = "yasi" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "231cdd80edd32530da6f3d919fffcf2443ff4aa89994e7a363ddcc0d9c53dba6" +checksum = "91d8075d6829add5913054d2de87aec55a786599427d93ef3504a0b7f515a418" dependencies = [ "ahash 0.8.12", "hashbrown 0.13.2", @@ -10360,9 +10233,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.9.0" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad" +checksum = "67a073be99ace1adc48af593701c8015cd9817df372e14a1a6b0ee8f8bf043be" dependencies = [ "async-broadcast", "async-executor", @@ -10384,7 +10257,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "windows-sys 0.59.0", + "windows-sys 0.60.2", "winnow", "zbus_macros", "zbus_names", @@ -10393,9 +10266,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.9.0" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659" +checksum = "0e80cd713a45a49859dcb648053f63265f4f2851b6420d47a958e5697c68b131" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10529,12 +10402,12 @@ dependencies = [ "flate2", "getrandom 0.3.3", "hmac", - "indexmap 2.10.0", + "indexmap 2.11.0", "lzma-rs", "memchr", "pbkdf2", "sha1", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "xz2", "zeroize", @@ -10590,9 +10463,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" +checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" dependencies = [ "endi", "enumflags2", @@ -10604,9 +10477,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" +checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10617,14 +10490,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" dependencies = [ "proc-macro2", "quote", "serde", - "static_assertions", "syn 2.0.106", "winnow", ] diff --git a/core/build-containerbox.sh b/core/build-containerbox.sh index 7fbd6c69c..277aaa396 100755 --- a/core/build-containerbox.sh +++ b/core/build-containerbox.sh @@ -26,7 +26,7 @@ if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi -alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$HOME/.cargo/git":/root/.cargo/git -v "$(pwd)":/home/rust/src -w /home/rust/src -P messense/rust-musl-cross:$ARCH-musl' +source ./core/builder-alias.sh echo "FEATURES=\"$FEATURES\"" echo "RUSTFLAGS=\"$RUSTFLAGS\"" diff --git a/core/build-registrybox.sh b/core/build-registrybox.sh index 41e67a87f..e00200454 100755 --- a/core/build-registrybox.sh +++ b/core/build-registrybox.sh @@ -26,7 +26,7 @@ if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi -alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$HOME/.cargo/git":/root/.cargo/git -v "$(pwd)":/home/rust/src -w /home/rust/src -P messense/rust-musl-cross:$ARCH-musl' +source ./core/builder-alias.sh echo "FEATURES=\"$FEATURES\"" echo "RUSTFLAGS=\"$RUSTFLAGS\"" diff --git a/core/build-startbox.sh b/core/build-startbox.sh index cfeed0f72..30721ff0e 100755 --- a/core/build-startbox.sh +++ b/core/build-startbox.sh @@ -31,7 +31,7 @@ if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi -alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$HOME/.cargo/git":/root/.cargo/git -v "$(pwd)":/home/rust/src -w /home/rust/src -P messense/rust-musl-cross:$ARCH-musl' +source ./core/builder-alias.sh echo "FEATURES=\"$FEATURES\"" echo "RUSTFLAGS=\"$RUSTFLAGS\"" diff --git a/core/build-ts.sh b/core/build-ts.sh index c9890bfe7..106054cdf 100755 --- a/core/build-ts.sh +++ b/core/build-ts.sh @@ -26,7 +26,7 @@ if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi -alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$HOME/.cargo/git":/root/.cargo/git -v "$(pwd)":/home/rust/src -w /home/rust/src -P messense/rust-musl-cross:$ARCH-musl' +source ./core/builder-alias.sh echo "FEATURES=\"$FEATURES\"" echo "RUSTFLAGS=\"$RUSTFLAGS\"" diff --git a/core/build-tunnelbox.sh b/core/build-tunnelbox.sh index 76a5ea6e7..525b84bcd 100755 --- a/core/build-tunnelbox.sh +++ b/core/build-tunnelbox.sh @@ -26,7 +26,7 @@ if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then RUSTFLAGS="--cfg tokio_unstable" fi -alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$HOME/.cargo/git":/root/.cargo/git -v "$(pwd)":/home/rust/src -w /home/rust/src -P messense/rust-musl-cross:$ARCH-musl' +source ./core/builder-alias.sh echo "FEATURES=\"$FEATURES\"" echo "RUSTFLAGS=\"$RUSTFLAGS\"" diff --git a/core/builder-alias.sh b/core/builder-alias.sh new file mode 100644 index 000000000..a9bf96814 --- /dev/null +++ b/core/builder-alias.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -e SCCACHE_GHA_ENABLED -e SCCACHE_GHA_VERSION -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$HOME/.cargo/git":/root/.cargo/git -v "$HOME/.cache/sccache":/root/.cache/sccache -v "$(pwd)":/home/rust/src -w /home/rust/src -P start9/rust-musl-cross:$ARCH-musl' diff --git a/core/models/Cargo.toml b/core/models/Cargo.toml index be3b20351..9d489a84e 100644 --- a/core/models/Cargo.toml +++ b/core/models/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -arti-client = { version = "0.33", features = ["full"] } +arti-client = { version = "0.33", default-features = false, git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } axum = "0.8.4" base64 = "0.22.1" color-eyre = "0.6.2" diff --git a/core/startos/Cargo.toml b/core/startos/Cargo.toml index c71ea7f85..c07729d86 100644 --- a/core/startos/Cargo.toml +++ b/core/startos/Cargo.toml @@ -64,7 +64,9 @@ arti-client = { version = "0.33", features = [ "static", "tokio", "ephemeral-keystore", -], default-features = false } + "onion-service-client", + "onion-service-service", +], default-features = false, git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } aes = { version = "0.7.5", features = ["ctr"] } async-acme = { version = "0.6.0", git = "https://github.com/dr-bonez/async-acme.git", features = [ "use_rustls", @@ -195,7 +197,7 @@ rpassword = "7.2.0" rpc-toolkit = { git = "https://github.com/Start9Labs/rpc-toolkit.git", branch = "master" } rust-argon2 = "2.0.0" rustyline-async = "0.4.1" -safelog = "0.4.8" +safelog = { version = "0.4.8", git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } semver = { version = "1.0.20", features = ["serde"] } serde = { version = "1.0", features = ["derive", "rc"] } serde_cbor = { package = "ciborium", version = "0.2.1" } @@ -227,13 +229,22 @@ tokio-stream = { version = "0.1.14", features = ["io-util", "sync", "net"] } tokio-tar = { git = "https://github.com/dr-bonez/tokio-tar.git" } tokio-tungstenite = { version = "0.26.2", features = ["native-tls", "url"] } tokio-util = { version = "0.7.9", features = ["io"] } -tor-cell = { version = "0.33" } -tor-hscrypto = { version = "0.33", features = ["full"] } -tor-hsservice = { version = "0.33" } -tor-keymgr = { version = "0.33", features = ["ephemeral-keystore"] } -tor-llcrypto = { version = "0.33", features = ["full"] } -tor-proto = { version = "0.33" } -tor-rtcompat = { version = "0.33", features = ["tokio", "rustls"] } +tor-cell = { version = "0.33", git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } +tor-hscrypto = { version = "0.33", features = [ + "full", +], git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } +tor-hsservice = { version = "0.33", git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } +tor-keymgr = { version = "0.33", features = [ + "ephemeral-keystore", +], git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } +tor-llcrypto = { version = "0.33", features = [ + "full", +], git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } +tor-proto = { version = "0.33", git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } +tor-rtcompat = { version = "0.33", features = [ + "tokio", + "rustls", +], git = "https://github.com/Start9Labs/arti.git", branch = "patch/disable-exit" } tower-service = "0.3.3" tracing = "0.1.39" tracing-error = "0.2.0" diff --git a/core/startos/src/context/rpc.rs b/core/startos/src/context/rpc.rs index 53b666929..6bf1d7785 100644 --- a/core/startos/src/context/rpc.rs +++ b/core/startos/src/context/rpc.rs @@ -18,7 +18,7 @@ use models::{ActionId, PackageId}; use reqwest::{Client, Proxy}; use rpc_toolkit::yajrc::RpcError; use rpc_toolkit::{CallRemote, Context, Empty}; -use tokio::sync::{Mutex, RwLock, broadcast, oneshot, watch}; +use tokio::sync::{RwLock, broadcast, oneshot, watch}; use tokio::time::Instant; use tracing::instrument; @@ -32,7 +32,7 @@ use crate::db::model::package::TaskSeverity; use crate::disk::OsPartitionInfo; use crate::init::{InitResult, check_time_is_synchronized}; use crate::install::PKG_ARCHIVE_DIR; -use crate::lxc::{ContainerId, LxcContainer, LxcManager}; +use crate::lxc::LxcManager; use crate::net::net_controller::{NetController, NetService}; use crate::net::utils::{find_eth_iface, find_wifi_iface}; use crate::net::web_server::{UpgradableListener, WebServerAcceptorSetter}; @@ -74,12 +74,6 @@ pub struct RpcContextSeed { pub client: Client, pub start_time: Instant, pub crons: SyncMutex>>, - // #[cfg(feature = "dev")] - pub dev: Dev, -} - -pub struct Dev { - pub lxc: Mutex>, } pub struct Hardware { @@ -262,10 +256,6 @@ impl RpcContext { .with_kind(crate::ErrorKind::ParseUrl)?, start_time: Instant::now(), crons, - // #[cfg(feature = "dev")] - dev: Dev { - lxc: Mutex::new(BTreeMap::new()), - }, }); let res = Self(seed.clone()); diff --git a/core/startos/src/db/model/public.rs b/core/startos/src/db/model/public.rs index 574fc8a9b..5c5bbe940 100644 --- a/core/startos/src/db/model/public.rs +++ b/core/startos/src/db/model/public.rs @@ -19,8 +19,8 @@ use crate::account::AccountInfo; use crate::db::model::package::AllPackageData; use crate::net::acme::AcmeProvider; use crate::net::forward::START9_BRIDGE_IFACE; -use crate::net::host::binding::{AddSslOptions, BindInfo, BindOptions, NetInfo}; use crate::net::host::Host; +use crate::net::host::binding::{AddSslOptions, BindInfo, BindOptions, NetInfo}; use crate::net::utils::ipv6_is_local; use crate::net::vhost::AlpnInfo; use crate::prelude::*; diff --git a/core/startos/src/net/dns.rs b/core/startos/src/net/dns.rs index 15acedda1..be90aa8d1 100644 --- a/core/startos/src/net/dns.rs +++ b/core/startos/src/net/dns.rs @@ -10,34 +10,34 @@ use futures::future::BoxFuture; use futures::{FutureExt, StreamExt, TryStreamExt}; use helpers::NonDetachingJoinHandle; use hickory_client::client::Client; +use hickory_client::proto::DnsHandle; use hickory_client::proto::runtime::TokioRuntimeProvider; use hickory_client::proto::tcp::TcpClientStream; use hickory_client::proto::udp::UdpClientStream; use hickory_client::proto::xfer::{DnsExchangeBackground, DnsRequestOptions}; -use hickory_client::proto::DnsHandle; +use hickory_server::ServerFuture; use hickory_server::authority::MessageResponseBuilder; use hickory_server::proto::op::{Header, ResponseCode}; use hickory_server::proto::rr::{Name, Record, RecordType}; use hickory_server::server::{Request, RequestHandler, ResponseHandler, ResponseInfo}; -use hickory_server::ServerFuture; use imbl::OrdMap; use imbl_value::InternedString; use itertools::Itertools; use models::{GatewayId, OptionExt, PackageId}; use rpc_toolkit::{ - from_fn_async, from_fn_blocking, Context, HandlerArgs, HandlerExt, ParentHandler, + Context, HandlerArgs, HandlerExt, ParentHandler, from_fn_async, from_fn_blocking, }; use serde::{Deserialize, Serialize}; use tokio::net::{TcpListener, UdpSocket}; use tracing::instrument; use crate::context::RpcContext; -use crate::db::model::public::NetworkInterfaceInfo; use crate::db::model::Database; +use crate::db::model::public::NetworkInterfaceInfo; use crate::net::gateway::NetworkInterfaceWatcher; use crate::prelude::*; use crate::util::io::file_string_stream; -use crate::util::serde::{display_serializable, HandlerExtSerde}; +use crate::util::serde::{HandlerExtSerde, display_serializable}; use crate::util::sync::{SyncRwLock, Watch}; pub fn dns_api() -> ParentHandler { @@ -349,11 +349,7 @@ impl RequestHandler for Resolver { Header::response_from_request(request.header()), &ip.into_iter() .filter_map(|a| { - if let IpAddr::V4(a) = a { - Some(a) - } else { - None - } + if let IpAddr::V4(a) = a { Some(a) } else { None } }) .map(|ip| { Record::from_rdata( @@ -377,11 +373,7 @@ impl RequestHandler for Resolver { Header::response_from_request(request.header()), &ip.into_iter() .filter_map(|a| { - if let IpAddr::V6(a) = a { - Some(a) - } else { - None - } + if let IpAddr::V6(a) = a { Some(a) } else { None } }) .map(|ip| { Record::from_rdata( @@ -415,9 +407,7 @@ impl RequestHandler for Resolver { } } else { let query = query.original().clone(); - let mut streams = self - .client - .lookup(query, DnsRequestOptions::default()); + let mut streams = self.client.lookup(query, DnsRequestOptions::default()); let mut err = None; for stream in streams.iter_mut() { match tokio::time::timeout(Duration::from_secs(5), stream.next()).await { diff --git a/core/startos/src/net/gateway.rs b/core/startos/src/net/gateway.rs index 0bd7f4938..ea0885f54 100644 --- a/core/startos/src/net/gateway.rs +++ b/core/startos/src/net/gateway.rs @@ -16,7 +16,7 @@ use itertools::Itertools; use models::GatewayId; use nix::net::if_::if_nametoindex; use patch_db::json_ptr::JsonPointer; -use rpc_toolkit::{from_fn_async, Context, HandlerArgs, HandlerExt, ParentHandler}; +use rpc_toolkit::{Context, HandlerArgs, HandlerExt, ParentHandler, from_fn_async}; use serde::{Deserialize, Serialize}; use tokio::io::{AsyncBufReadExt, BufReader}; use tokio::net::{TcpListener, TcpStream}; @@ -24,25 +24,25 @@ use tokio::process::Command; use ts_rs::TS; use zbus::proxy::{PropertyChanged, PropertyStream, SignalStream}; use zbus::zvariant::{ - DeserializeDict, Dict, OwnedObjectPath, OwnedValue, Type as ZType, Value as ZValue, - DICT_ENTRY_SIG_END_STR, + DICT_ENTRY_SIG_END_STR, DeserializeDict, Dict, OwnedObjectPath, OwnedValue, Type as ZType, + Value as ZValue, }; -use zbus::{proxy, Connection}; +use zbus::{Connection, proxy}; use crate::context::{CliContext, RpcContext}; -use crate::db::model::public::{IpInfo, NetworkInterfaceInfo, NetworkInterfaceType}; use crate::db::model::Database; +use crate::db::model::public::{IpInfo, NetworkInterfaceInfo, NetworkInterfaceType}; use crate::net::forward::START9_BRIDGE_IFACE; use crate::net::gateway::device::DeviceProxy; use crate::net::utils::ipv6_is_link_local; use crate::net::web_server::Accept; use crate::prelude::*; +use crate::util::Invoke; use crate::util::collections::OrdMapIterMut; use crate::util::future::Until; use crate::util::io::open_file; -use crate::util::serde::{display_serializable, HandlerExtSerde}; +use crate::util::serde::{HandlerExtSerde, display_serializable}; use crate::util::sync::{SyncMutex, Watch}; -use crate::util::Invoke; pub fn gateway_api() -> ParentHandler { ParentHandler::new() diff --git a/core/startos/src/net/host/address.rs b/core/startos/src/net/host/address.rs index f01ef3bc9..335bee2b4 100644 --- a/core/startos/src/net/host/address.rs +++ b/core/startos/src/net/host/address.rs @@ -1,19 +1,20 @@ use std::collections::BTreeSet; +use std::net::Ipv4Addr; use clap::Parser; use imbl_value::InternedString; use models::GatewayId; -use rpc_toolkit::{from_fn_async, Context, Empty, HandlerArgs, HandlerExt, ParentHandler}; +use rpc_toolkit::{Context, Empty, HandlerArgs, HandlerExt, ParentHandler, from_fn_async}; use serde::{Deserialize, Serialize}; use ts_rs::TS; use crate::context::{CliContext, RpcContext}; use crate::db::model::DatabaseModel; use crate::net::acme::AcmeProvider; -use crate::net::host::{all_hosts, HostApiKind}; +use crate::net::host::{HostApiKind, all_hosts}; use crate::net::tor::OnionAddress; use crate::prelude::*; -use crate::util::serde::{display_serializable, HandlerExtSerde}; +use crate::util::serde::{HandlerExtSerde, display_serializable}; #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "kebab-case")] @@ -35,10 +36,10 @@ pub struct PublicDomainConfig { pub acme: Option, } -fn check_duplicates(db: &DatabaseModel) -> Result<(), Error> { +fn handle_duplicates(db: &mut DatabaseModel) -> Result<(), Error> { let mut onions = BTreeSet::::new(); let mut domains = BTreeSet::::new(); - let mut check_onion = |onion: OnionAddress| { + let check_onion = |onions: &mut BTreeSet, onion: OnionAddress| { if onions.contains(&onion) { return Err(Error::new( eyre!("onion address {onion} is already in use"), @@ -48,7 +49,7 @@ fn check_duplicates(db: &DatabaseModel) -> Result<(), Error> { onions.insert(onion); Ok(()) }; - let mut check_domain = |domain: InternedString| { + let check_domain = |domains: &mut BTreeSet, domain: InternedString| { if domains.contains(&domain) { return Err(Error::new( eyre!("domain {domain} is already in use"), @@ -58,23 +59,47 @@ fn check_duplicates(db: &DatabaseModel) -> Result<(), Error> { domains.insert(domain); Ok(()) }; + let mut not_in_use = Vec::new(); for host in all_hosts(db) { let host = host?; + let in_use = host.as_bindings().de()?.values().any(|v| v.enabled); + if !in_use { + not_in_use.push(host); + continue; + } for onion in host.as_onions().de()? { - check_onion(onion)?; + check_onion(&mut onions, onion)?; } for domain in host.as_public_domains().keys()? { - check_domain(domain)?; + check_domain(&mut domains, domain)?; } for domain in host.as_private_domains().de()? { - check_domain(domain)?; + check_domain(&mut domains, domain)?; + } + } + for host in not_in_use { + host.as_onions_mut() + .mutate(|o| Ok(o.retain(|o| !onions.contains(o))))?; + host.as_public_domains_mut() + .mutate(|d| Ok(d.retain(|d, _| !domains.contains(d))))?; + host.as_private_domains_mut() + .mutate(|d| Ok(d.retain(|d| !domains.contains(d))))?; + + for onion in host.as_onions().de()? { + check_onion(&mut onions, onion)?; + } + for domain in host.as_public_domains().keys()? { + check_domain(&mut domains, domain)?; + } + for domain in host.as_private_domains().de()? { + check_domain(&mut domains, domain)?; } } Ok(()) } -pub fn address_api( -) -> ParentHandler { +pub fn address_api() +-> ParentHandler { ParentHandler::::new() .subcommand( "domain", @@ -209,12 +234,12 @@ pub struct AddPublicDomainParams { pub async fn add_public_domain( ctx: RpcContext, AddPublicDomainParams { - ref fqdn, + fqdn, acme, gateway, }: AddPublicDomainParams, inheritance: Kind::Inheritance, -) -> Result<(), Error> { +) -> Result, Error> { ctx.db .mutate(|db| { if let Some(acme) = &acme { @@ -231,31 +256,35 @@ pub async fn add_public_domain( Kind::host_for(&inheritance, db)? .as_public_domains_mut() - .insert(fqdn, &PublicDomainConfig { acme, gateway })?; - check_duplicates(db) + .insert(&fqdn, &PublicDomainConfig { acme, gateway })?; + handle_duplicates(db) }) .await .result?; Kind::sync_host(&ctx, inheritance).await?; - Ok(()) + tokio::task::spawn_blocking(|| { + crate::net::dns::query_dns(ctx, crate::net::dns::QueryDnsParams { fqdn }) + }) + .await + .with_kind(ErrorKind::Unknown)? } #[derive(Deserialize, Serialize, Parser)] pub struct RemoveDomainParams { - pub domain: InternedString, + pub fqdn: InternedString, } pub async fn remove_public_domain( ctx: RpcContext, - RemoveDomainParams { domain }: RemoveDomainParams, + RemoveDomainParams { fqdn }: RemoveDomainParams, inheritance: Kind::Inheritance, ) -> Result<(), Error> { ctx.db .mutate(|db| { Kind::host_for(&inheritance, db)? .as_public_domains_mut() - .remove(&domain) + .remove(&fqdn) }) .await .result?; @@ -279,7 +308,7 @@ pub async fn add_private_domain( Kind::host_for(&inheritance, db)? .as_private_domains_mut() .mutate(|d| Ok(d.insert(fqdn)))?; - check_duplicates(db) + handle_duplicates(db) }) .await .result?; @@ -290,7 +319,7 @@ pub async fn add_private_domain( pub async fn remove_private_domain( ctx: RpcContext, - RemoveDomainParams { domain }: RemoveDomainParams, + RemoveDomainParams { fqdn: domain }: RemoveDomainParams, inheritance: Kind::Inheritance, ) -> Result<(), Error> { ctx.db @@ -332,7 +361,7 @@ pub async fn add_onion( Kind::host_for(&inheritance, db)? .as_onions_mut() .mutate(|a| Ok(a.insert(onion)))?; - check_duplicates(db) + handle_duplicates(db) }) .await .result?; diff --git a/core/startos/src/net/host/binding.rs b/core/startos/src/net/host/binding.rs index 96b49abf9..a83ea48e1 100644 --- a/core/startos/src/net/host/binding.rs +++ b/core/startos/src/net/host/binding.rs @@ -1,11 +1,11 @@ use std::collections::{BTreeMap, BTreeSet}; use std::str::FromStr; -use clap::builder::ValueParserFactory; use clap::Parser; +use clap::builder::ValueParserFactory; use imbl::OrdSet; use models::{FromStrParser, GatewayId, HostId}; -use rpc_toolkit::{from_fn_async, Context, Empty, HandlerArgs, HandlerExt, ParentHandler}; +use rpc_toolkit::{Context, Empty, HandlerArgs, HandlerExt, ParentHandler, from_fn_async}; use serde::{Deserialize, Serialize}; use ts_rs::TS; @@ -16,7 +16,7 @@ use crate::net::gateway::InterfaceFilter; use crate::net::host::HostApiKind; use crate::net::vhost::AlpnInfo; use crate::prelude::*; -use crate::util::serde::{display_serializable, HandlerExtSerde}; +use crate::util::serde::{HandlerExtSerde, display_serializable}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, TS)] #[ts(export)] @@ -169,8 +169,8 @@ pub struct AddSslOptions { pub alpn: Option, } -pub fn binding( -) -> ParentHandler { +pub fn binding() +-> ParentHandler { ParentHandler::::new() .subcommand( "list", diff --git a/core/startos/src/net/host/mod.rs b/core/startos/src/net/host/mod.rs index a921d436c..c4d68bc80 100644 --- a/core/startos/src/net/host/mod.rs +++ b/core/startos/src/net/host/mod.rs @@ -127,14 +127,16 @@ pub fn host_for<'a>( }) } -pub fn all_hosts(db: &DatabaseModel) -> impl Iterator, Error>> { - [Ok(db.as_public().as_server_info().as_network().as_host())] +pub fn all_hosts(db: &mut DatabaseModel) -> impl Iterator, Error>> { + use patch_db::DestructureMut; + let destructured = db.as_public_mut().destructure_mut(); + [Ok(destructured.server_info.as_network_mut().as_host_mut())] .into_iter() .chain( - [db.as_public().as_package_data().as_entries()] + [destructured.package_data.as_entries_mut()] .into_iter() .flatten_ok() - .map(|entry| entry.and_then(|(_, v)| v.as_hosts().as_entries())) + .map(|entry| entry.and_then(|(_, v)| v.as_hosts_mut().as_entries_mut())) .flatten_ok() .map_ok(|(_, v)| v), ) diff --git a/core/startos/src/net/net_controller.rs b/core/startos/src/net/net_controller.rs index b113f1435..2a6173415 100644 --- a/core/startos/src/net/net_controller.rs +++ b/core/startos/src/net/net_controller.rs @@ -3,7 +3,7 @@ use std::net::{Ipv4Addr, SocketAddr}; use std::sync::{Arc, Weak}; use color_eyre::eyre::eyre; -use imbl::{vector, OrdMap}; +use imbl::{OrdMap, vector}; use imbl_value::InternedString; use ipnet::IpNet; use models::{HostId, OptionExt, PackageId}; @@ -11,8 +11,9 @@ use tokio::sync::Mutex; use tokio::task::JoinHandle; use tracing::instrument; -use crate::db::model::public::NetworkInterfaceInfo; +use crate::HOST_IP; use crate::db::model::Database; +use crate::db::model::public::NetworkInterfaceInfo; use crate::error::ErrorCollection; use crate::hostname::Hostname; use crate::net::dns::DnsController; @@ -23,7 +24,7 @@ use crate::net::gateway::{ }; use crate::net::host::address::HostAddress; use crate::net::host::binding::{AddSslOptions, BindId, BindOptions}; -use crate::net::host::{host_for, Host, Hosts}; +use crate::net::host::{Host, Hosts, host_for}; use crate::net::service_interface::{HostnameInfo, IpHostname, OnionHostname}; use crate::net::tor::{OnionAddress, TorController, TorSecretKey}; use crate::net::utils::ipv6_is_local; @@ -31,7 +32,6 @@ use crate::net::vhost::{AlpnInfo, TargetInfo, VHostController}; use crate::prelude::*; use crate::service::effects::callbacks::ServiceCallbacks; use crate::util::serde::MaybeUtf8String; -use crate::HOST_IP; pub struct NetController { pub(crate) db: TypedPatchDb, diff --git a/core/startos/src/net/tor.rs b/core/startos/src/net/tor.rs index af6666fb1..502bd106b 100644 --- a/core/startos/src/net/tor.rs +++ b/core/startos/src/net/tor.rs @@ -9,24 +9,19 @@ use arti_client::{TorClient, TorClientConfig}; use base64::Engine; use clap::Parser; use color_eyre::eyre::eyre; -use futures::{FutureExt, Stream, StreamExt}; +use futures::StreamExt; use helpers::NonDetachingJoinHandle; use imbl_value::InternedString; -use itertools::Itertools; -use lazy_static::lazy_static; -use regex::Regex; use rpc_toolkit::{from_fn_async, Context, Empty, HandlerExt, ParentHandler}; -use safelog::DisplayRedacted; use serde::{Deserialize, Serialize}; use tokio::io::AsyncWriteExt; use tokio::net::TcpStream; -use tokio::sync::oneshot; use tor_cell::relaycell::msg::Connected; use tor_hscrypto::pk::{HsId, HsIdKeypair}; use tor_hsservice::status::State as ArtiOnionServiceState; -use tor_hsservice::{HsNickname, RendRequest, RunningOnionService}; +use tor_hsservice::{HsNickname, RunningOnionService}; use tor_keymgr::config::ArtiKeystoreKind; -use tor_proto::stream::IncomingStreamRequest; +use tor_proto::client::stream::IncomingStreamRequest; use tor_rtcompat::tokio::TokioRustlsRuntime; use ts_rs::TS; @@ -39,13 +34,11 @@ use crate::util::serde::{ }; use crate::util::sync::{SyncMutex, SyncRwLock}; -const STARTING_HEALTH_TIMEOUT: u64 = 120; // 2min - #[derive(Debug, Clone, Copy)] pub struct OnionAddress(pub HsId); impl std::fmt::Display for OnionAddress { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - self.0.fmt_unredacted(f) + safelog::DisplayRedacted::fmt_unredacted(&self.0, f) } } impl FromStr for OnionAddress { @@ -201,7 +194,7 @@ impl std::fmt::Debug for OnionStore { impl<'a> std::fmt::Debug for OnionStoreMap<'a> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { #[derive(Debug)] - struct KeyFor(OnionAddress); + struct KeyFor(#[allow(unused)] OnionAddress); let mut map = f.debug_map(); for (k, v) in self.0 { map.key(k); @@ -451,7 +444,6 @@ impl TorController { } pub async fn reset(&self, wipe_state: bool) -> Result<(), Error> { - // todo!() Ok(()) } @@ -488,7 +480,7 @@ impl OnionService { .run_while(async { loop { if let Err(e) = async { - let (new_service, mut stream) = client.peek(|c| { + let (new_service, stream) = client.peek(|c| { c.launch_onion_service_with_hsid( OnionServiceConfigBuilder::default() .nickname( @@ -504,68 +496,81 @@ impl OnionService { ) .with_kind(ErrorKind::Tor) })?; + let addr = new_service.onion_address().map(|a| safelog::DisplayRedacted::display_unredacted(&a).to_string()); + let mut status_stream = new_service.status_events(); + bg.add_job(async move { + while let Some(status) = status_stream.next().await { + tracing::debug!("{addr:?} status: {status:?}"); + if let Some(err) = status.current_problem() { + tracing::error!("{err:?}"); + } + } + }); service.replace(Some(new_service)); + let mut stream = tor_hsservice::handle_rend_requests(stream); while let Some(req) = stream.next().await { bg.add_job({ let bg = bg.clone(); let bindings = bindings.clone(); async move { if let Err(e) = async { - let mut stream = - req.accept().await.with_kind(ErrorKind::Tor)?; - while let Some(req) = stream.next().await { - let IncomingStreamRequest::Begin(begin) = - req.request() - else { - continue; // TODO: reject instead? - }; - let Some(target) = bindings.peek(|b| { - b.get(&begin.port()).and_then(|a| { - a.iter() - .find(|(_, rc)| { - rc.strong_count() > 0 - }) - .map(|(addr, _)| *addr) - }) - }) else { - continue; // TODO: reject instead? - }; - bg.add_job(async move { - if let Err(e) = async { - let mut outgoing = - TcpStream::connect(target) - .await - .with_kind( - ErrorKind::Network, - )?; - let mut incoming = req - .accept(Connected::new_empty()) - .await - .with_kind(ErrorKind::Tor)?; - if let Err(e) = - tokio::io::copy_bidirectional( - &mut outgoing, - &mut incoming, - ) - .await - { - tracing::error!("{e}"); - tracing::debug!("{e:?}"); - } - incoming.flush().await?; - outgoing.flush().await?; - incoming.shutdown().await?; - outgoing.shutdown().await?; - - Ok::<_, Error>(()) - } + let IncomingStreamRequest::Begin(begin) = + req.request() + else { + return req + .reject(tor_cell::relaycell::msg::End::new_with_reason( + tor_cell::relaycell::msg::EndReason::DONE, + )) .await + .with_kind(ErrorKind::Tor); + }; + let Some(target) = bindings.peek(|b| { + b.get(&begin.port()).and_then(|a| { + a.iter() + .find(|(_, rc)| rc.strong_count() > 0) + .map(|(addr, _)| *addr) + }) + }) else { + return req + .reject(tor_cell::relaycell::msg::End::new_with_reason( + tor_cell::relaycell::msg::EndReason::DONE, + )) + .await + .with_kind(ErrorKind::Tor); + }; + bg.add_job(async move { + if let Err(e) = async { + let mut outgoing = + TcpStream::connect(target) + .await + .with_kind(ErrorKind::Network)?; + let mut incoming = req + .accept(Connected::new_empty()) + .await + .with_kind(ErrorKind::Tor)?; + if let Err(e) = + tokio::io::copy_bidirectional( + &mut outgoing, + &mut incoming, + ) + .await { tracing::error!("{e}"); tracing::debug!("{e:?}"); } - }); - } + incoming.flush().await?; + outgoing.flush().await?; + incoming.shutdown().await?; + outgoing.shutdown().await?; + + Ok::<_, Error>(()) + } + .await + { + tracing::error!("{e}"); + tracing::debug!("{e:?}"); + } + }); Ok::<_, Error>(()) } .await @@ -623,6 +628,7 @@ impl OnionService { } pub async fn shutdown(self) -> Result<(), Error> { + self.0.service.replace(None); self.0._thread.abort(); Ok(()) } diff --git a/core/startos/src/net/web_server.rs b/core/startos/src/net/web_server.rs index dad3c9702..8fcd74d8a 100644 --- a/core/startos/src/net/web_server.rs +++ b/core/startos/src/net/web_server.rs @@ -6,8 +6,8 @@ use std::task::Poll; use std::time::Duration; use axum::Router; -use futures::future::Either; use futures::FutureExt; +use futures::future::Either; use helpers::NonDetachingJoinHandle; use hyper_util::rt::{TokioIo, TokioTimer}; use tokio::net::{TcpListener, TcpStream}; @@ -15,7 +15,7 @@ use tokio::sync::oneshot; use crate::context::{DiagnosticContext, InitContext, InstallContext, RpcContext, SetupContext}; use crate::net::gateway::{ - lookup_info_by_addr, NetworkInterfaceListener, SelfContainedNetworkInterfaceListener, + NetworkInterfaceListener, SelfContainedNetworkInterfaceListener, lookup_info_by_addr, }; use crate::net::static_server::{ diagnostic_ui_router, init_ui_router, install_ui_router, main_ui_router, redirecter, refresher, diff --git a/core/startos/src/service/effects/subcontainer/mod.rs b/core/startos/src/service/effects/subcontainer/mod.rs index fd80dfb6f..92114e363 100644 --- a/core/startos/src/service/effects/subcontainer/mod.rs +++ b/core/startos/src/service/effects/subcontainer/mod.rs @@ -11,14 +11,14 @@ use crate::service::effects::prelude::*; use crate::service::persistent_container::Subcontainer; use crate::util::Invoke; -#[cfg(feature = "container-runtime")] +#[cfg(feature = "start-container")] mod sync; -#[cfg(not(feature = "container-runtime"))] +#[cfg(not(feature = "start-container"))] mod sync_dummy; pub use sync::*; -#[cfg(not(feature = "container-runtime"))] +#[cfg(not(feature = "start-container"))] use sync_dummy as sync; #[derive(Debug, Deserialize, Serialize, Parser, TS)] diff --git a/core/startos/src/util/actor/background.rs b/core/startos/src/util/actor/background.rs index ee5ea2cf4..87a535f87 100644 --- a/core/startos/src/util/actor/background.rs +++ b/core/startos/src/util/actor/background.rs @@ -82,7 +82,7 @@ impl BackgroundJobRunner { cx: &mut std::task::Context<'_>, ) -> std::task::Poll { let this = self.project(); - this.runner.poll(cx); + let _ = this.runner.poll(cx); this.fut.poll(cx) } } diff --git a/core/startos/src/util/io.rs b/core/startos/src/util/io.rs index a1e3b8e03..ef7e36801 100644 --- a/core/startos/src/util/io.rs +++ b/core/startos/src/util/io.rs @@ -6,8 +6,8 @@ use std::os::unix::prelude::MetadataExt; use std::path::{Path, PathBuf}; use std::pin::Pin; use std::str::FromStr; -use std::sync::atomic::AtomicU64; use std::sync::Arc; +use std::sync::atomic::AtomicU64; use std::task::{Poll, Waker}; use std::time::Duration; @@ -22,7 +22,7 @@ use nix::unistd::{Gid, Uid}; use serde::{Deserialize, Serialize}; use tokio::fs::{File, OpenOptions}; use tokio::io::{ - duplex, AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, DuplexStream, ReadBuf, WriteHalf, + AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, DuplexStream, ReadBuf, WriteHalf, duplex, }; use tokio::net::TcpStream; use tokio::sync::{Notify, OwnedMutexGuard}; diff --git a/core/startos/src/util/sync.rs b/core/startos/src/util/sync.rs index 25a05f41f..405ff1d50 100644 --- a/core/startos/src/util/sync.rs +++ b/core/startos/src/util/sync.rs @@ -5,8 +5,8 @@ use std::sync::atomic::AtomicUsize; use std::sync::{Arc, Weak}; use std::task::{Poll, Waker}; -use futures::stream::BoxStream; use futures::Stream; +use futures::stream::BoxStream; use crate::prelude::*; diff --git a/patch-db b/patch-db index d2f38ef5f..5b23a1eac 160000 --- a/patch-db +++ b/patch-db @@ -1 +1 @@ -Subproject commit d2f38ef5f711ea73937cd3bca2623b3193b519da +Subproject commit 5b23a1eac6439fff930c9b0eafae7680339dcd4b diff --git a/web/projects/ui/src/app/routes/portal/components/interfaces/public-domains/pd.service.ts b/web/projects/ui/src/app/routes/portal/components/interfaces/public-domains/pd.service.ts index 928a43691..43b773bde 100644 --- a/web/projects/ui/src/app/routes/portal/components/interfaces/public-domains/pd.service.ts +++ b/web/projects/ui/src/app/routes/portal/components/interfaces/public-domains/pd.service.ts @@ -193,7 +193,7 @@ export class PublicDomainService { ), 250, ) - } else if (ip === wanIp) { + } else if (ip !== wanIp) { setTimeout( () => this.showDns( diff --git a/web/projects/ui/src/app/routes/portal/components/interfaces/tor-domains.component.ts b/web/projects/ui/src/app/routes/portal/components/interfaces/tor-domains.component.ts index 58ab0f30a..33457524a 100644 --- a/web/projects/ui/src/app/routes/portal/components/interfaces/tor-domains.component.ts +++ b/web/projects/ui/src/app/routes/portal/components/interfaces/tor-domains.component.ts @@ -167,10 +167,9 @@ export class InterfaceTorDomainsComponent { const loader = this.loader.open('Saving').subscribe() try { - let onion = key + const onion = key ? await this.api.addTorKey({ key }) : await this.api.generateTorKey({}) - onion = `${onion}.onion` if (this.interface.packageId) { await this.api.pkgAddOnion({ diff --git a/web/projects/ui/src/app/routes/portal/routes/services/routes/interface.component.ts b/web/projects/ui/src/app/routes/portal/routes/services/routes/interface.component.ts index d2c28b7ec..7007172e9 100644 --- a/web/projects/ui/src/app/routes/portal/routes/services/routes/interface.component.ts +++ b/web/projects/ui/src/app/routes/portal/routes/services/routes/interface.component.ts @@ -114,14 +114,16 @@ export default class ServiceInterfaceRoute { const { serviceInterfaces, hosts } = pkg const iFace = serviceInterfaces[this.interfaceId()] - const key = iFace?.addressInfo.hostId || '' + const key = iFace!.addressInfo.hostId || '' const host = hosts[key] - const port = iFace?.addressInfo.internalPort + const port = iFace!.addressInfo.internalPort if (!host || !iFace || !port) { return } + const binding = host.bindings[port] + const gateways = this.gatewayService.gateways() || [] return { @@ -129,10 +131,13 @@ export default class ServiceInterfaceRoute { addresses: this.interfaceService.getAddresses(iFace, host, gateways), gateways: gateways.map(g => ({ - enabled: true, + enabled: + (g.public + ? binding?.net.publicEnabled.includes(g.id) + : !binding?.net.privateDisabled.includes(g.id)) ?? false, ...g, })) || [], - torDomains: host.onions.map(o => `${o}.onion`), + torDomains: host.onions, publicDomains: getPublicDomains(host.publicDomains, gateways), privateDomains: host.privateDomains, } diff --git a/web/projects/ui/src/app/routes/portal/routes/system/routes/startos-ui/startos-ui.component.ts b/web/projects/ui/src/app/routes/portal/routes/system/routes/startos-ui/startos-ui.component.ts index 63956c813..391caf1c8 100644 --- a/web/projects/ui/src/app/routes/portal/routes/system/routes/startos-ui/startos-ui.component.ts +++ b/web/projects/ui/src/app/routes/portal/routes/system/routes/startos-ui/startos-ui.component.ts @@ -84,6 +84,8 @@ export default class StartOsUiComponent { if (!network || !gateways) return + const binding = network.host.bindings['80'] + return { ...this.iface, addresses: this.interfaceService.getAddresses( @@ -92,10 +94,13 @@ export default class StartOsUiComponent { gateways, ), gateways: gateways.map(g => ({ - enabled: true, + enabled: + (g.public + ? binding?.net.publicEnabled.includes(g.id) + : !binding?.net.privateDisabled.includes(g.id)) ?? false, ...g, })), - torDomains: network.host.onions.map(o => `${o}.onion`), + torDomains: network.host.onions, publicDomains: getPublicDomains(network.host.publicDomains, gateways), privateDomains: network.host.privateDomains, } diff --git a/web/projects/ui/src/app/services/api/api.types.ts b/web/projects/ui/src/app/services/api/api.types.ts index 7a670ebf7..12d87af02 100644 --- a/web/projects/ui/src/app/services/api/api.types.ts +++ b/web/projects/ui/src/app/services/api/api.types.ts @@ -280,7 +280,7 @@ export namespace RR { key: string } export type GenerateTorKeyReq = {} // net.tor.key.generate - export type AddTorKeyRes = string // onion address without .onion suffix + export type AddTorKeyRes = string // onion address *with* .onion suffix export type ServerBindingToggleGatewayReq = { // server.host.binding.set-gateway-enabled diff --git a/web/projects/ui/src/app/services/api/embassy-mock-api.service.ts b/web/projects/ui/src/app/services/api/embassy-mock-api.service.ts index faa797594..ed84f9316 100644 --- a/web/projects/ui/src/app/services/api/embassy-mock-api.service.ts +++ b/web/projects/ui/src/app/services/api/embassy-mock-api.service.ts @@ -1339,12 +1339,12 @@ export class MockApiService extends ApiService { async addTorKey(params: RR.AddTorKeyReq): Promise { await pauseFor(2000) - return 'vanityabcdefghijklmnop' + return 'vanityabcdefghijklmnop.onion' } async generateTorKey(params: RR.GenerateTorKeyReq): Promise { await pauseFor(2000) - return 'abcdefghijklmnopqrstuv' + return 'abcdefghijklmnopqrstuv.onion' } async serverBindingToggleGateway(