diff --git a/build/lib/motd b/build/lib/motd index 69b443364..fef88f66d 100755 --- a/build/lib/motd +++ b/build/lib/motd @@ -4,7 +4,7 @@ parse_essential_db_info() { DB_DUMP="/tmp/startos_db.json" if command -v start-cli >/dev/null 2>&1; then - start-cli db dump > "$DB_DUMP" 2>/dev/null || return 1 + timeout 30 start-cli db dump > "$DB_DUMP" 2>/dev/null || return 1 else return 1 fi diff --git a/core/Cargo.lock b/core/Cargo.lock index f4b9cf48d..4dcc5641e 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -48,7 +48,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "once_cell", "version_check", ] @@ -104,7 +104,7 @@ dependencies = [ "amplify_derive", "amplify_num", "ascii", - "getrandom 0.2.16", + "getrandom 0.2.17", "getrandom 0.3.4", "wasm-bindgen", ] @@ -272,7 +272,7 @@ dependencies = [ "cfg-if", "derive-deftly", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "educe", "fs-mistrust", "futures", @@ -367,7 +367,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] @@ -379,7 +379,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] @@ -391,7 +391,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -413,7 +413,7 @@ dependencies = [ "pem", "rcgen", "ring", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pemfile", "serde", "serde_json", @@ -459,13 +459,12 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.36" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37" +checksum = "d10e4f991a553474232bc0a31799f6d24b034a84c0971d80d2e2f78b2e576e40" dependencies = [ "compression-codecs", "compression-core", - "futures-core", "futures-io", "pin-project-lite", "tokio", @@ -513,16 +512,16 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.1.2", + "rustix 1.1.3", "slab", "windows-sys 0.61.2", ] [[package]] name = "async-lock" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener 5.4.1", "event-listener-strategy", @@ -556,7 +555,7 @@ dependencies = [ "cfg-if", "event-listener 5.4.1", "futures-lite", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -567,7 +566,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -582,7 +581,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.2", + "rustix 1.1.3", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -634,7 +633,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -651,7 +650,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -721,9 +720,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.15.2" +version = "1.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288" +checksum = "e84ce723ab67259cfeb9877c6a639ee9eb7a27b28123abd71db7f0d5d0cc9d86" dependencies = [ "aws-lc-sys", "zeroize", @@ -731,9 +730,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.35.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1" +checksum = "43a442ece363113bd4bd4c8b18977a7798dd4d3c3383f34fb61936960e8f4ad8" dependencies = [ "cc", "cmake", @@ -743,9 +742,9 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b098575ebe77cb6d14fc7f32749631a6e44edbef6b796f89b020e99ba20d425" +checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" dependencies = [ "axum-core", "base64 0.22.1", @@ -779,9 +778,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", @@ -869,9 +868,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.1" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "basic-cookies" @@ -996,26 +995,27 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" dependencies = [ "arrayref", "arrayvec 0.7.6", - "constant_time_eq 0.3.1", + "constant_time_eq", ] [[package]] name = "blake3" -version = "1.8.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" dependencies = [ "arrayref", "arrayvec 0.7.6", "cc", "cfg-if", - "constant_time_eq 0.3.1", + "constant_time_eq", + "cpufeatures", "memmap2 0.9.9", "rayon-core", ] @@ -1028,7 +1028,7 @@ checksum = "e0b121a9fe0df916e362fb3271088d071159cdf11db0e4182d02152850756eff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1162,9 +1162,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.49" +version = "1.2.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" +checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" dependencies = [ "find-msvc-tools", "jobserver", @@ -1198,9 +1198,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "js-sys", @@ -1269,9 +1269,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" dependencies = [ "clap_builder", "clap_derive", @@ -1279,9 +1279,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" dependencies = [ "anstream", "anstyle", @@ -1299,14 +1299,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "clipboard-win" @@ -1329,9 +1329,9 @@ dependencies = [ [[package]] name = "coarsetime" -version = "0.1.36" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" +checksum = "e58eb270476aa4fc7843849f8a35063e8743b4dbcdf6dd0f8ea0886980c204c2" dependencies = [ "libc", "wasix", @@ -1392,9 +1392,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.35" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2" +checksum = "00828ba6fd27b45a448e57dbfe84f1029d4c9f26b368157e9a448a5f49a2ec2a" dependencies = [ "brotli", "compression-core", @@ -1499,12 +1499,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - [[package]] name = "constant_time_eq" version = "0.4.2" @@ -1761,12 +1755,12 @@ checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ "bitflags 2.10.0", "crossterm_winapi", - "derive_more 2.1.0", + "derive_more 2.1.1", "document-features", "futures-core", "mio", "parking_lot 0.12.5", - "rustix 1.1.2", + "rustix 1.1.3", "signal-hook", "signal-hook-mio", "winapi", @@ -1904,7 +1898,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1952,7 +1946,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1974,14 +1968,14 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "der" @@ -2031,7 +2025,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2061,14 +2055,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea41269bd490d251b9eca50ccb43117e641cc68b129849757c15ece88fe0574" dependencies = [ "heck 0.5.0", - "indexmap 2.12.1", + "indexmap 2.13.0", "itertools 0.14.0", "proc-macro-crate", "proc-macro2", "quote", "sha3 0.10.8", "strum", - "syn 2.0.111", + "syn 2.0.114", "void", ] @@ -2080,7 +2074,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2124,29 +2118,29 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "derive_more" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b768e943bed7bf2cab53df09f4bc34bfd217cdb57d971e769874c9a6710618" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d286bfdaf75e988b4a78e013ecd79c581e06399ab53fbacd2d916c2f904f30b" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "convert_case 0.10.0", "proc-macro2", "quote", "rustc_version", - "syn 2.0.111", + "syn 2.0.114", "unicode-xid", ] @@ -2236,7 +2230,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2317,7 +2311,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2505,7 +2499,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2518,7 +2512,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2539,7 +2533,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2616,7 +2610,7 @@ dependencies = [ "either", "emver", "fp-core", - "getrandom 0.2.16", + "getrandom 0.2.17", "itertools 0.13.0", "memchr", "pest", @@ -2717,9 +2711,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41" [[package]] name = "fixed-capacity-vec" @@ -2735,9 +2729,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" dependencies = [ "crc32fast", "miniz_oxide", @@ -2952,7 +2946,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2973,7 +2967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", ] @@ -3069,9 +3063,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -3155,9 +3149,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -3165,7 +3159,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.12.1", + "indexmap 2.13.0", "slab", "tokio", "tokio-util", @@ -3263,7 +3257,7 @@ dependencies = [ "dynasmrt", "fixed-capacity-vec", "hex", - "rand_core 0.9.3", + "rand_core 0.9.5", "thiserror 2.0.17", ] @@ -3529,12 +3523,12 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "tokio", "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 1.0.4", + "webpki-roots 1.0.5", ] [[package]] @@ -3767,7 +3761,7 @@ dependencies = [ "archery", "bitmaps", "imbl-sized-chunks", - "rand_core 0.9.3", + "rand_core 0.9.5", "rand_xoshiro", "serde", "version_check", @@ -3844,9 +3838,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -3950,9 +3944,9 @@ dependencies = [ [[package]] name = "iri-string" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -4038,9 +4032,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jaq-core" @@ -4315,7 +4309,7 @@ dependencies = [ "nom 8.0.0", "percent-encoding", "quoted_printable", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-platform-verifier", "socket2 0.6.1", "tokio", @@ -4338,9 +4332,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.178" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libloading" @@ -4390,13 +4384,13 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall 0.6.0", + "redox_syscall 0.7.0", ] [[package]] @@ -4602,7 +4596,7 @@ checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4650,9 +4644,9 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.11" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" +checksum = "a3dec6bd31b08944e08b58fd99373893a6c17054d6f3ea5006cc894f4f4eee2a" dependencies = [ "crossbeam-channel", "crossbeam-epoch", @@ -4660,7 +4654,6 @@ dependencies = [ "equivalent", "parking_lot 0.12.5", "portable-atomic", - "rustc_version", "smallvec", "tagptr", "uuid", @@ -4685,7 +4678,7 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe", + "openssl-probe 0.1.6", "openssl-sys", "schannel", "security-framework 2.11.1", @@ -4816,9 +4809,9 @@ checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" [[package]] name = "ntapi" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +checksum = "c70f219e21142367c70c0b30c6a9e3a14d55b4d12a204d897fbec83a0363f081" dependencies = [ "winapi", ] @@ -4957,7 +4950,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -5135,7 +5128,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -5144,6 +5137,12 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "openssl-probe" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" + [[package]] name = "openssl-src" version = "300.5.4+3.5.4" @@ -5382,9 +5381,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" +checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" dependencies = [ "memchr", "ucd-trie", @@ -5392,9 +5391,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f" +checksum = "68f9dbced329c441fa79d80472764b1a2c7e57123553b8519b36663a2fb234ed" dependencies = [ "pest", "pest_generator", @@ -5402,22 +5401,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625" +checksum = "3bb96d5051a78f44f43c8f712d8e810adb0ebf923fc9ed2655a7f66f63ba8ee5" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "pest_meta" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82" +checksum = "602113b5b5e8621770cfd490cfd90b9f84ab29bd2b0e49ad83eb6d186cef2365" dependencies = [ "pest", "sha2 0.10.9", @@ -5430,7 +5429,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.12.1", + "indexmap 2.13.0", ] [[package]] @@ -5484,7 +5483,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -5497,7 +5496,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -5541,7 +5540,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -5601,7 +5600,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" dependencies = [ "base64 0.22.1", - "indexmap 2.12.1", + "indexmap 2.13.0", "quick-xml", "serde", "time", @@ -5645,15 +5644,15 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] name = "portable-pty" @@ -5771,7 +5770,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93980406f12d9f8140ed5abe7155acb10bb1e69ea55c88960b9c2f117445ef96" dependencies = [ "equivalent", - "indexmap 2.12.1", + "indexmap 2.13.0", "serde", ] @@ -5803,14 +5802,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] @@ -5825,7 +5824,7 @@ dependencies = [ "chrono", "flate2", "procfs-core", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -5866,14 +5865,14 @@ checksum = "fb6dc647500e84a25a85b100e76c85b8ace114c209432dc174f20aac11d4ed6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "prost" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" dependencies = [ "bytes", "prost-derive", @@ -5881,22 +5880,22 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" dependencies = [ "anyhow", "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "prost-types" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" dependencies = [ "prost", ] @@ -5923,7 +5922,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71cec9e2670207c5ebb9e477763c74436af3b9091dd550b9fb3c1bec7f3ea266" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -5993,7 +5992,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.35", + "rustls 0.23.36", "socket2 0.6.1", "thiserror 2.0.17", "tokio", @@ -6013,7 +6012,7 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "slab", "thiserror 2.0.17", @@ -6038,9 +6037,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] @@ -6149,7 +6148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -6179,7 +6178,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -6197,14 +6196,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", ] @@ -6225,7 +6224,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b16df48f071248e67b8fc5e866d9448d45c08ad8b672baaaf796e2f15e606ff0" dependencies = [ "libc", - "rand_core 0.9.3", + "rand_core 0.9.5", "winapi", ] @@ -6235,7 +6234,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -6244,7 +6243,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -6308,9 +6307,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5" +checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" dependencies = [ "bitflags 2.10.0", ] @@ -6321,7 +6320,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -6332,7 +6331,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 2.0.17", ] @@ -6354,7 +6353,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -6394,9 +6393,9 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.26" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", @@ -6420,7 +6419,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "serde", "serde_json", @@ -6438,7 +6437,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.4", + "webpki-roots 1.0.5", ] [[package]] @@ -6482,7 +6481,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -6502,7 +6501,7 @@ dependencies = [ [[package]] name = "rpc-toolkit" version = "0.3.2" -source = "git+https://github.com/Start9Labs/rpc-toolkit.git#81d18147fd0ca9725b820c010c006e8a2cada322" +source = "git+https://github.com/Start9Labs/rpc-toolkit.git#406ee9e88bf20e3155f150eb755b5b9c2aefd167" dependencies = [ "async-stream", "async-trait", @@ -6530,9 +6529,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" dependencies = [ "const-oid", "digest 0.10.7", @@ -6582,7 +6581,7 @@ checksum = "8ae76b7506744d254fd0eb2c0ff5c5d108201ccbb083111ac04a44eeda105680" dependencies = [ "base64 0.22.1", "blake2b_simd", - "constant_time_eq 0.4.2", + "constant_time_eq", "crossbeam-utils", ] @@ -6631,9 +6630,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags 2.10.0", "errno", @@ -6658,9 +6657,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "aws-lc-rs", "log", @@ -6674,11 +6673,11 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe", + "openssl-probe 0.2.0", "rustls-pki-types", "schannel", "security-framework 3.5.1", @@ -6714,7 +6713,7 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-native-certs", "rustls-platform-verifier-android", "rustls-webpki 0.103.8", @@ -6773,16 +6772,16 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "safelog" version = "0.4.8" source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ - "derive_more 2.1.0", + "derive_more 2.1.1", "educe", "either", "fluid-let", @@ -6830,9 +6829,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" dependencies = [ "dyn-clone", "ref-cast", @@ -6986,7 +6985,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7001,16 +7000,16 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -7043,7 +7042,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7086,9 +7085,9 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.12.1", + "indexmap 2.13.0", "schemars 0.9.0", - "schemars 1.1.0", + "schemars 1.2.0", "serde_core", "serde_json", "serde_with_macros", @@ -7104,7 +7103,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7113,7 +7112,7 @@ version = "0.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59e2dd588bf1597a252c3b920e0143eb99b0f76e4e082f4c92ce34fbc9e71ddd" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "itoa", "libyml", "memchr", @@ -7267,10 +7266,11 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -7483,12 +7483,12 @@ dependencies = [ "futures-util", "hashbrown 0.15.5", "hashlink", - "indexmap 2.12.1", + "indexmap 2.13.0", "log", "memchr", "once_cell", "percent-encoding", - "rustls 0.23.35", + "rustls 0.23.36", "serde", "serde_json", "sha2 0.10.9", @@ -7511,7 +7511,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7532,7 +7532,7 @@ dependencies = [ "sha2 0.10.9", "sqlx-core", "sqlx-postgres", - "syn 2.0.111", + "syn 2.0.114", "tokio", "url", ] @@ -7597,7 +7597,7 @@ dependencies = [ "quote", "regex-syntax 0.6.29", "strsim 0.11.1", - "syn 2.0.111", + "syn 2.0.114", "unicode-width 0.1.14", ] @@ -7715,7 +7715,7 @@ dependencies = [ "imbl", "imbl-value 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "include_dir", - "indexmap 2.12.1", + "indexmap 2.13.0", "indicatif", "inotify", "integer-encoding", @@ -7786,7 +7786,7 @@ dependencies = [ "tokio-tar", "tokio-tungstenite 0.26.2", "tokio-util", - "toml 0.9.9+spec-1.0.0", + "toml 0.9.11+spec-1.1.0", "tor-cell", "tor-hscrypto", "tor-hsservice", @@ -7886,7 +7886,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7929,9 +7929,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -7955,7 +7955,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -8039,14 +8039,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom 0.3.4", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -8076,7 +8076,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.60.2", ] @@ -8127,7 +8127,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -8138,7 +8138,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -8152,30 +8152,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "71e552d1249bf61ac2a52db88179fd0673def1e1ad8243a00d9ec9ed71fee3dd" dependencies = [ "num-conv", "time-core", @@ -8228,9 +8228,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -8252,7 +8252,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -8282,15 +8282,15 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.35", + "rustls 0.23.36", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -8340,9 +8340,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -8375,14 +8375,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.9+spec-1.0.0" +version = "0.9.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5238e643fc34a1d5d7e753e1532a91912d74b63b92b3ea51fde8d1b7bc79dd" +checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "serde_core", "serde_spanned 1.0.4", - "toml_datetime 0.7.4+spec-1.0.0", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", "winnow", @@ -8399,9 +8399,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.4+spec-1.0.0" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe3cea6b2aa3b910092f6abd4053ea464fab5f9c170ba5e9a6aead16ec4af2b6" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] @@ -8412,7 +8412,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", @@ -8426,17 +8426,17 @@ version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ - "indexmap 2.12.1", - "toml_datetime 0.7.4+spec-1.0.0", + "indexmap 2.13.0", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "winnow", ] [[package]] name = "toml_parser" -version = "1.0.5+spec-1.0.0" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c03bee5ce3696f31250db0bbaff18bc43301ce0e8db2ed1f07cbb2acf89984c" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] @@ -8449,9 +8449,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.5+spec-1.0.0" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9cd6190959dce0994aa8970cd32ab116d1851ead27e866039acaf2524ce44fa" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tonic" @@ -8513,7 +8513,7 @@ name = "tor-basic-utils" version = "0.33.0" source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ - "derive_more 2.1.0", + "derive_more 2.1.1", "hex", "itertools 0.14.0", "libc", @@ -8553,7 +8553,7 @@ dependencies = [ "bytes", "caret", "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "educe", "itertools 0.14.0", "paste", @@ -8580,7 +8580,7 @@ source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit dependencies = [ "caret", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "digest 0.10.7", "thiserror 2.0.17", "tor-bytes", @@ -8596,7 +8596,7 @@ dependencies = [ "async-trait", "caret", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "educe", "futures", "oneshot-fused-workaround", @@ -8645,7 +8645,7 @@ dependencies = [ "cfg-if", "derive-deftly", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "downcast-rs 2.0.2", "dyn-clone", "educe", @@ -8707,7 +8707,7 @@ dependencies = [ "serde_ignored", "strum", "thiserror 2.0.17", - "toml 0.9.9+spec-1.0.0", + "toml 0.9.11+spec-1.1.0", "tor-basic-utils", "tor-error", "tor-rtcompat", @@ -8746,7 +8746,7 @@ source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit dependencies = [ "async-compression", "base64ct", - "derive_more 2.1.0", + "derive_more 2.1.1", "futures", "hex", "http", @@ -8774,7 +8774,7 @@ dependencies = [ "async-trait", "base64ct", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "digest 0.10.7", "educe", "event-listener 5.4.1", @@ -8824,7 +8824,7 @@ name = "tor-error" version = "0.33.0" source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ - "derive_more 2.1.0", + "derive_more 2.1.1", "futures", "paste", "retry-error", @@ -8841,7 +8841,7 @@ version = "0.33.0" source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "arbitrary", - "derive_more 2.1.0", + "derive_more 2.1.1", "thiserror 2.0.17", "void", ] @@ -8855,7 +8855,7 @@ dependencies = [ "base64ct", "derive-deftly", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "dyn-clone", "educe", "futures", @@ -8894,7 +8894,7 @@ source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit dependencies = [ "async-trait", "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "educe", "either", "futures", @@ -8938,7 +8938,7 @@ dependencies = [ "cipher 0.4.4", "data-encoding", "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "digest 0.10.7", "equix", "hex", @@ -8973,7 +8973,7 @@ dependencies = [ "cfg-if", "derive-deftly", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "digest 0.10.7", "educe", "fs-mistrust", @@ -8987,7 +8987,7 @@ dependencies = [ "oneshot-fused-workaround", "postage", "rand 0.9.2", - "rand_core 0.9.3", + "rand_core 0.9.5", "retry-error", "safelog", "serde", @@ -9025,7 +9025,7 @@ version = "0.33.0" source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "downcast-rs 2.0.2", "paste", "rand 0.9.2", @@ -9049,7 +9049,7 @@ dependencies = [ "cfg-if", "derive-deftly", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "downcast-rs 2.0.2", "dyn-clone", "fs-mistrust", @@ -9088,7 +9088,7 @@ dependencies = [ "caret", "derive-deftly", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "hex", "itertools 0.14.0", "safelog", @@ -9115,7 +9115,7 @@ dependencies = [ "curve25519-dalek 4.1.3", "der-parser 10.0.0", "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "digest 0.10.7", "ed25519-dalek 2.2.0", "educe", @@ -9124,7 +9124,7 @@ dependencies = [ "rand 0.9.2", "rand_chacha 0.9.0", "rand_core 0.6.4", - "rand_core 0.9.3", + "rand_core 0.9.5", "rand_jitter", "rdrand", "rsa", @@ -9163,7 +9163,7 @@ source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit dependencies = [ "cfg-if", "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "dyn-clone", "educe", "futures", @@ -9192,7 +9192,7 @@ source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit dependencies = [ "async-trait", "bitflags 2.10.0", - "derive_more 2.1.0", + "derive_more 2.1.1", "digest 0.10.7", "futures", "hex", @@ -9228,7 +9228,7 @@ dependencies = [ "cipher 0.4.4", "derive-deftly", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "digest 0.10.7", "educe", "hex", @@ -9270,7 +9270,7 @@ source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit dependencies = [ "amplify", "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "filetime", "fs-mistrust", "fslock", @@ -9307,7 +9307,7 @@ dependencies = [ "criterion-cycles-per-byte", "derive-deftly", "derive_builder_fork_arti", - "derive_more 2.1.0", + "derive_more 2.1.1", "digest 0.10.7", "educe", "futures", @@ -9319,7 +9319,7 @@ dependencies = [ "pin-project", "postage", "rand 0.9.2", - "rand_core 0.9.3", + "rand_core 0.9.5", "safelog", "slotmap-careful", "smallvec", @@ -9391,7 +9391,7 @@ dependencies = [ "async_executors", "asynchronous-codec", "coarsetime", - "derive_more 2.1.0", + "derive_more 2.1.1", "dyn-clone", "educe", "futures", @@ -9421,7 +9421,7 @@ dependencies = [ "assert_matches", "async-trait", "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "educe", "futures", "humantime", @@ -9462,7 +9462,7 @@ version = "0.33.0" source = "git+https://github.com/Start9Labs/arti.git?branch=patch%2Fdisable-exit#24730694701a83432d791d80802db8bda0699700" dependencies = [ "derive-deftly", - "derive_more 2.1.0", + "derive_more 2.1.1", "serde", "thiserror 2.0.17", "tor-memquota", @@ -9490,13 +9490,13 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", - "indexmap 2.12.1", + "indexmap 2.13.0", "pin-project-lite", "slab", "sync_wrapper", @@ -9539,9 +9539,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -9569,14 +9569,14 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -9650,7 +9650,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -9677,7 +9677,7 @@ checksum = "c88cc88fd23b5a04528f3a8436024f20010a16ec18eb23c164b1242f65860130" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "termcolor", ] @@ -9734,7 +9734,7 @@ checksum = "076a02dc54dd46795c2e9c8282ed40bcfb1e22747e955de9389a1de28190fb26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -9787,9 +9787,9 @@ dependencies = [ [[package]] name = "unicase" -version = "2.8.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-bidi" @@ -9868,14 +9868,15 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -9946,7 +9947,7 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -9969,7 +9970,7 @@ checksum = "2a3bfb04fd13da4fc8df24709b7a0949667f43c63691d9fecddf1d3be8af5099" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -10044,9 +10045,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasix" -version = "0.12.21" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +checksum = "1757e0d1f8456693c7e5c6c629bdb54884e032aa0bb53c155f6a39f94440d332" dependencies = [ "wasi 0.11.1+wasi-snapshot-preview1", ] @@ -10096,7 +10097,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "wasm-bindgen-shared", ] @@ -10223,9 +10224,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3e3b5f5e80bc89f30ce8d0343bf4e5f12341c51f3e26cbeecbc7c85443e85b" +checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" dependencies = [ "rustls-pki-types", ] @@ -10236,14 +10237,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.4", + "webpki-roots 1.0.5", ] [[package]] name = "webpki-roots" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +checksum = "12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c" dependencies = [ "rustls-pki-types", ] @@ -10383,7 +10384,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -10394,7 +10395,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -10903,7 +10904,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -10993,15 +10994,15 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] [[package]] name = "zbus" -version = "5.12.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" +checksum = "17f79257df967b6779afa536788657777a0001f5b42524fcaf5038d4344df40b" dependencies = [ "async-broadcast", "async-executor", @@ -11017,8 +11018,9 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix 0.30.1", + "libc", "ordered-stream", + "rustix 1.1.3", "serde", "serde_repr", "tracing", @@ -11033,14 +11035,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.12.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" +checksum = "aad23e2d2f91cae771c7af7a630a49e755f1eb74f8a46e9f6d5f7a146edf5a37" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "zbus_names", "zvariant", "zvariant_utils", @@ -11048,34 +11050,33 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.2.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" +checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" dependencies = [ "serde", - "static_assertions", "winnow", "zvariant", ] [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -11095,7 +11096,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] @@ -11110,13 +11111,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -11150,9 +11151,15 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] +[[package]] +name = "zmij" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea" + [[package]] name = "zstd" version = "0.13.3" @@ -11183,9 +11190,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.8.0" +version = "5.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" +checksum = "326aaed414f04fe839777b4c443d4e94c74e7b3621093bd9c5e649ac8aa96543" dependencies = [ "endi", "enumflags2", @@ -11197,26 +11204,26 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.8.0" +version = "5.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" +checksum = "ba44e1f8f4da9e6e2d25d2a60b116ef8b9d0be174a7685e55bb12a99866279a7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" +checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.111", + "syn 2.0.114", "winnow", ] diff --git a/core/src/context/cli.rs b/core/src/context/cli.rs index aafbc796e..5aeda762e 100644 --- a/core/src/context/cli.rs +++ b/core/src/context/cli.rs @@ -7,6 +7,7 @@ use std::sync::Arc; use cookie::{Cookie, Expiration, SameSite}; use cookie_store::CookieStore; use http::HeaderMap; +use imbl::OrdMap; use imbl_value::InternedString; use josekit::jwk::Jwk; use once_cell::sync::OnceCell; @@ -238,10 +239,16 @@ impl CliContext { where Self: CallRemote, { - >::call_remote(&self, method, params, Empty {}) - .await - .map_err(Error::from) - .with_ctx(|e| (e.kind, method)) + >::call_remote( + &self, + method, + OrdMap::new(), + params, + Empty {}, + ) + .await + .map_err(Error::from) + .with_ctx(|e| (e.kind, method)) } pub async fn call_remote_with( &self, @@ -252,10 +259,16 @@ impl CliContext { where Self: CallRemote, { - >::call_remote(&self, method, params, extra) - .await - .map_err(Error::from) - .with_ctx(|e| (e.kind, method)) + >::call_remote( + &self, + method, + OrdMap::new(), + params, + extra, + ) + .await + .map_err(Error::from) + .with_ctx(|e| (e.kind, method)) } } impl AsRef for CliContext { @@ -292,7 +305,13 @@ impl AsRef for CliContext { } impl CallRemote for CliContext { - async fn call_remote(&self, method: &str, params: Value, _: Empty) -> Result { + async fn call_remote( + &self, + method: &str, + _: OrdMap<&'static str, Value>, + params: Value, + _: Empty, + ) -> Result { if let Ok(local) = read_file_to_string(RpcContext::LOCAL_AUTH_COOKIE_PATH).await { self.cookie_store .lock() @@ -319,7 +338,13 @@ impl CallRemote for CliContext { } } impl CallRemote for CliContext { - async fn call_remote(&self, method: &str, params: Value, _: Empty) -> Result { + async fn call_remote( + &self, + method: &str, + _: OrdMap<&'static str, Value>, + params: Value, + _: Empty, + ) -> Result { crate::middleware::auth::signature::call_remote( self, self.rpc_url.clone(), @@ -332,7 +357,13 @@ impl CallRemote for CliContext { } } impl CallRemote for CliContext { - async fn call_remote(&self, method: &str, params: Value, _: Empty) -> Result { + async fn call_remote( + &self, + method: &str, + _: OrdMap<&'static str, Value>, + params: Value, + _: Empty, + ) -> Result { crate::middleware::auth::signature::call_remote( self, self.rpc_url.clone(), @@ -345,7 +376,13 @@ impl CallRemote for CliContext { } } impl CallRemote for CliContext { - async fn call_remote(&self, method: &str, params: Value, _: Empty) -> Result { + async fn call_remote( + &self, + method: &str, + _: OrdMap<&'static str, Value>, + params: Value, + _: Empty, + ) -> Result { crate::middleware::auth::signature::call_remote( self, self.rpc_url.clone(), @@ -358,7 +395,13 @@ impl CallRemote for CliContext { } } impl CallRemote for CliContext { - async fn call_remote(&self, method: &str, params: Value, _: Empty) -> Result { + async fn call_remote( + &self, + method: &str, + _: OrdMap<&'static str, Value>, + params: Value, + _: Empty, + ) -> Result { crate::middleware::auth::signature::call_remote( self, self.rpc_url.clone(), diff --git a/core/src/context/rpc.rs b/core/src/context/rpc.rs index e10ebf739..6988e5b75 100644 --- a/core/src/context/rpc.rs +++ b/core/src/context/rpc.rs @@ -29,7 +29,6 @@ use crate::db::model::package::TaskSeverity; use crate::disk::OsPartitionInfo; use crate::disk::mount::filesystem::bind::Bind; use crate::disk::mount::filesystem::block_dev::BlockDev; -use crate::disk::mount::filesystem::loop_dev::LoopDev; use crate::disk::mount::filesystem::{FileSystem, ReadOnly}; use crate::disk::mount::guard::MountGuard; use crate::init::{InitResult, check_time_is_synchronized}; @@ -586,8 +585,14 @@ impl RpcContext { where Self: CallRemote, { - >::call_remote(&self, method, params, Empty {}) - .await + >::call_remote( + &self, + method, + OrdMap::new(), + params, + Empty {}, + ) + .await } pub async fn call_remote_with( &self, @@ -598,7 +603,14 @@ impl RpcContext { where Self: CallRemote, { - >::call_remote(&self, method, params, extra).await + >::call_remote( + &self, + method, + OrdMap::new(), + params, + extra, + ) + .await } } impl AsRef for RpcContext { diff --git a/core/src/db/prelude.rs b/core/src/db/prelude.rs index f45d051cc..70d10c470 100644 --- a/core/src/db/prelude.rs +++ b/core/src/db/prelude.rs @@ -416,6 +416,51 @@ impl Model { } } +impl Model +where + T::Key: FromStr, + Error: From<::Err>, +{ + /// Retains only the elements specified by the predicate. + /// The predicate can mutate the values and returns whether to keep each entry. + pub fn retain(&mut self, mut f: F) -> Result<(), Error> + where + F: FnMut(&T::Key, &mut Model) -> Result, + { + let mut to_remove = Vec::new(); + + match &mut self.value { + Value::Object(o) => { + for (k, v) in o.iter_mut() { + let key = T::Key::from_str(&**k)?; + if !f(&key, patch_db::ModelExt::value_as_mut(v))? { + to_remove.push(k.clone()); + } + } + } + v => { + use serde::de::Error; + return Err(patch_db::value::Error { + source: patch_db::value::ErrorSource::custom(format!( + "expected object found {v}" + )), + kind: patch_db::value::ErrorKind::Deserialization, + } + .into()); + } + } + + // Remove entries that didn't pass the filter + if let Value::Object(o) = &mut self.value { + for k in to_remove { + o.remove(&k); + } + } + + Ok(()) + } +} + #[repr(transparent)] #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct JsonKey(pub T); diff --git a/core/src/registry/context.rs b/core/src/registry/context.rs index 0375a46d3..dd598b27d 100644 --- a/core/src/registry/context.rs +++ b/core/src/registry/context.rs @@ -7,6 +7,7 @@ use chrono::Utc; use clap::Parser; use cookie::{Cookie, Expiration, SameSite}; use http::HeaderMap; +use imbl::OrdMap; use imbl_value::InternedString; use patch_db::PatchDb; use patch_db::json_ptr::ROOT; @@ -171,6 +172,7 @@ impl CallRemote for CliContext { async fn call_remote( &self, mut method: &str, + _: OrdMap<&'static str, Value>, params: Value, _: Empty, ) -> Result { @@ -240,14 +242,21 @@ impl CallRemote for RpcContext { async fn call_remote( &self, mut method: &str, + metadata: OrdMap<&'static str, Value>, params: Value, RegistryUrlParams { mut registry }: RegistryUrlParams, ) -> Result { let mut headers = HeaderMap::new(); - headers.insert( - DEVICE_INFO_HEADER, - DeviceInfo::load(self).await?.to_header_value(), - ); + let mut device_info = None; + if metadata + .get("get_device_info") + .and_then(|m| m.as_bool()) + .unwrap_or(false) + { + let di = DeviceInfo::load(self).await?; + headers.insert(DEVICE_INFO_HEADER, di.to_header_value()); + device_info = Some(di); + } registry .path_segments_mut() @@ -258,15 +267,21 @@ impl CallRemote for RpcContext { method = method.strip_prefix("registry.").unwrap_or(method); let sig_context = registry.host_str().map(InternedString::from); - crate::middleware::auth::signature::call_remote( + let mut res = crate::middleware::auth::signature::call_remote( self, registry, headers, sig_context.as_deref(), method, - params, + params.clone(), ) - .await + .await?; + + if let Some(device_info) = device_info { + device_info.filter_for_hardware(method, params, &mut res)?; + } + + Ok(res) } } diff --git a/core/src/registry/device_info.rs b/core/src/registry/device_info.rs index 9b76ace68..08f233936 100644 --- a/core/src/registry/device_info.rs +++ b/core/src/registry/device_info.rs @@ -1,5 +1,4 @@ use std::collections::BTreeMap; -use std::convert::identity; use std::ops::Deref; use axum::extract::Request; @@ -7,6 +6,8 @@ use axum::response::Response; use exver::{Version, VersionRange}; use http::HeaderValue; use imbl_value::InternedString; +use patch_db::ModelExt; +use rpc_toolkit::yajrc::RpcMethod; use rpc_toolkit::{Middleware, RpcRequest, RpcResponse}; use serde::{Deserialize, Serialize}; use ts_rs::TS; @@ -15,8 +16,13 @@ use url::Url; use crate::context::RpcContext; use crate::prelude::*; use crate::registry::context::RegistryContext; +use crate::registry::os::index::OsVersionInfoMap; +use crate::registry::package::get::{ + GetPackageParams, GetPackageResponse, GetPackageResponseFull, PackageDetailLevel, +}; +use crate::registry::package::index::PackageVersionInfo; use crate::util::VersionString; -use crate::util::lshw::{LshwDevice, LshwDisplay, LshwProcessor}; +use crate::util::lshw::LshwDevice; use crate::version::VersionT; pub const DEVICE_INFO_HEADER: &str = "X-StartOS-Device-Info"; @@ -25,13 +31,13 @@ pub const DEVICE_INFO_HEADER: &str = "X-StartOS-Device-Info"; #[serde(rename_all = "camelCase")] pub struct DeviceInfo { pub os: OsInfo, - pub hardware: HardwareInfo, + pub hardware: Option, } impl DeviceInfo { pub async fn load(ctx: &RpcContext) -> Result { Ok(Self { os: OsInfo::from(ctx), - hardware: HardwareInfo::load(ctx).await?, + hardware: Some(HardwareInfo::load(ctx).await?), }) } } @@ -41,21 +47,13 @@ impl DeviceInfo { url.query_pairs_mut() .append_pair("os.version", &self.os.version.to_string()) .append_pair("os.compat", &self.os.compat.to_string()) - .append_pair("os.platform", &*self.os.platform) - .append_pair("hardware.arch", &*self.hardware.arch) - .append_pair("hardware.ram", &self.hardware.ram.to_string()); - - for device in &self.hardware.devices { - url.query_pairs_mut().append_pair( - &format!("hardware.device.{}", device.class()), - device.product(), - ); - } + .append_pair("os.platform", &*self.os.platform); HeaderValue::from_str(url.query().unwrap_or_default()).unwrap() } pub fn from_header_value(header: &HeaderValue) -> Result { let query: BTreeMap<_, _> = form_urlencoded::parse(header.as_bytes()).collect(); + let has_hw_info = query.keys().any(|k| k.starts_with("hardware.")); Ok(Self { os: OsInfo { version: query @@ -69,35 +67,120 @@ impl DeviceInfo { .deref() .into(), }, - hardware: HardwareInfo { - arch: query - .get("hardware.arch") - .or_not_found("hardware.arch")? - .parse()?, - ram: query - .get("hardware.ram") - .or_not_found("hardware.ram")? - .parse()?, - devices: identity(query) - .split_off("hardware.device.") - .into_iter() - .filter_map(|(k, v)| match k.strip_prefix("hardware.device.") { - Some("processor") => Some(LshwDevice::Processor(LshwProcessor { - product: v.into_owned(), - })), - Some("display") => Some(LshwDevice::Display(LshwDisplay { - product: v.into_owned(), - })), - Some(class) => { - tracing::warn!("unknown device class: {class}"); - None - } - _ => None, + hardware: has_hw_info + .then(|| { + Ok::<_, Error>(HardwareInfo { + arch: query + .get("hardware.arch") + .or_not_found("hardware.arch")? + .parse()?, + ram: query + .get("hardware.ram") + .or_not_found("hardware.ram")? + .parse()?, + devices: None, }) - .collect(), - }, + }) + .transpose()?, }) } + pub fn filter_for_hardware( + &self, + method: &str, + params: Value, + res: &mut Value, + ) -> Result<(), Error> { + match method { + "package.get" => { + let params: Model = ModelExt::from_value(params); + + let other = params.as_other_versions().de()?; + if params.as_id().transpose_ref().is_some() { + if other.unwrap_or_default() == PackageDetailLevel::Full { + self.filter_package_get_full(ModelExt::value_as_mut(res))?; + } else { + self.filter_package_get(ModelExt::value_as_mut(res))?; + } + } else { + for (_, v) in res.as_object_mut().into_iter().flat_map(|o| o.iter_mut()) { + if other.unwrap_or_default() == PackageDetailLevel::Full { + self.filter_package_get_full(ModelExt::value_as_mut(v))?; + } else { + self.filter_package_get(ModelExt::value_as_mut(v))?; + } + } + } + + Ok(()) + } + "os.version.get" => self.filter_os_version(ModelExt::value_as_mut(res)), + _ => Ok(()), + } + } + + fn filter_package_versions( + &self, + versions: &mut Model>, + ) -> Result<(), Error> { + let alpha_17: Version = "0.4.0-alpha.17".parse()?; + + // Filter package versions using for_device + versions.retain(|_, info| info.for_device(self))?; + + // Alpha.17 compatibility: add legacy fields + if self.os.version <= alpha_17 { + for (_, info) in versions.as_entries_mut()? { + let v = info.as_value_mut(); + if let Some(mut tup) = v["s9pks"].get(0).cloned() { + v["s9pk"] = tup[1].take(); + v["hardwareRequirements"] = tup[0].take(); + v["s9pk"]["url"] = v["s9pk"]["urls"][0].clone(); + } + } + } + + Ok(()) + } + + fn filter_package_get(&self, res: &mut Model) -> Result<(), Error> { + self.filter_package_versions(res.as_best_mut()) + } + + fn filter_package_get_full( + &self, + res: &mut Model, + ) -> Result<(), Error> { + self.filter_package_versions(res.as_best_mut())?; + self.filter_package_versions(res.as_other_versions_mut()) + } + + fn filter_os_version(&self, res: &mut Model) -> Result<(), Error> { + let alpha_17: Version = "0.4.0-alpha.17".parse()?; + + // Filter OS versions based on source_version compatibility + res.retain(|_, info| { + let source_version = info.as_source_version().de()?; + Ok(self.os.version.satisfies(&source_version)) + })?; + + // Alpha.17 compatibility: add url field from urls array + if self.os.version <= alpha_17 { + for (_, info) in res.as_entries_mut()? { + let v = info.as_value_mut(); + for asset_ty in ["iso", "squashfs", "img"] { + for (_, asset) in v[asset_ty] + .as_object_mut() + .into_iter() + .flat_map(|o| o.iter_mut()) + { + asset["url"] = asset["urls"][0].clone(); + } + } + } + } + + Ok(()) + } } #[derive(Clone, Debug, Deserialize, Serialize, TS)] @@ -127,7 +210,7 @@ pub struct HardwareInfo { pub arch: InternedString, #[ts(type = "number")] pub ram: u64, - pub devices: Vec, + pub devices: Option>, } impl HardwareInfo { pub async fn load(ctx: &RpcContext) -> Result { @@ -135,7 +218,7 @@ impl HardwareInfo { Ok(Self { arch: s.as_arch().de()?, ram: s.as_ram().de()?, - devices: s.as_devices().de()?, + devices: Some(s.as_devices().de()?), }) } } @@ -148,11 +231,17 @@ pub struct Metadata { #[derive(Clone)] pub struct DeviceInfoMiddleware { - device_info: Option, + device_info_header: Option, + device_info: Option, + req: Option, } impl DeviceInfoMiddleware { pub fn new() -> Self { - Self { device_info: None } + Self { + device_info_header: None, + device_info: None, + req: None, + } } } @@ -163,7 +252,7 @@ impl Middleware for DeviceInfoMiddleware { _: &RegistryContext, request: &mut Request, ) -> Result<(), Response> { - self.device_info = request.headers_mut().remove(DEVICE_INFO_HEADER); + self.device_info_header = request.headers_mut().remove(DEVICE_INFO_HEADER); Ok(()) } async fn process_rpc_request( @@ -174,9 +263,11 @@ impl Middleware for DeviceInfoMiddleware { ) -> Result<(), RpcResponse> { async move { if metadata.get_device_info { - if let Some(device_info) = &self.device_info { - request.params["__DeviceInfo_device_info"] = - to_value(&DeviceInfo::from_header_value(device_info)?)?; + if let Some(device_info) = &self.device_info_header { + let device_info = DeviceInfo::from_header_value(device_info)?; + request.params["__DeviceInfo_device_info"] = to_value(&device_info)?; + self.device_info = Some(device_info); + self.req = Some(request.clone()); } } @@ -185,4 +276,19 @@ impl Middleware for DeviceInfoMiddleware { .await .map_err(|e| RpcResponse::from_result(Err(e))) } + async fn process_rpc_response( + &mut self, + _: &RegistryContext, + response: &mut RpcResponse, + ) -> () { + if let (Some(req), Some(device_info), Ok(res)) = + (&self.req, &self.device_info, &mut response.result) + { + if let Err(e) = + device_info.filter_for_hardware(req.method.as_str(), req.params.clone(), res) + { + response.result = Err(e).map_err(From::from); + } + } + } } diff --git a/core/src/registry/package/add.rs b/core/src/registry/package/add.rs index 62b66d67f..938b5e649 100644 --- a/core/src/registry/package/add.rs +++ b/core/src/registry/package/add.rs @@ -54,7 +54,7 @@ pub async fn add_package( let peek = ctx.db.peek().await; let uploader_guid = peek.as_index().as_signers().get_signer(&uploader)?; - let ([url], rest) = urls.split_at(1) else { + let Some(([url], rest)) = urls.split_at_checked(1) else { return Err(Error::new( eyre!("must specify at least 1 url"), ErrorKind::InvalidRequest, diff --git a/core/src/registry/package/get.rs b/core/src/registry/package/get.rs index 6b099a063..f796622e1 100644 --- a/core/src/registry/package/get.rs +++ b/core/src/registry/package/get.rs @@ -2,7 +2,7 @@ use std::collections::{BTreeMap, BTreeSet}; use std::path::{Path, PathBuf}; use clap::{Parser, ValueEnum}; -use exver::{ExtendedVersion, Version, VersionRange}; +use exver::{ExtendedVersion, VersionRange}; use imbl_value::{InternedString, json}; use itertools::Itertools; use serde::{Deserialize, Serialize}; @@ -12,14 +12,11 @@ use crate::PackageId; use crate::context::CliContext; use crate::prelude::*; use crate::progress::{FullProgressTracker, ProgressUnits}; -use crate::registry::asset::RegistryAsset; use crate::registry::context::RegistryContext; use crate::registry::device_info::DeviceInfo; use crate::registry::package::index::{PackageIndex, PackageVersionInfo}; -use crate::s9pk::manifest::HardwareRequirements; use crate::s9pk::merkle_archive::source::ArchiveSource; use crate::s9pk::v2::SIG_CONTEXT; -use crate::sign::commitment::merkle_archive::MerkleArchiveCommitment; use crate::util::VersionString; use crate::util::io::{TrackingIO, to_tmp_path}; use crate::util::serde::{WithIoFormat, display_serializable}; @@ -28,7 +25,7 @@ use crate::util::tui::{choose, choose_custom_display}; #[derive( Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize, TS, ValueEnum, )] -#[serde(rename_all = "camelCase")] +#[serde(rename_all = "kebab-case")] #[ts(export)] pub enum PackageDetailLevel { None, @@ -48,10 +45,11 @@ pub struct PackageInfoShort { pub release_notes: String, } -#[derive(Debug, Deserialize, Serialize, TS, Parser)] +#[derive(Debug, Deserialize, Serialize, TS, Parser, HasModel)] #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] #[ts(export)] +#[model = "Model"] pub struct GetPackageParams { pub id: Option, #[ts(type = "string | null")] @@ -63,14 +61,14 @@ pub struct GetPackageParams { #[arg(skip)] #[serde(rename = "__DeviceInfo_device_info")] pub device_info: Option, - #[serde(default)] #[arg(default_value = "none")] - pub other_versions: PackageDetailLevel, + pub other_versions: Option, } -#[derive(Debug, Deserialize, Serialize, TS)] +#[derive(Debug, Deserialize, Serialize, TS, HasModel)] #[serde(rename_all = "camelCase")] #[ts(export)] +#[model = "Model"] pub struct GetPackageResponse { #[ts(type = "string[]")] pub categories: BTreeSet, @@ -111,9 +109,10 @@ impl GetPackageResponse { } } -#[derive(Debug, Deserialize, Serialize, TS)] +#[derive(Debug, Deserialize, Serialize, TS, HasModel)] #[serde(rename_all = "camelCase")] #[ts(export)] +#[model = "Model"] pub struct GetPackageResponseFull { #[ts(type = "string[]")] pub categories: BTreeSet, @@ -137,23 +136,15 @@ impl GetPackageResponseFull { pub type GetPackagesResponse = BTreeMap; pub type GetPackagesResponseFull = BTreeMap; -fn get_matching_models<'a>( - db: &'a Model, +fn get_matching_models( + db: &Model, GetPackageParams { id, source_version, device_info, .. }: &GetPackageParams, -) -> Result< - Vec<( - PackageId, - ExtendedVersion, - &'a Model, - Vec<(HardwareRequirements, RegistryAsset)>, - )>, - Error, -> { +) -> Result)>, Error> { if let Some(id) = id { if let Some(pkg) = db.as_packages().as_idx(id) { vec![(id.clone(), pkg)] @@ -180,12 +171,16 @@ fn get_matching_models<'a>( ), ) })? { + let mut info = info.clone(); if let Some(device_info) = &device_info { - info.for_device(device_info)? + if info.for_device(device_info)? { + Some((k.clone(), ExtendedVersion::from(v), info)) + } else { + None + } } else { - Some(info.as_s9pks().de()?) + Some((k.clone(), ExtendedVersion::from(v), info)) } - .map(|assets| (k.clone(), ExtendedVersion::from(v), info, assets)) } else { None }, @@ -199,31 +194,12 @@ fn get_matching_models<'a>( } pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Result { - use patch_db::ModelExt; - let peek = ctx.db.peek().await; - let mut best: BTreeMap< - PackageId, - BTreeMap< - VersionString, - ( - &Model, - Vec<(HardwareRequirements, RegistryAsset)>, - ), - >, - > = Default::default(); - let mut other: BTreeMap< - PackageId, - BTreeMap< - VersionString, - ( - &Model, - Vec<(HardwareRequirements, RegistryAsset)>, - ), - >, - > = Default::default(); - for (id, version, info, assets) in get_matching_models(&peek.as_index().as_package(), ¶ms)? - { + let mut best: BTreeMap>> = + Default::default(); + let mut other: BTreeMap>> = + Default::default(); + for (id, version, info) in get_matching_models(&peek.as_index().as_package(), ¶ms)? { let package_best = best.entry(id.clone()).or_default(); let package_other = other.entry(id.clone()).or_default(); if params @@ -242,12 +218,12 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu package_other.insert(worse_version, info); } } - package_best.insert(version.into(), (info, assets)); + package_best.insert(version.into(), info); } else { - package_other.insert(version.into(), (info, assets)); + package_other.insert(version.into(), info); } } - let mut res = if let Some(id) = ¶ms.id { + if let Some(id) = ¶ms.id { let categories = peek .as_index() .as_package() @@ -256,23 +232,14 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu .map(|p| p.as_categories().de()) .transpose()? .unwrap_or_default(); - let best = best + let best: BTreeMap = best .remove(id) .unwrap_or_default() .into_iter() - .map(|(k, (i, a))| { - Ok::<_, Error>(( - k, - PackageVersionInfo { - metadata: i.as_metadata().de()?, - source_version: i.as_source_version().de()?, - s9pks: a, - }, - )) - }) + .map(|(k, i)| Ok::<_, Error>((k, i.de()?))) .try_collect()?; let other = other.remove(id).unwrap_or_default(); - match params.other_versions { + match params.other_versions.unwrap_or_default() { PackageDetailLevel::None => to_value(&GetPackageResponse { categories, best, @@ -284,7 +251,7 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu other_versions: Some( other .into_iter() - .map(|(k, (i, _))| from_value(i.as_value().clone()).map(|v| (k, v))) + .map(|(k, i)| from_value(i.into()).map(|v| (k, v))) .try_collect()?, ), }), @@ -293,21 +260,12 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu best, other_versions: other .into_iter() - .map(|(k, (i, a))| { - Ok::<_, Error>(( - k, - PackageVersionInfo { - metadata: i.as_metadata().de()?, - source_version: i.as_source_version().de()?, - s9pks: a, - }, - )) - }) + .map(|(k, i)| Ok::<_, Error>((k, i.de()?))) .try_collect()?, }), } } else { - match params.other_versions { + match params.other_versions.unwrap_or_default() { PackageDetailLevel::None => to_value( &best .into_iter() @@ -326,9 +284,7 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu categories, best: best .into_iter() - .map(|(k, (i, _))| { - from_value(i.as_value().clone()).map(|v| (k, v)) - }) + .map(|(k, i)| Ok::<_, Error>((k, i.de()?))) .try_collect()?, other_versions: None, }, @@ -355,24 +311,12 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu categories, best: best .into_iter() - .into_iter() - .map(|(k, (i, a))| { - Ok::<_, Error>(( - k, - PackageVersionInfo { - metadata: i.as_metadata().de()?, - source_version: i.as_source_version().de()?, - s9pks: a, - }, - )) - }) + .map(|(k, i)| Ok::<_, Error>((k, i.de()?))) .try_collect()?, other_versions: Some( other .into_iter() - .map(|(k, (i, _))| { - from_value(i.as_value().clone()).map(|v| (k, v)) - }) + .map(|(k, i)| from_value(i.into()).map(|v| (k, v))) .try_collect()?, ), }, @@ -399,31 +343,11 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu categories, best: best .into_iter() - .into_iter() - .map(|(k, (i, a))| { - Ok::<_, Error>(( - k, - PackageVersionInfo { - metadata: i.as_metadata().de()?, - source_version: i.as_source_version().de()?, - s9pks: a, - }, - )) - }) + .map(|(k, i)| Ok::<_, Error>((k, i.de()?))) .try_collect()?, other_versions: other .into_iter() - .into_iter() - .map(|(k, (i, a))| { - Ok::<_, Error>(( - k, - PackageVersionInfo { - metadata: i.as_metadata().de()?, - source_version: i.as_source_version().de()?, - s9pks: a, - }, - )) - }) + .map(|(k, i)| Ok::<_, Error>((k, i.de()?))) .try_collect()?, }, )) @@ -431,47 +355,7 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu .try_collect::<_, GetPackagesResponseFull, _>()?, ), } - }?; - - // TODO: remove - if true - || params.device_info.map_or(false, |d| { - "0.4.0-alpha.17" - .parse::() - .map_or(false, |v| d.os.version <= v) - }) - { - let patch = |v: &mut Value| { - for kind in ["best", "otherVersions"] { - for (_, v) in v[kind] - .as_object_mut() - .into_iter() - .map(|v| v.iter_mut()) - .flatten() - { - let Some(mut tup) = v["s9pks"].get(0).cloned() else { - continue; - }; - v["s9pk"] = tup[1].take(); - v["hardwareRequirements"] = tup[0].take(); - v["s9pk"]["url"] = v["s9pk"]["urls"][0].clone(); - } - } - }; - if params.id.is_some() { - patch(&mut res); - } else { - for (_, v) in res - .as_object_mut() - .into_iter() - .map(|v| v.iter_mut()) - .flatten() - { - patch(v); - } - } } - Ok(res) } pub fn display_package_info( @@ -483,7 +367,7 @@ pub fn display_package_info( } if let Some(_) = params.rest.id { - if params.rest.other_versions == PackageDetailLevel::Full { + if params.rest.other_versions.unwrap_or_default() == PackageDetailLevel::Full { for table in from_value::(info)?.tables() { table.print_tty(false)?; println!(); @@ -495,7 +379,7 @@ pub fn display_package_info( } } } else { - if params.rest.other_versions == PackageDetailLevel::Full { + if params.rest.other_versions.unwrap_or_default() == PackageDetailLevel::Full { for (_, package) in from_value::(info)? { for table in package.tables() { table.print_tty(false)?; @@ -620,7 +504,7 @@ pub async fn cli_download( } else { "Devices" }, - hw.device.iter().map(|d| &d.pattern_description).join(", ") + hw.device.iter().map(|d| &d.description).join(", ") ) .unwrap(); } diff --git a/core/src/registry/package/index.rs b/core/src/registry/package/index.rs index ee7e2adae..61240f025 100644 --- a/core/src/registry/package/index.rs +++ b/core/src/registry/package/index.rs @@ -1,8 +1,10 @@ use std::collections::{BTreeMap, BTreeSet}; +use std::u32; use chrono::Utc; use exver::{Version, VersionRange}; use imbl_value::InternedString; +use patch_db::ModelExt; use serde::{Deserialize, Serialize}; use ts_rs::TS; use url::Url; @@ -223,50 +225,64 @@ impl PackageVersionInfo { } } impl Model { - pub fn for_device( - &self, - device_info: &DeviceInfo, - ) -> Result)>>, Error> - { + /// Filters this package version for compatibility with the given device. + /// Returns false if the package is incompatible (should be removed). + /// Modifies s9pks in place to only include compatible variants. + pub fn for_device(&mut self, device_info: &DeviceInfo) -> Result { if !self .as_metadata() .as_os_version() .de()? .satisfies(&device_info.os.compat) { - return Ok(None); + return Ok(false); } - let mut s9pk = self.as_s9pks().de()?; - s9pk.retain(|(hw, _)| { - if let Some(arch) = &hw.arch { - if !arch.contains(&device_info.hardware.arch) { - return false; + if let Some(hw) = &device_info.hardware { + self.as_s9pks_mut().mutate(|s9pks| { + s9pks.retain(|(hw_req, _)| { + if let Some(arch) = &hw_req.arch { + if !arch.contains(&hw.arch) { + return false; + } + } + if let Some(ram) = hw_req.ram { + if hw.ram < ram { + return false; + } + } + if let Some(dev) = &hw.devices { + for device_filter in &hw_req.device { + if !dev + .iter() + .filter(|d| d.class() == &*device_filter.class) + .any(|d| device_filter.matches(d)) + { + return false; + } + } + } + true + }); + if hw.devices.is_some() { + s9pks.sort_by_key(|(req, _)| req.specificity_desc()); + } else { + s9pks.sort_by_key(|(req, _)| { + let (dev, arch, ram) = req.specificity_desc(); + (u32::MAX - dev, arch, ram) + }); } - } - if let Some(ram) = hw.ram { - if device_info.hardware.ram < ram { - return false; - } - } - for device_filter in &hw.device { - if !device_info - .hardware - .devices - .iter() - .filter(|d| d.class() == &*device_filter.class) - .any(|d| device_filter.pattern.as_ref().is_match(d.product())) - { - return false; - } - } - true - }); + Ok(()) + })?; - if s9pk.is_empty() { - Ok(None) - } else { - Ok(Some(s9pk)) + if ModelExt::as_value(self.as_s9pks()) + .as_array() + .map_or(true, |s| s.is_empty()) + { + return Ok(false); + } } + + Ok(true) } } diff --git a/core/src/s9pk/v2/compat.rs b/core/src/s9pk/v2/compat.rs index cf33228e9..c15baef42 100644 --- a/core/src/s9pk/v2/compat.rs +++ b/core/src/s9pk/v2/compat.rs @@ -242,12 +242,13 @@ impl TryFrom for Manifest { .device .into_iter() .map(|(class, product)| DeviceFilter { - pattern_description: format!( + description: format!( "a {class} device matching the expression {}", product.as_ref() ), class, - pattern: product, + product: Some(product), + ..Default::default() }) .collect(), }, diff --git a/core/src/s9pk/v2/manifest.rs b/core/src/s9pk/v2/manifest.rs index 532b6492b..4f18453c4 100644 --- a/core/src/s9pk/v2/manifest.rs +++ b/core/src/s9pk/v2/manifest.rs @@ -15,6 +15,7 @@ use crate::s9pk::git_hash::GitHash; use crate::s9pk::merkle_archive::directory_contents::DirectoryContents; use crate::s9pk::merkle_archive::expected::{Expected, Filter}; use crate::s9pk::v2::pack::ImageConfig; +use crate::util::lshw::{LshwDevice, LshwDisplay, LshwProcessor}; use crate::util::serde::Regex; use crate::util::{VersionString, mime}; use crate::version::{Current, VersionT}; @@ -189,21 +190,107 @@ impl HardwareRequirements { } } -#[derive(Clone, Debug, Deserialize, Serialize, TS)] +#[derive(Clone, Debug, Default, Deserialize, Serialize, TS)] #[serde(rename_all = "camelCase")] #[ts(export)] pub struct DeviceFilter { + pub description: String, #[ts(type = "\"processor\" | \"display\"")] pub class: InternedString, - #[ts(type = "string")] - pub pattern: Regex, - pub pattern_description: String, + #[ts(type = "string | null")] + pub product: Option, + #[ts(type = "string | null")] + pub vendor: Option, + #[ts(optional)] + pub capabilities: Option>, + #[ts(optional)] + pub driver: Option, } +// Omit description impl PartialEq for DeviceFilter { fn eq(&self, other: &Self) -> bool { self.class == other.class - && InternedString::from_display(self.pattern.as_ref()) - == InternedString::from_display(other.pattern.as_ref()) + && self.product == other.product + && self.vendor == other.vendor + && self.capabilities == other.capabilities + && self.driver == other.driver + } +} +impl DeviceFilter { + pub fn matches(&self, device: &LshwDevice) -> bool { + if &*self.class != device.class() { + return false; + } + match device { + LshwDevice::Processor(LshwProcessor { + product, + vendor, + capabilities, + }) => { + if let Some(match_product) = &self.product { + if !product + .as_deref() + .map_or(false, |p| match_product.as_ref().is_match(p)) + { + return false; + } + } + if let Some(match_vendor) = &self.vendor { + if !vendor + .as_deref() + .map_or(false, |v| match_vendor.as_ref().is_match(v)) + { + return false; + } + } + if !self + .capabilities + .as_ref() + .map_or(true, |c| c.is_subset(capabilities)) + { + return false; + } + true + } + LshwDevice::Display(LshwDisplay { + product, + vendor, + capabilities, + driver, + }) => { + if let Some(match_product) = &self.product { + if !product + .as_deref() + .map_or(false, |p| match_product.as_ref().is_match(p)) + { + return false; + } + } + if let Some(match_vendor) = &self.vendor { + if !vendor + .as_deref() + .map_or(false, |v| match_vendor.as_ref().is_match(v)) + { + return false; + } + } + if !self + .capabilities + .as_ref() + .map_or(true, |c| c.is_subset(capabilities)) + { + return false; + } + if !self + .driver + .as_ref() + .map_or(true, |d| Some(d) == driver.as_ref()) + { + return false; + } + true + } + } } } diff --git a/core/src/service/cli.rs b/core/src/service/cli.rs index 2db07040c..7941124a4 100644 --- a/core/src/service/cli.rs +++ b/core/src/service/cli.rs @@ -2,6 +2,7 @@ use std::path::{Path, PathBuf}; use std::sync::Arc; use clap::Parser; +use imbl::OrdMap; use imbl_value::Value; use once_cell::sync::OnceCell; use rpc_toolkit::yajrc::RpcError; @@ -53,7 +54,13 @@ impl Context for ContainerCliContext { } impl CallRemote for ContainerCliContext { - async fn call_remote(&self, method: &str, params: Value, _: Empty) -> Result { + async fn call_remote( + &self, + method: &str, + _: OrdMap<&'static str, Value>, + params: Value, + _: Empty, + ) -> Result { call_remote_socket( tokio::net::UnixStream::connect(&self.0.socket) .await diff --git a/core/src/service/mod.rs b/core/src/service/mod.rs index 98af8716e..575d4d619 100644 --- a/core/src/service/mod.rs +++ b/core/src/service/mod.rs @@ -9,7 +9,6 @@ use std::sync::{Arc, Weak}; use std::time::Duration; use axum::extract::ws::Utf8Bytes; -use crate::util::net::WebSocket; use clap::Parser; use futures::future::BoxFuture; use futures::stream::FusedStream; @@ -48,6 +47,7 @@ use crate::util::Never; use crate::util::actor::concurrent::ConcurrentActor; use crate::util::future::NonDetachingJoinHandle; use crate::util::io::{AsyncReadStream, AtomicFile, TermSize, delete_file}; +use crate::util::net::WebSocket; use crate::util::serde::Pem; use crate::util::sync::SyncMutex; use crate::volume::data_dir; diff --git a/core/src/status/mod.rs b/core/src/status/mod.rs index 092b618a2..ea4d0da98 100644 --- a/core/src/status/mod.rs +++ b/core/src/status/mod.rs @@ -51,6 +51,7 @@ impl Model { } pub fn stopped(&mut self) -> Result<(), Error> { self.as_started_mut().ser(&None)?; + self.as_health_mut().ser(&Default::default())?; Ok(()) } pub fn restart(&mut self) -> Result<(), Error> { @@ -59,7 +60,7 @@ impl Model { Ok(()) } pub fn init(&mut self) -> Result<(), Error> { - self.as_started_mut().ser(&None)?; + self.stopped()?; self.as_desired_mut().map_mutate(|s| { Ok(match s { DesiredStatus::BackingUp { diff --git a/core/src/tunnel/context.rs b/core/src/tunnel/context.rs index 9d1c22655..6de360bf5 100644 --- a/core/src/tunnel/context.rs +++ b/core/src/tunnel/context.rs @@ -251,6 +251,8 @@ impl CallRemote for CliContext { async fn call_remote( &self, mut method: &str, + + _: OrdMap<&'static str, Value>, params: Value, _: Empty, ) -> Result { @@ -315,6 +317,7 @@ impl CallRemote for RpcContext { async fn call_remote( &self, mut method: &str, + _: OrdMap<&'static str, Value>, params: Value, TunnelUrlParams { tunnel }: TunnelUrlParams, ) -> Result { diff --git a/core/src/util/lshw.rs b/core/src/util/lshw.rs index 98c1a09ab..2f61741b9 100644 --- a/core/src/util/lshw.rs +++ b/core/src/util/lshw.rs @@ -1,9 +1,12 @@ +use std::collections::BTreeSet; + +use imbl_value::InternedString; use serde::{Deserialize, Serialize}; use tokio::process::Command; use ts_rs::TS; +use crate::prelude::*; use crate::util::Invoke; -use crate::{Error, ResultExt}; const KNOWN_CLASSES: &[&str] = &["processor", "display"]; @@ -22,22 +25,57 @@ impl LshwDevice { Self::Display(_) => "display", } } - pub fn product(&self) -> &str { - match self { - Self::Processor(hw) => hw.product.as_str(), - Self::Display(hw) => hw.product.as_str(), + pub fn from_value(value: &Value) -> Option { + match value["class"].as_str() { + Some("processor") => Some(LshwDevice::Processor(LshwProcessor::from_value(value))), + Some("display") => Some(LshwDevice::Display(LshwDisplay::from_value(value))), + _ => None, } } } #[derive(Clone, Debug, Deserialize, Serialize, TS)] pub struct LshwProcessor { - pub product: String, + pub product: Option, + pub vendor: Option, + pub capabilities: BTreeSet, +} +impl LshwProcessor { + fn from_value(value: &Value) -> Self { + Self { + product: value["product"].as_str().map(From::from), + vendor: value["vendor"].as_str().map(From::from), + capabilities: value["capabilities"] + .as_object() + .into_iter() + .flat_map(|o| o.keys()) + .map(|k| k.clone()) + .collect(), + } + } } #[derive(Clone, Debug, Deserialize, Serialize, TS)] pub struct LshwDisplay { - pub product: String, + pub product: Option, + pub vendor: Option, + pub capabilities: BTreeSet, + pub driver: Option, +} +impl LshwDisplay { + fn from_value(value: &Value) -> Self { + Self { + product: value["product"].as_str().map(From::from), + vendor: value["vendor"].as_str().map(From::from), + capabilities: value["capabilities"] + .as_object() + .into_iter() + .flat_map(|o| o.keys()) + .map(|k| k.clone()) + .collect(), + driver: value["configuration"]["driver"].as_str().map(From::from), + } + } } pub async fn lshw() -> Result, Error> { @@ -47,19 +85,10 @@ pub async fn lshw() -> Result, Error> { cmd.arg("-class").arg(*class); } Ok( - serde_json::from_slice::>( - &cmd.invoke(crate::ErrorKind::Lshw).await?, - ) - .with_kind(crate::ErrorKind::Deserialization)? - .into_iter() - .filter_map(|v| match serde_json::from_value(v) { - Ok(a) => Some(a), - Err(e) => { - tracing::error!("Failed to parse lshw output: {e}"); - tracing::debug!("{e:?}"); - None - } - }) - .collect(), + serde_json::from_slice::>(&cmd.invoke(crate::ErrorKind::Lshw).await?) + .with_kind(crate::ErrorKind::Deserialization)? + .iter() + .filter_map(LshwDevice::from_value) + .collect(), ) } diff --git a/core/src/util/serde.rs b/core/src/util/serde.rs index 3bbedb75b..ace93738e 100644 --- a/core/src/util/serde.rs +++ b/core/src/util/serde.rs @@ -1127,6 +1127,11 @@ impl Serialize for Regex { serialize_display(&self.0, serializer) } } +impl PartialEq for Regex { + fn eq(&self, other: &Self) -> bool { + InternedString::from_display(self.as_ref()) == InternedString::from_display(other.as_ref()) + } +} // TODO: make this not allocate #[derive(Debug)] diff --git a/core/src/version/v0_3_6_alpha_8.rs b/core/src/version/v0_3_6_alpha_8.rs index b58d9c9e6..b60045ffa 100644 --- a/core/src/version/v0_3_6_alpha_8.rs +++ b/core/src/version/v0_3_6_alpha_8.rs @@ -1,6 +1,7 @@ use std::path::Path; use exver::{PreReleaseSegment, VersionRange}; +use imbl_value::json; use tokio::fs::File; use super::v0_3_5::V0_3_0_COMPAT; @@ -10,7 +11,7 @@ use crate::context::RpcContext; use crate::install::PKG_ARCHIVE_DIR; use crate::prelude::*; use crate::s9pk::S9pk; -use crate::s9pk::manifest::{DeviceFilter, Manifest}; +use crate::s9pk::manifest::Manifest; use crate::s9pk::merkle_archive::MerkleArchive; use crate::s9pk::merkle_archive::source::multi_cursor_file::MultiCursorFile; use crate::s9pk::v2::SIG_CONTEXT; @@ -84,28 +85,8 @@ impl VersionT for Version { let mut manifest = previous_manifest.clone(); - if let Some(device) = - previous_manifest["hardwareRequirements"]["device"].as_object() - { - manifest["hardwareRequirements"]["device"] = to_value( - &device - .into_iter() - .map(|(class, product)| { - Ok::<_, Error>(DeviceFilter { - pattern_description: format!( - "a {class} device matching the expression {}", - &product - ), - class: class.clone(), - pattern: from_value(product.clone())?, - }) - }) - .fold(Ok::<_, Error>(Vec::new()), |acc, value| { - let mut acc = acc?; - acc.push(value?); - Ok(acc) - })?, - )?; + if let Some(_) = previous_manifest["hardwareRequirements"]["device"].as_object() { + manifest["hardwareRequirements"]["device"] = json!([]); } if previous_manifest != manifest { diff --git a/debian/startos/postinst b/debian/startos/postinst index 924a29031..7ed9a5f19 100755 --- a/debian/startos/postinst +++ b/debian/startos/postinst @@ -29,34 +29,6 @@ if [ -f /etc/default/grub ]; then else echo 'GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"' >> /etc/default/grub fi - - cat > /etc/grub.d/01_reboot_efi <<-EOF - #!/bin/sh - - set -e - - # Only affect EFI systems - if [ ! -d /sys/firmware/efi ]; then - exit 0 - fi - - # Import helpers (path is Debian/Ubuntu style) - . /usr/lib/grub/grub-mkconfig_lib - - # Append reboot=efi to GRUB_CMDLINE_LINUX* seen by later scripts - if [ -n "\${GRUB_CMDLINE_LINUX}" ]; then - GRUB_CMDLINE_LINUX="\${GRUB_CMDLINE_LINUX} reboot=efi" - else - GRUB_CMDLINE_LINUX="reboot=efi" - fi - - if [ -n "\${GRUB_CMDLINE_LINUX_DEFAULT}" ]; then - GRUB_CMDLINE_LINUX_DEFAULT="\${GRUB_CMDLINE_LINUX_DEFAULT} reboot=efi" - fi - - export GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX_DEFAULT - EOF - chmod +x /etc/grub.d/01_reboot_efi fi VERSION="$(cat /usr/lib/startos/VERSION.txt)" diff --git a/sdk/base/lib/osBindings/AddMirrorParams.ts b/sdk/base/lib/osBindings/AddMirrorParams.ts new file mode 100644 index 000000000..2aa708376 --- /dev/null +++ b/sdk/base/lib/osBindings/AddMirrorParams.ts @@ -0,0 +1,9 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { AnySignature } from "./AnySignature" +import type { MerkleArchiveCommitment } from "./MerkleArchiveCommitment" + +export type AddMirrorParams = { + url: string + commitment: MerkleArchiveCommitment + signature: AnySignature +} diff --git a/sdk/base/lib/osBindings/AddPackageParams.ts b/sdk/base/lib/osBindings/AddPackageParams.ts index 4395b9b8a..a21619c00 100644 --- a/sdk/base/lib/osBindings/AddPackageParams.ts +++ b/sdk/base/lib/osBindings/AddPackageParams.ts @@ -3,7 +3,7 @@ import type { AnySignature } from "./AnySignature" import type { MerkleArchiveCommitment } from "./MerkleArchiveCommitment" export type AddPackageParams = { - url: string + urls: string[] commitment: MerkleArchiveCommitment signature: AnySignature } diff --git a/sdk/base/lib/osBindings/DeviceFilter.ts b/sdk/base/lib/osBindings/DeviceFilter.ts index 6e6f5810c..c50468e37 100644 --- a/sdk/base/lib/osBindings/DeviceFilter.ts +++ b/sdk/base/lib/osBindings/DeviceFilter.ts @@ -1,7 +1,10 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. export type DeviceFilter = { + description: string class: "processor" | "display" - pattern: string - patternDescription: string + product: string | null + vendor: string | null + capabilities?: Array + driver?: string } diff --git a/sdk/base/lib/osBindings/GetPackageParams.ts b/sdk/base/lib/osBindings/GetPackageParams.ts index 22046d8e9..ecee3173f 100644 --- a/sdk/base/lib/osBindings/GetPackageParams.ts +++ b/sdk/base/lib/osBindings/GetPackageParams.ts @@ -7,5 +7,5 @@ export type GetPackageParams = { id: PackageId | null targetVersion: string | null sourceVersion: Version | null - otherVersions: PackageDetailLevel + otherVersions: PackageDetailLevel | null } diff --git a/sdk/base/lib/osBindings/LshwDisplay.ts b/sdk/base/lib/osBindings/LshwDisplay.ts index 25d14b12f..658e4ac85 100644 --- a/sdk/base/lib/osBindings/LshwDisplay.ts +++ b/sdk/base/lib/osBindings/LshwDisplay.ts @@ -1,3 +1,8 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -export type LshwDisplay = { product: string } +export type LshwDisplay = { + product: string | null + vendor: string | null + capabilities: Array + driver: string | null +} diff --git a/sdk/base/lib/osBindings/LshwProcessor.ts b/sdk/base/lib/osBindings/LshwProcessor.ts index 17a47d477..f0cb4a2c7 100644 --- a/sdk/base/lib/osBindings/LshwProcessor.ts +++ b/sdk/base/lib/osBindings/LshwProcessor.ts @@ -1,3 +1,7 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -export type LshwProcessor = { product: string } +export type LshwProcessor = { + product: string | null + vendor: string | null + capabilities: Array +} diff --git a/sdk/base/lib/osBindings/RemoveMirrorParams.ts b/sdk/base/lib/osBindings/RemoveMirrorParams.ts new file mode 100644 index 000000000..5d3ef3f6b --- /dev/null +++ b/sdk/base/lib/osBindings/RemoveMirrorParams.ts @@ -0,0 +1,9 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { PackageId } from "./PackageId" +import type { Version } from "./Version" + +export type RemoveMirrorParams = { + id: PackageId + version: Version + url: string +} diff --git a/sdk/base/lib/osBindings/RemovePackageParams.ts b/sdk/base/lib/osBindings/RemovePackageParams.ts index aee8d50f2..a22eba4e3 100644 --- a/sdk/base/lib/osBindings/RemovePackageParams.ts +++ b/sdk/base/lib/osBindings/RemovePackageParams.ts @@ -1,5 +1,10 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { Base64 } from "./Base64" import type { PackageId } from "./PackageId" import type { Version } from "./Version" -export type RemovePackageParams = { id: PackageId; version: Version } +export type RemovePackageParams = { + id: PackageId + version: Version + sighash: Base64 | null +} diff --git a/sdk/base/lib/osBindings/index.ts b/sdk/base/lib/osBindings/index.ts index f823343eb..f0da142fe 100644 --- a/sdk/base/lib/osBindings/index.ts +++ b/sdk/base/lib/osBindings/index.ts @@ -13,6 +13,7 @@ export { ActionVisibility } from "./ActionVisibility" export { AddAdminParams } from "./AddAdminParams" export { AddAssetParams } from "./AddAssetParams" export { AddCategoryParams } from "./AddCategoryParams" +export { AddMirrorParams } from "./AddMirrorParams" export { AddPackageParams } from "./AddPackageParams" export { AddPackageSignerParams } from "./AddPackageSignerParams" export { AddPackageToCategoryParams } from "./AddPackageToCategoryParams" @@ -171,6 +172,7 @@ export { RegistryInfo } from "./RegistryInfo" export { RemoveAdminParams } from "./RemoveAdminParams" export { RemoveAssetParams } from "./RemoveAssetParams" export { RemoveCategoryParams } from "./RemoveCategoryParams" +export { RemoveMirrorParams } from "./RemoveMirrorParams" export { RemovePackageFromCategoryParams } from "./RemovePackageFromCategoryParams" export { RemovePackageParams } from "./RemovePackageParams" export { RemovePackageSignerParams } from "./RemovePackageSignerParams"